| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für EPLAN | | | | Handlungsempfehlung Automatisierung: „Denke groß, starte klein“, eine Pressemitteilung
|
Autor
|
Thema: Skript - Automatisierte Bearbeitung (3878 mal gelesen)
|
Radler80 Mitglied Elektrokonstrukteur
Beiträge: 15 Registriert: 15.04.2014 P8 Version 2.4
|
erstellt am: 26. Jan. 2015 19:23 <-- editieren / zitieren --> Unities abgeben:
Hallo, folgendes Problem. Wir arbeiten inzwischen mit P8 2.4. Ich möchte gerne die Funktion "Automatisiert bearbeiten" nutzen. Folgendes Problem. Ich habe verschiedene Beschriftungen die ich nacheinander ausgeben möchte. Das kann man dort ja schön zusammen klicken. Ist es Möglich hier eine If Anweisung einzubauen oder ist es sogar Möglich ein Zusatzfeld abzufragen? Steht dort Ja macht er die Auswertung, steht dort Nein macht er die Auswertung nicht. Im Internet sind alle Beispiele, nachdem das Schema exportiert wurde in der Datei .cs. Wenn ich das Schema exportiere bekomme ich nur ein xml Format. Baue ich hier allerdings eine if Anweisung ein und importiere dieses wieder über Automatisiertes bearbeiten kommt die Fehlermeldung dass die Datei kein Schemata ist welches importiert werden kann. Über Dienstprogramme-->Skript laden lässt sich kein xml Format laden. Habt ihr hier eine Lösung ? Bzw. kann ich das Schema in ein cs. Format bringen. Dort eine if Anweisung einzubauen ist ja kein Problem. Danke für eure Hilfe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
chicken Mitglied Technischer Zeichner
Beiträge: 137 Registriert: 21.10.2004 Version 2.5 HF2, Buildnr 9499
|
erstellt am: 28. Jan. 2015 08:03 <-- editieren / zitieren --> Unities abgeben: Nur für Radler80
Hallo, ich befürchte das bietet das automatisiert bearbeiten nicht. Die Export-Funktion exportiert das Schema der automatisierten Bearbeitung, aber nicht das ganze als Skript. Somit wirst Du wohl ein Skript manuell erstellen müssen das die möglichen Beschriftungen nacheinander jeweils mit Abfrage anbietet und entsprechend nach Antwort ausführt. Ein Beispiel (getestet mit Eplan Version 2.3.5), zusammengeklaubt aus diversen Foren-Posts: Datei "Test.cs" Inhalt Code:
public class Beschriftungen { [Start] [DeclareAction("MeineBeschriftungen")] public void MeineBeschriftungen() { // Projektdatei, Projektpfad, Projektname string sSelectedProjectData = string.Empty; // kompletter Pfad + Projektdateinamen + Erweiterung string sSelectedProjectName = string.Empty; // Projektname string sSelectedProjectPath = string.Empty; // Projektpfad
// Projektdatei komplett CommandLineInterpreter oCLI = new CommandLineInterpreter(); Eplan.EplApi.ApplicationFramework.ActionCallingContext ctx = new Eplan.EplApi.ApplicationFramework.ActionCallingContext(); ctx.AddParameter("TYPE", "PROJECT"); bool bRet = oCLI.Execute("selectionset", ctx); // Action: Projektpfad if (bRet == true) { ctx.GetParameter("PROJECT", ref sSelectedProjectData); } // Projektname sSelectedProjectName = System.IO.Path.GetFileNameWithoutExtension(sSelectedProjectData); // Projektordnerpfad sSelectedProjectPath = System.IO.Path.GetDirectoryName(sSelectedProjectData); // Abfrage ob Beschriftung 1 ausgeführt werden soll DialogResult janein; janein = MessageBox.Show("Beschriftung 1 ausführen ?", "Meine Beschriftung 1", MessageBoxButtons.YesNo,MessageBoxIcon.Question); if(janein == DialogResult.Yes) { Beschriftung1(sSelectedProjectPath,sSelectedProjectName); } // Abfrage ob Beschriftung 2 ausgeführt werden soll janein = MessageBox.Show("Beschriftung 2 ausführen ?", "Meine Beschriftung 2", MessageBoxButtons.YesNo,MessageBoxIcon.Question); if(janein == DialogResult.Yes) { Beschriftung2(sSelectedProjectPath,sSelectedProjectName); } } // Beschriftung 1 public bool Beschriftung1(string prjpath, string prjname) { ActionCallingContext LabelContext = new ActionCallingContext(); LabelContext.AddParameter("CONFIGSCHEME","NameDesBeschriftungsSchemas1"); LabelContext.AddParameter("LANGUAGE", "de_DE"); LabelContext.AddParameter("DESTINATIONFILE", "" + prjpath + "/" + prjname + "beschriftung1.txt"); bool ReCo = new CommandLineInterpreter().Execute("Label",LabelContext); return ReCo; } // Beschriftung 2 public bool Beschriftung2(string prjpath, string prjname) { ActionCallingContext LabelContext = new ActionCallingContext(); LabelContext.AddParameter("CONFIGSCHEME","NameDesBeschriftungsSchemas2"); LabelContext.AddParameter("LANGUAGE", "de_DE"); LabelContext.AddParameter("DESTINATIONFILE", "" + prjpath + "/" + prjname + "beschriftung1.txt"); bool ReCo = new CommandLineInterpreter().Execute("Label",LabelContext); return ReCo; } }
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Radler80 Mitglied Elektrokonstrukteur
Beiträge: 15 Registriert: 15.04.2014 P8 Version 2.4
|
erstellt am: 28. Jan. 2015 20:43 <-- editieren / zitieren --> Unities abgeben:
Ok vielen Dank. Echt schade. Habe mich heute mal an die Arbeit gemacht dass selber zu schreiben. Neben der Beschriftung soll eigentlich noch einiges mehr von dem Skript durchgeführt werden. Das meiste klappt inzwischen. Was mir noch fehlt: Artikel im Projekt aktualisieren Artikel im Projekt vervollständigen Wo finde ich für diese beiden Dinge den passenden Befehl? Kann mir hier jemand mir weiter helfen? Vielen Dank :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielPa Mitglied Consultant
Beiträge: 378 Registriert: 21.05.2009 WSCAD Suit Ultimate 2015 Eplan P8 2.2.5 und 2.4
|
erstellt am: 29. Jan. 2015 09:22 <-- editieren / zitieren --> Unities abgeben: Nur für Radler80
Hi, beim erstellen eines Schemas für das automatisierte Bearbeiten wird auch ein C# Script erstellt. Dieses wird unter dem Schemanamen in dem Ordner "Scripte" (siehe Einstellungen>>Benutzer>>Verwaltung>>Verzeichnisse>>Scripte) abgelegt. Du kannst dir also über "Automatisiert bearbeiten" eine Vorlage erstellen und diese dann anpassen. Ich hab allerdings noch nicht versucht was passiert wenn du ein angepasstes Script über "Automatisiert bearbeiten" nochmal veränderst. Aktikel>> aktuelles Projekt aktualisieren Code: ActionCallingContext context1 = new ActionCallingContext (); context1.AddParameter("type","SYSTEMPARTSTOPROJECT"); context1.AddParameter("storemode","1"); context1.AddParameter("ProjectName",strProjectName); new CommandLineInterpreter().Execute("synchronize",context1);
Aktikel>> aktuelles Projekt vervollständigen Code: //identisch mit oben nur mit storemode 0 ActionCallingContext context1 = new ActionCallingContext (); context1.AddParameter("type","SYSTEMPARTSTOPROJECT"); context1.AddParameter("storemode","0"); context1.AddParameter("ProjectName",strProjectName); new CommandLineInterpreter().Execute("synchronize",context1);
MfG Daniel
------------------ “Hacker (noun): An organism that converts caffeine or alcohol into code.” ~ Standard Definition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Radler80 Mitglied Elektrokonstrukteur
Beiträge: 15 Registriert: 15.04.2014 P8 Version 2.4
|
erstellt am: 29. Jan. 2015 19:54 <-- editieren / zitieren --> Unities abgeben:
Ja super vielen Dank. Genau das hab ich gesucht. :-) Kann ich hier auch eine "Abfragebox" programmieren, in dem ich eine Gerätenummer eintrage und diese dann in ein Zusatzfeld einträgt? Oder ist hier API nötig? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielPa Mitglied Consultant
Beiträge: 378 Registriert: 21.05.2009 WSCAD Suit Ultimate 2015 Eplan P8 2.2.5 und 2.4
|
erstellt am: 30. Jan. 2015 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für Radler80
Ja das geht per Script. Ich vermute mal du willst eine Projekteigenschaft setzen? Für die Abfragebox kannst du dir etwas aus dem Internetz kopieren (z.B. hier http://www.csharp-examples.net/inputbox/). Das Ganze könnte dann so aussehen:
Code: using System.Windows.Forms; using System.Drawing;public class Script { [Start] public void Run() { string value = "Document 1"; if (Script.InputBox("New document", "New document name:", ref value) == DialogResult.OK) { ActionCallingContext contextXEsSetProjectPropertyAction = new ActionCallingContext(); contextXEsSetProjectPropertyAction.AddParameter("PropertyId","10901"); contextXEsSetProjectPropertyAction.AddParameter("PropertyIndex","1"); contextXEsSetProjectPropertyAction.AddParameter("PropertyValue", value); new CommandLineInterpreter().Execute("XEsSetProjectPropertyAction", contextXEsSetProjectPropertyAction); } } public static DialogResult InputBox(string title, string promptText, 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 = title; label.Text = promptText; textBox.Text = value; buttonOk.Text = "OK"; buttonCancel.Text = "Cancel"; buttonOk.DialogResult = DialogResult.OK; buttonCancel.DialogResult = DialogResult.Cancel; label.SetBounds(9, 20, 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; } }
gesetzt wird hier Zusatzfeld 1 von Projekt. Willst du andere Eigenschaften geht das auch.... Siehe Eplan-Hilfe: XEsSetPagePropertyAction XEsSetProjectPropertyAction XEsSetPropertyAction Identifizierende Eigenschaften wie z.B. BMKs können mit Scripting nicht ohne weiteres geändert werden. MfG Daniel ------------------ “Hacker (noun): An organism that converts caffeine or alcohol into code.” ~ Standard Definition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Radler80 Mitglied Elektrokonstrukteur
Beiträge: 15 Registriert: 15.04.2014 P8 Version 2.4
|
erstellt am: 02. Feb. 2015 19:39 <-- editieren / zitieren --> Unities abgeben:
Super vielen Dank, habe jetzt alles zusammengefügt und funktioniert alles. Eine Sache wäre noch schön, aber da fehlt mir dann die Programmierkenntnis. Schön wäre es noch eine bestimmte Ebene fest auf drucken bzw. nicht drucken zu setzen. Das dürfte jetzt eigentlich ohne API funktionieren. Es gibt ja ein schönes Tool mit einer DLL. (http://www.gischel.net/Magic/topic.php?id=604&). Zum einen weiß ich nicht wie ich das Tool in ein vorhandenes Skript einfüge, zum anderen möchte ich keine Auswahl haben, sondern im Skript fest eine Ebene auf drucken bzw. nicht drucken zu setzen. Hat hier noch jemand einen Tipp ? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielPa Mitglied Consultant
Beiträge: 378 Registriert: 21.05.2009 WSCAD Suit Ultimate 2015 Eplan P8 2.2.5 und 2.4
|
erstellt am: 02. Feb. 2015 21:08 <-- editieren / zitieren --> Unities abgeben: Nur für Radler80
Hi, wenn du eine 32 Bit Installation hast, kannst du das Addin wie beschrieben laden. Dann sollte sich die Action togglelayer über einen CommandLineInterpreter ausführen lassen. Code: new CommandLineInterpreter().Execute("ToggleLayers /LAYERSTATE:\"EPLAN400|2,5|n|y|255\"")
Die 64 Bit Variante scheint derzeit nur mit API Lizenz zu funktionieren. MfG Daniel ------------------ “Hacker (noun): An organism that converts caffeine or alcohol into code.” ~ Standard Definition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|