Wir werden ein Script erstellen um automatisch eine Beschriftung zu erzeugen, welche gleich im Projektordner abgespeichert wird.
Hier gibt es eine schöne Funktion in Eplan. Dienstprogramme/Automatisiert bearbeiten/Einstellungen…
In diesem Dialog kann man sich sehr schön seine Beschriftungen zusammen klicken:
Zuerst erstellen wir uns ein Testscript (klicken auf neu)
Hier vergeben wir einen beliebigen Namen
Nun markieren wir „Beschriften“ und fügen es nach rechts ein
Im folgenden Dialog kann man nun eine beliebige Beschriftung zusammenstellen (Speicherort ist zu vernachlässigen, da wir diesen später im Script bestimmen)
Wichtig! Nun muss das Script gespeichert werden (Diskettensymbol).
Danach klicken wir oben auf Bearbeiten (Stiftsymbol).
Siehe da… Wir haben ein (fast) fertiges Script :)
public class Script
{
[Start]
public void AutoTreat(String ProjectName)
{
Progress progress = new Progress("SimpleProgress");
progress.BeginPart(100, "");
progress.SetAllowCancel(true);
if (!progress.Canceled())
{
progress.BeginPart(100, "Labelling");
ActionCallingContext labellingContext = new ActionCallingContext();
labellingContext.AddParameter("CONFIGSCHEME", "test");
labellingContext.AddParameter("DESTINATIONFILE", @"C:\Test");
labellingContext.AddParameter("FILTERSCHEME", "");
labellingContext.AddParameter("LANGUAGE", "de_DE");
labellingContext.AddParameter("LogMsgActionDone", "true");
labellingContext.AddParameter("SHOWOUTPUT", "1");
labellingContext.AddParameter("PROJECTNAME", ProjectName);
labellingContext.AddParameter("RECREPEAT", "1");
labellingContext.AddParameter("SORTSCHEME", "");
labellingContext.AddParameter("TASKREPEAT", "1");
new CommandLineInterpreter().Execute("label", labellingContext);
progress.EndPart();
}
progress.EndPart(true);
}
}
Ein bisschen Nacharbeit ist aber dennoch erforderlich:
public class Script
{
[Start]
public void AutoTreat(String ProjectName)
{
}
Hier Bennenen wir unser Script und unsere Klasse:
public class Beschriftung
{
}
In dieser Zeile wird ein String übergeben für den Projektnamen. Dies funktioniert aber im Scripting leider nicht. Darum kann man hier den String löschen und wir bauen uns das ganze selbst zusammen.
public void AutoTreat(String ProjectName)
Zusammen ergibt das alles:
public class Beschriftung
{
[DeclareAction("Beschriftung")]
public void BeschriftungVoid()
{
}
}
In der folgenden Zeile wird nur ein Startpunkt festgelegt. Dies dient dazu das Script zu starten über Dienstprogramme/Scripte/Ausführen…
Wir wollen aber das ganze fest einbinden (Laden…). Darum deklarieren wir nun eine neue Action, welche wir dann wie immer in der Toolbar verknüpfen können.
[Start]
Wird dann zu…
[DeclareAction("Beschriftung")]
Nun sieht unser Code wie folgt aus:
public class Beschriftung
{
[DeclareAction("Beschriftung")]
public void BeschriftungVoid()
{
Progress progress = new Progress("SimpleProgress");
progress.BeginPart(100, "");
progress.SetAllowCancel(true);
if (!progress.Canceled())
{
progress.BeginPart(100, "Labelling");
ActionCallingContext labellingContext = new ActionCallingContext();
labellingContext.AddParameter("CONFIGSCHEME", "test");
labellingContext.AddParameter("DESTINATIONFILE", @"C:\Test");
labellingContext.AddParameter("FILTERSCHEME", "");
labellingContext.AddParameter("LANGUAGE", "de_DE");
labellingContext.AddParameter("LogMsgActionDone", "true");
labellingContext.AddParameter("SHOWOUTPUT", "1");
labellingContext.AddParameter("PROJECTNAME", ProjectName);
labellingContext.AddParameter("RECREPEAT", "1");
labellingContext.AddParameter("SORTSCHEME", "");
labellingContext.AddParameter("TASKREPEAT", "1");
new CommandLineInterpreter().Execute("label", labellingContext);
progress.EndPart();
}
progress.EndPart(true);
}
}
Nun kommen wir zu der eigentlichen Action:
Progress progress = new Progress("SimpleProgress");
progress.BeginPart(100, "");
progress.SetAllowCancel(true);
if (!progress.Canceled())
{
progress.BeginPart(100, "Labelling");
progress.EndPart();
}
progress.EndPart(true);
}
Hier wird eine Progressbar (Ladebalken) initialisiert (Titelzeile = „Labelling“). Die Action wird ausgeführt wenn nicht der Button Cancel (Deutsch = Abbrechen) gedrückt wird.
Nun kommen wir zur Beschriftungsfunktion:
ActionCallingContext labellingContext = new ActionCallingContext();
labellingContext.AddParameter("CONFIGSCHEME", "test");
labellingContext.AddParameter("DESTINATIONFILE", @"C:\Test");
labellingContext.AddParameter("FILTERSCHEME", "");
labellingContext.AddParameter("LANGUAGE", "de_DE");
labellingContext.AddParameter("LogMsgActionDone", "true");
labellingContext.AddParameter("SHOWOUTPUT", "1");
labellingContext.AddParameter("PROJECTNAME", ProjectName);
labellingContext.AddParameter("RECREPEAT", "1");
labellingContext.AddParameter("SORTSCHEME", "");
labellingContext.AddParameter("TASKREPEAT", "1");
new CommandLineInterpreter().Execute("label", labellingContext);
ActionCallingContext: Sind die Parameter welche der Action “mitgegeben” werden.
AddParameter: fügt Parameter hinzu (Parametername + Wert)
CommandLineInterpreter().Execute: Führt die Action mit den Parametern aus.
Die Parameter wurden von Eplan schon alle gefüllt (nach dem Schema welches wir eingestellt, bzw. konfiguriert haben)
Man kann dies auch nachlesen (in der Suche nach „label“ suchen).
Nun müssen wir aber noch beim Parameter „PROJECTNAME“ unser Projekt irgendwie eintragen, da Eplan so nicht weiß welches Project gemeint ist.
Zusätzlich versuchen wir gleich den aktuellen Projektordner herauszufinden…
Das Ganze ist nicht schwer, wenn man weiß wie ;)
Zuerst eine kurze Erklärung von „String“. Was ist ein String. Einfach gesagt eine Zeichenkette (Zahlen, Buchstaben, usw.)
Nun wollen wir diese Informationen (Projektname und Projektpfad) jeweils in einen String schreiben.
Die meisten von Euch kennen bestimmt die Pfadvariablen in Eplan. Genau diese nutzen wir nun im Scripting auch.
string ProjectName = PathMap.SubstitutePath("$(P)");
string sProjectName = PathMap.SubstitutePath("$(PROJECTNAME)");
string Projectpath = PathMap.SubstitutePath("$(PROJECTPATH)");
Beim Projektpfad möchte ich aber, dass die Beschriftung im selben Ordner gespeichert wird wie die *.elk-Datei.
Darum fügen wir eine Funktion ein welche den String kürzt. Beispiel:
„C:\Test\Testprojekt.elk“ >>> „C:\Testprojekt.elk“
Projectpath = Projectpath.Substring(0, sProjectpath.LastIndexOf("\\"));
Nun bauen wir das ganze mal zusammen :)
public class Beschriftung
{
[DeclareAction("Beschriftung")]
public void BeschriftungVoid()
{
string ProjectFullName = PathMap.SubstitutePath("$(P)"); // Projektpfad + Projektname + Erweiterung
string sProjectName = PathMap.SubstitutePath("$(PROJECTNAME)");
string Projectpath = PathMap.SubstitutePath("$(PROJECTPATH)"); // Projektpfad
Projectpath = Projectpath.Substring(0, Projectpath.LastIndexOf("\\")); // Pfad zur Projektdatei
// Initialisierung Progressbar
Progress progress = new Progress("SimpleProgress");
progress.BeginPart(100, "");
progress.SetAllowCancel(true);
if (!progress.Canceled())
{
progress.BeginPart(100, "Text im Ladebalken Dialog");
// Parameter für die Action
ActionCallingContext labellingContext = new ActionCallingContext();
labellingContext.AddParameter("CONFIGSCHEME", "test");
labellingContext.AddParameter("DESTINATIONFILE", Projectpath + sProjectName + "_Testbeschriftung.txt"); // Zieldatei: "Projektpfad/Projektname_Testbeschriftung.txt"
labellingContext.AddParameter("FILTERSCHEME", "");
labellingContext.AddParameter("LANGUAGE", "de_DE");
labellingContext.AddParameter("LogMsgActionDone", "true");
labellingContext.AddParameter("SHOWOUTPUT", "1");
labellingContext.AddParameter("PROJECTNAME", ProjectFullName); // Projektname komplett mit Erweiterung
labellingContext.AddParameter("RECREPEAT", "1");
labellingContext.AddParameter("SORTSCHEME", "");
labellingContext.AddParameter("TASKREPEAT", "1");
// Ausführen der Beschriftungsaction mit Parametern
new CommandLineInterpreter().Execute("label", labellingContext);
// Progressbar ENDE
progress.EndPart();
}
progress.EndPart(true);
}
}
Wichtig sind die Ergänzungen bei den Parametern DESTINATIONFILE (Zieldatei) und PROJECTNAME!
Falls ihr etwas nicht versteht oder allgemeine Fragen habt, schreibt dies einfach in die Kommentare!
Hallo, da ich nicht so viel erfahrung habe mit Scripten unter eplan würde ich gern wissen ob ich diese Aktion auch einem eigenen Button hintelegen kann?
Da mir ja in P8 2.0 die möglichkeit gegeben wird mir eigene Symbolleisten zu erzeugen, allerdings weiß ich nicht genau ob bzw. wie ich jetzt ein Script dort hintelgen kann?
Folgender Hintergrund: Ich möchte eine Kabelliste per Knopfdruck erzeugen
Gruß
Marco
Klar kannst du … sogar ganz einfach…
Am Anfang wird der Actionname deklariert:
In diesem Fall ist es “Beschriftung”. Lege nun eine Toolbar an mit z.B. “Makro einfügen” (Unter Befehle –> Aktionen). Nun kannst du im Feld “Befehlszeile” den Text editieren. Lösch alles herraus und gibt nur den Actionnamen ein.
Nun müsste das ganze funktionieren.
hmm also irgendetwas mach ich falsch ich habe jetzt ein Script das ziehmlich dem hier beschriebenen ähnelt :biggrin:
Das Script hab ich gespeichert und auch exportiert!
dann hab ich mir eine Symbolleiste erstellt (Optionen–> Symbolleiste –> Anpassen), mit dem Namen “Eigene Symbolleiste”, dan zieh ich mir dann aus der Registrierkarte “Befehle” aus der Kategorie “Aktionen” die “Schaltfläche: Makro einfügen” hinein, wähle ein Bild und lösche den Text aus der “Befehlszeile” herraus und hab nur “Beschriftung” eingefügt… dann passiert natürlich nichts und ich kann den button nicht drücken!
sicherlich muss doch hier irgendwo noch auf mein script verwiesen/hinterlegt werden :wassat:
ist bei dir die Zeile:
oder ähnlich vorhanden?
Schick mir mal das Script dann schau ichs mir an …
Hallo, kann es sein, dass dieses Skript nicht mehr unter P8 v2.0 läuft?
Sobald ich der Zeile
etwas anderes als einen konstanten String anfüge, sagt ePlan, das Skript könne nicht kompiliert werden. Und wenn ich es trotzdem versuche auszuführen, kommt die Fehlermeldung, das ein “}” erwartet würde (darüberhinaus an einer schwachsinnigen Stelle).
Dafür funktioniert jetzt aber die Variablenübergabe von “ProjectName”.
Danke für ein kleines Feedback
Peter
Hab es in der Version 2.0.9 getestet und es funktioniert genau wie in der 1.9.11.
Du sprichst von ausführen. Dir ist bewusst dass du das Script laden musst?
Füg dein Script hier in den Kommentaren ein, dann schau ich mir des mal an :sideways:
Hi Jonny Wire,
danke für Dein Angebot.
Zunächst einmal: Stimmt, ich hatte es nicht geladen, sondern über “Einstellungen (automatisiertes bearbeiten)” importiert und dann per “Automatisiert bearbeiten” ausführen wollen. Das erschien mir in der Testphase einfacher als ständig das Skript zu entladen und wieder neu zu laden.
Aber jetzt habe ich das Skript auch noch mal angepasst und direkt versucht, es zu laden. Klappt aber leider trotzdem nicht.
Hier das Skript:
Eingebunden wird das Skript über ein Menü, welches ich in einer weiteren Skriptdatei definiert habe. Die Aktion wird dabei auch korrekt registriert, was daran zu erkennen ist, das der entsprechende Menüpunkt ausgegraut ist, sobald ich das Skript entlade. Wenn ich das Skript wieder lade, kann ich den Menüpunkt betätigen. Leider passiert dann genau garnix. :sad:
Danke für Deine Hilfe
Peter
entferne die Parameterübergabe von ProjectName.
Zusätzlich weiß ich nicht ob du DeclareAction und Start zusammen nutzen kannst.
Schau dir mein Beispiel an. Dort ermittle ich den Projektnamen mit einer Pfadvariable (was aber normal nicht nötig ist aber in der 1.9er gab es einen Bug wenn man nicht den kompletten Namen angab).
Habe es gemacht und es funktioniert.
Danke, läuft jetzt.
Wenn ich vorher mein Hirn eingeschaltet hätte, hätte ich auch von selbst drauf kommen müssen :blush: : Natürlich darf da keine Parameterübergabe sein, woher soll die denn auch stammen. Schließlich rufe ich im Menü lediglich den Namen der Aktion auf.
Das mit dem kombinierten DeclareAction und Start hatte ich irgendwo mal gesehen und einfach ausprobiert, weil ja vorher nix funktionierte. Ich habe jetzt das Start rausgenommen und es funzt.
Nochmals vielen Dank für die schnelle Hilfe
Peter
Dear Johnny Wire;
I’ll ask you a question in Englisch since i’m dutch and my deutsch is limited to reading only…
I’ve configured a scheme “compress for backup” for the compress function, and call for that in a script.
I can use this script in the selected project (since i created it there) and that works fine…
Now i want to use this script over several projects, and the problem is, since the scheme “compress for backup” is not existing in those other projects, Eplan doesn’t recognise it and gives me an error… :getlost:
Is there any possibility at all to load an XML file with the configured compress scheme in the other projects and then call for the compress function?
Some background info from what I would like to do:
I want to compress, archive & create a PDF from all the projects i’ve created in 2010, that’s over 500 projects and i don’t want to do the same repetitive actions in each project (what else is scripting for? :biggrin: )
So I tought, let’s make an automated action for that! I should then be able to use it in the project management screen on my selected projects, but unfortunatly it doesn’t work that way, with the result described as above :sad:
Can you help me out with this one?
Thanks in advance,
Jeroen
Hi Jeroen,
1. You are not able to change project settings. So your can’t import a compress scheme.
2. What you mean with archive. Do you want to move the project to an other folder? This ist possible with the file methods (System.File)
3. PDF that’s no problem, use the export action (EPLAN).
You have to literal over all your Projects. The better way is to use the external comandline.
Edit this sample for your filesystem and load it as Script (DeclareAction):
Greets
Johann
Hallo,
erstmal das Comress-Schema einmalig als XML-Datei abspeichern (export),
danach kann man das Schema einfach mit ‘XSettingsImport’ in das aktuelle Projekt einladen.
grüße
Ich vergesse immer dass EPLAN hier alle Türen aufgemacht hat :sad:
Danke
Gruß
Johann
Hi again,
I’ll try the XSettingsImport!
Thanks for sharing your knowledge… :smile:
Das Menu hat sich ab Eplan 2.1.6 geändert ?!?
Automatisiert bearbeiten
steht bei 2.1.6 “Schema”
früher bei 1.9 “Scriptname”
daher kann hier keine Script mehr erzeugen…es fehlt oben “Bearbeiten”
oder mach ich was falsch?
oder wie macht man das ab 2.1.6
Beschriftungs Vorlage für Script erzeugen…
Habe gerade unter der 2.2.5 geschaut und ja die Funktion wurde entfernt.
Schreibe doch bitte dem EPLAN Support dass du dir das Feature zurückwünscht.
Habe gerade gesehen dass ein Script unter Plattform/BENUTZERKENNUNG/Skripte erstellt wird… das kann verwendet werden :)
Erstmals bedanke ich mich an Herr Weiher für eine tolle und wertvolle Seite. Dank dieser Seite habe ich einen tollen Einstieg mit dem Scripten in EPLAN bekommen.
Ich selber bin auch ein leidenschaftlicher Programmierer und frage mich deshalb woher du die ganze Informationen für die Action-Befehle her hasst.
Ich frage mich immer: Du hast mir geholfen! Aber wer hat dir geholfen?
Danke!
Einige Actions sind in der Hilfe von EPLAN beschrieben. Leider nicht alle, hier ist dann die API Dokumentation sehr hilfreich.
Ich selbst habe eine Scripting-Schulung bei EPLAN gemacht, welche sehr zu empfehlen ist.
Hallo Johann,
gibt es eine Möglichkeit das Schema von einem Beschriftungsmodul extern zu speichern und trotzdem im Script zu benutzen.
Hintergrund, nutze bereits das “Bschriftungsscript”.
Wird nun das verwendete Schema von einem Benutzer verändert, funktioniert die Beschriftungsausgabe nicht wie gewohnt sondern mit den veränderten Einstellungen.
Idee war daher das Schema woanders zu speichern damit der Benutzer dieses nicht editieren kann.
Gruß
Torsten
Hallo Econo
Vielleicht kannst Du einen Verweis auf die Datei im Script Ordner machen. Und das Script mit einem Schreibschutz versehen.
Gruss
Pepe
Einfach das Beschriftungsschema exportieren und später mit XSettingsImport vor der Label-Action importieren. Damit ist sichergestellt dass immer das gleiche Schema verwendet wird.
Danke für den Tipp! Hat mir auch weiter geholfen.
Etwas allgemeineres: Ist es möglich oder bei Eplan erlaubt, so ein Script als Klasse Auszulagern und dann im Script danach zu referenzieren? (So wie im Visual Studio oft gemacht wird)
Es ist nur möglich Actions mit Parametern aufzurufen und zusätzlich auch möglich einen Rückgabewert (String) zu erhalten.
Das sharen von Methoden/Klassen/Objekten ist mit Scripting nicht möglich.
Wie kann ich meine .cs auf Syntax überprüfen, ich schreibe nur im Editor(Windows)?
Hallo Johann
Ist es nicht so das Eplan ein im Seitennavi markiertes Projekt als das zu auswertende Projekt annimmt? Warum muss ich da die ganzen Pfade und Namen etc. einlesen?
Es gibt hier immer wieder Probleme mit dem SelectionSet und dann wird das falsche Projekt ausgewertet…
Hallo,
ich arbeite mit der Eplan Version
EPlan Electric P8 – Professional / Version 2.3 HF1 – Buildnummer 7451
mein Problem ist, das sich das Script nicht im Texteditor öffnen lässt. Bei mir fehlt der obere Bearbeitungsbutton.
Gibt es bei der Version eine andere Lösung um an die Scripte zu kommen?
Gruß
Tobias
Das Verhalten wurde leider geändert.
Das Script wird nun unter EPLAN_DATA/Skripte gespeichert.
Hallo,
gibt es die Möglichkeit die Beschriftung mit Scripting nicht auf das gesamte Projekt anzuwenden?
Wenn man eine Beschriftung über Dienstprogramme->Auswertung->Beschriftung durchführt kann man ja auch die markierten verwenden.
Gruß
Marcel
Siehe hier. Parameter USESELECTION
Hi ist zwar schon bisschen her das Thema, aber ich hab ein Problem mit meinem label Script.
Grundsätzlich funktioniert alles, allerdings nur ohne Vorlage. Sobald ich mein Fertigungsdatenexport-Schema im Script lade ohne eine Vorlage funktioniert alles normal und ich krieg mein Excel mit allen Daten in mein gewünschten Ordner. Aber sobald ich unsere Excel Vorlage hernehme, exportiert mir das Script zwar die Excel, schreibt aber keine Daten rein und ich hab quasi nur unsere leere Vorlage im Ausgabeordner.
Woran liegt das? Hab schon mal ein leere Excel als Vorlage ausprobiert, *xls und *xlsx ausprobiert – funktioniert einfach mit Vorlage nicht.
Sobald ich das Feld mit der Vorlage bei der Schemaeinstellung leer lasse, exportiert mir das Script einwandfrei alle Daten in den Ausgabeordner.
Script:
using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;
namespace EPLAN_Scripting_Project
{
public class fdtexporttesting1
{
[Start]
public void Function()
{
CommandLineInterpreter cli = new CommandLineInterpreter();
string sZielDateiPfad = PathMap.SubstitutePath(“E:/Dokumente/”);
string sZielDatei = sZielDateiPfad + @”Artikelsummenstückliste_$(PROJECTNAME)_$(LOCALDATE).xls”;
string ProjectName = PathMap.SubstitutePath(“$(PROJPROP_10009)”);
//Progressbar ein
Eplan.EplApi.Base.Progress oProgress = new Eplan.EplApi.Base.Progress(“SimpleProgress”);
oProgress.ShowImmediately();
oProgress.BeginPart(1,”label”);
//Actionsdaten lesen
ActionCallingContext labellingContext = new ActionCallingContext();
labellingContext.AddParameter(“PROJECTNAME”, ProjectName);
labellingContext.AddParameter(“CONFIGSCHEME”, “test”);
labellingContext.AddParameter(“SORTSCHEME”, “”);
labellingContext.AddParameter(“FILTERSCHEME”, “”);
labellingContext.AddParameter(“LANGUAGE”, “de_DE”);
labellingContext.AddParameter(“DESTINATIONFILE”, sZielDatei);
labellingContext.AddParameter(“LogMsgActionDone”, “true”);
labellingContext.AddParameter(“RECREPEAT”, “1”);
labellingContext.AddParameter(“TASKREPEAT”, “1”);
labellingContext.AddParameter(“SHOWOUTPUT”, “0”);
labellingContext.AddParameter(“USESELECTION”, “1”);
//Actionsdaten ausführen
new CommandLineInterpreter().Execute(“label”, labellingContext);
//Progressbar aus
oProgress.EndPart(true);
//Ausgabe Meldung
MessageBox.Show(
“Script ausgeführt”,
“Hinweis”,
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
return;
}
}
}
Funktioniert das Script in EPLAN wenn Du eine Vorlage einstellst?
Ohne Vorlage funktioniert das Script (alle Daten landen in der Excel).
Sobald ich die Vorlage einstelle, gibt er mir die Excel ohne Daten aus. Aber mit dem Design von der Vorlage
Nicht über das Script sondern über EPLAN > Export > Fertigungsdaten mal probieren (Vorlage einstellen).
Achso ja sorry falsch verstanden ^^
ja das Schema funktioniert mit Vorlage über den normalen Fertigungsdaten Export. Dann kommen alle Daten wie gewohnt in meine Vorlage rein.
Ah OK. Bei Dir im Script fehlt der Parameter /TYPE:PROJECT. Siehe hier das Beispiel von meinem Buch:
https://eep8a.de/v3/scripts/12_Dateien_schreiben/#01-beschriftung
Hm, danke schonmal für den Hinweis – der Parameter ist jetzt mit drin.
Nur leider schreibt er mir die Summenstücklistendaten immer noch nicht die Vorlage rein.
Ich bin ja eigentlich jetzt im Scripting kein Neuling, aber das check ich halt nicht warum er die Daten da nicht in die Vorlage schreibt.
Muss ich schon wie normal auch die “#H#”und “###” für die Spaltenformatierung da auch drin lassen oder, wenn ichs über das Script mach?
Beziehungsweise – ich hab’s auch schonmal ohne versucht. Da schreibt er dann auch nichts rein.
Die Vorlage sieht so aus, dass einfach im Header einfach Projektersteller, Ausgabedatum und Projektname stehen und zwei Zeilen drunter die Spalten als Tabelle mit Überschrift welche Daten halt was sind :D
Schick mir mal folgendes per Mail durch:
– Script
– Schema
– Vorlage
Dann schau ich mir es mal an.
Hab ich dir geschickt. Danke dir für den Support! :-)
Hallo zusammen, da ich dasselbe Problem wie Patrick Klinger habe, würde mich interessieren, ob es hierzu eine Lösung gibt und wie diese aussieht.
Vielen Dank
Von Patrick wurde der falsche Zielpfad angegeben.
Hallo Johann.
Ich absoluter Scripting-Anfänger.
Ich möchte den Speichernamen der Beschriftung, mit der der Eingabe aus einer Inputbox erweitern.
Kann ich den Wert, statt in der MessageBox anzuzeigen, direkt übergeben?
using System.Windows.Forms;
using System.Drawing;
public class Script
{
[Start]
public void Run()
{
string value = “P1234560001”;
if (InputBox.Show(“proAlpha”, “HER_Kostenstelle”, ref value) == DialogResult.OK)
{
MessageBox.Show(value, “MessageBoxproAlpha”, MessageBoxButtons.OK, MessageBoxIcon.Information);
// ActionCallingContext labellingContext = new ActionCallingContext();
// labellingContext.AddParameter(“CONFIGSCHEME”, “HER_Aufmass_proALPHA”);
// labellingContext.AddParameter(“DESTINATIONFILE”, @”D:\Ausgabe\P1234560001_$(PROJECTNAME)_Aufmass_proALPHA.txt”);
// labellingContext.AddParameter(“FILTERSCHEME”, “”);
// labellingContext.AddParameter(“LANGUAGE”, “de_DE”);
// labellingContext.AddParameter(“LogMsgActionDone”, “true”);
// labellingContext.AddParameter(“SHOWOUTPUT”, “1”);
// labellingContext.AddParameter(“PROJECTNAME”, ProjectName);
// labellingContext.AddParameter(“RECREPEAT”, “1”);
// labellingContext.AddParameter(“SORTSCHEME”, “”);
// labellingContext.AddParameter(“TASKREPEAT”, “1”);
// new CommandLineInterpreter().Execute(“label”, labellingContext);
}
return;
}
}
public class InputBox
{
///
/// Displays a dialog with a prompt and textbox where the user can enter information
///
/// Dialog proAlpha
/// Dialog prompt
/// Sets the initial value and returns the result
/// Dialog result
public static DialogResult Show(string proAlpha, string HER_Kostenstelle, ref string value)
{
Form form = new Form();
Label label = new Label();
TextBox textBox = new TextBox();
Button buttonOk = new Button();
Button buttonCancel = new Button();
form.Text = proAlpha;
label.Text = HER_Kostenstelle;
textBox.Text = value;
buttonOk.Text = “OK”;
buttonCancel.Text = “Abbrechen”;
buttonOk.DialogResult = DialogResult.OK;
buttonCancel.DialogResult = DialogResult.Cancel;
label.SetBounds(9, 18, 372, 13);
textBox.SetBounds(12, 36, 372, 20);
buttonOk.SetBounds(228, 72, 75, 23);
buttonCancel.SetBounds(309, 72, 75, 23);
label.AutoSize = true;
textBox.Anchor = textBox.Anchor | AnchorStyles.Right;
buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
form.ClientSize = new Size(396, 107);
form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });
form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height);
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.StartPosition = FormStartPosition.CenterScreen;
form.MinimizeBox = false;
form.MaximizeBox = false;
form.AcceptButton = buttonOk;
form.CancelButton = buttonCancel;
DialogResult dialogResult = form.ShowDialog();
value = textBox.Text;
return dialogResult;
}
}
Klar. Du kannst einfach die Variable ‘value’ nutzen. Dort sollte deine Eingabe drin stehen.
Wie kann ich dann die Beschriftung ausführen?
Sobald ich die Messagebox herauskommentiere und Label aktiviere, öffnet sich die Inputbox nicht mehr.
Entschuldige, ich stehe noch ganz am Anfang ;-)
Ich möchte sehr gerne die ersten kleinen Erfolge feiern, um die Zeit für einen Scripting-Kurs beim Vorgesetzten zu rechtfertigen.
using System.Windows.Forms;
using System.Drawing;
public class Script
{
[Start]
public void Run()
{
string value = “P1234560001”;
if (InputBox.Show(“proAlpha”, “HER_Kostenstelle”, ref value) == DialogResult.OK)
{
// MessageBox.Show(value, “MessageBoxproAlpha”, MessageBoxButtons.OK, MessageBoxIcon.Information);
string Kostenstelle = ref value
ActionCallingContext labellingContext = new ActionCallingContext();
labellingContext.AddParameter(“CONFIGSCHEME”, “HER_Aufmass_proALPHA”);
labellingContext.AddParameter(“DESTINATIONFILE”, @”D:\Ausgabe\” + Kostenstelle + “_$(PROJECTNAME)_Aufmass_proALPHA.txt”);
labellingContext.AddParameter(“FILTERSCHEME”, “”);
labellingContext.AddParameter(“LANGUAGE”, “de_DE”);
labellingContext.AddParameter(“LogMsgActionDone”, “true”);
labellingContext.AddParameter(“SHOWOUTPUT”, “1”);
labellingContext.AddParameter(“PROJECTNAME”, ProjectName);
labellingContext.AddParameter(“RECREPEAT”, “1”);
labellingContext.AddParameter(“SORTSCHEME”, “”);
labellingContext.AddParameter(“TASKREPEAT”, “1”);
new CommandLineInterpreter().Execute(“label”, labellingContext);
}
return;
}
}
Bei dem Script dass Du mir hier geschickt hast fehlt die Klasse InputBox. Bei deinem ersten Script war Sie noch dabei.
Ich vermute Du hast auch eine Systemmeldung bekommen (rechts unten), welche Dir den gleichen Fehler anzeigt.
Hallo Johann,
ich habe es hinbekommen.
Ich muss jetzt dem Script eine Action zuweisen, damit ich es mit einem Button starten kann.
using System.Windows.Forms;
using System.Drawing;
public class Script
{
[Start]
public void Run()
{
string value = “P1234560001”;
if (InputBox.Show(“proAlpha”, “HER_Kostenstelle”, ref value) == DialogResult.OK)
{
// MessageBox.Show(value, “MessageBoxproAlpha”, MessageBoxButtons.OK, MessageBoxIcon.Information);
string Kostenstelle = value;
ActionCallingContext labellingContext = new ActionCallingContext();
labellingContext.AddParameter(“CONFIGSCHEME”, “HER_Aufmass_proALPHA”);
labellingContext.AddParameter(“DESTINATIONFILE”, @”D:\Ausgabe\” + Kostenstelle + “_$(PROJECTNAME)_Aufmass_proALPHA.txt”);
labellingContext.AddParameter(“FILTERSCHEME”, “”);
labellingContext.AddParameter(“LANGUAGE”, “de_DE”);
labellingContext.AddParameter(“LogMsgActionDone”, “true”);
labellingContext.AddParameter(“SHOWOUTPUT”, “1”);
//labellingContext.AddParameter(“PROJECTNAME”, ProjectName);
labellingContext.AddParameter(“RECREPEAT”, “1”);
labellingContext.AddParameter(“SORTSCHEME”, “”);
labellingContext.AddParameter(“TASKREPEAT”, “1”);
labellingContext.AddParameter(“USESELECTION”, “1”);
new CommandLineInterpreter().Execute(“label”, labellingContext);
}
return;
}
}
public class InputBox
{
///
/// Displays a dialog with a prompt and textbox where the user can enter information
///
/// Dialog proAlpha
/// Dialog prompt
/// Sets the initial value and returns the result
/// Dialog result
public static DialogResult Show(string proAlpha, string HER_Kostenstelle, ref string value)
{
Form form = new Form();
Label label = new Label();
TextBox textBox = new TextBox();
Button buttonOk = new Button();
Button buttonCancel = new Button();
form.Text = proAlpha;
label.Text = HER_Kostenstelle;
textBox.Text = value;
buttonOk.Text = “OK”;
buttonCancel.Text = “Abbrechen”;
buttonOk.DialogResult = DialogResult.OK;
buttonCancel.DialogResult = DialogResult.Cancel;
label.SetBounds(9, 18, 372, 13);
textBox.SetBounds(12, 36, 372, 20);
buttonOk.SetBounds(228, 72, 75, 23);
buttonCancel.SetBounds(309, 72, 75, 23);
label.AutoSize = true;
textBox.Anchor = textBox.Anchor | AnchorStyles.Right;
buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
form.ClientSize = new Size(396, 107);
form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });
form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height);
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.StartPosition = FormStartPosition.CenterScreen;
form.MinimizeBox = false;
form.MaximizeBox = false;
form.AcceptButton = buttonOk;
form.CancelButton = buttonCancel;
DialogResult dialogResult = form.ShowDialog();
value = textBox.Text;
return dialogResult;
}
}
Super. Genau. Dafür musst du eine Action registrieren.