| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für EPLAN |
Autor
|
Thema: Script in Abhängigkeit von Seitenfilter (1416 / mal gelesen)
|
P8er Mitglied E-Konstrukteur
Beiträge: 286 Registriert: 10.08.2020 Windows 10 Pro 64 Bit E-2236 CPU @ 3.41 GHz NVIDIA RTX A4000 Eplan P8 2.9, ProPanel Eplan 2022, Eplan 2023
|
erstellt am: 26. Aug. 2020 09:56 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin dem Ziel nun schon deutlich näher, zumindest weiß ich schonmal wie ich zu nem ordentlichen Ergebnis komme. Das Ziel ist ja, per Klick auf Button den Ausdruck anzuschubsen. Das ganze drumherum ist hier jetzt nicht relevant. Ich bräuchte nur mal Hilfe von euch bei folgender Problematik: Wir fertigen verschiedene Maschinentypen, sagen wir A, B, C, D Für diese Typen haben wir Seitenfilter, damit auch nur das angezeigt wird, was benötigt wird. In meinem Druckscript möchte ich gerne, dass diese Filter berücksichtigt werden. Also wenn Seitenfilter A aktiv, dann alle A-Dokumente drucken, wenn Seitenfilter B, dann B... Müsste doch mit If... zu machen gehen, ich weiß nur nicht wie die richtige Schreibweise ist und wo die ifs hinkommen und wie ich die if Schleife beende. Hier mal ein Ausschnit des Scripts zur Erklärung: Code: public class Fertigung_Druck { [DeclareAction("Fertigung_Druck")] public void Fertigung() { ActionCallingContext printContext = new ActionCallingContext (); printContext.AddParameter("printername","PDF24"); printContext.AddParameter("number","1"); printContext.AddParameter("printcollate","0"); printContext.AddParameter("printreverse","0"); printContext.AddParameter("printchangedpages","0"); printContext.AddParameter("type","PAGES"); printContext.AddParameter("PAGEFILTERNAME", "A-Klepla-MP1"); new CommandLineInterpreter().Execute("print",printContext); ActionCallingContext printContext2 = new ActionCallingContext (); printContext2.AddParameter("printername","PDF24"); printContext2.AddParameter("number","1"); printContext2.AddParameter("printcollate","0"); printContext2.AddParameter("printreverse","0"); printContext2.AddParameter("printchangedpages","0"); printContext2.AddParameter("type","PAGES"); printContext2.AddParameter("PAGEFILTERNAME", "A-Aufbau-Grafik-MP1"); new CommandLineInterpreter().Execute("print",printContext2); return; } }
Ich hoffe, ich hab's nicht zu kompliziert erklärt... Vielen Dank schonmal!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pepe-perez Mitglied Konstrukteur, Elektroplaner, Cunsultant
Beiträge: 941 Registriert: 11.09.2009 Eplan 5.70 Eplan P8 Prof. Elektrik 2.9.4 Win 10 Pro Microsoft 365
|
erstellt am: 26. Aug. 2020 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für P8er
Hallo P8er Funktionieren die gefliterten Ausgaben im Skript denn schon? Also die If Abfrage sieht so aus: Code: if(Bedingung) { Code; } else { Code; }
Damit hast Du dann zwei Möglichkeit. Die lässt sich auch erweitern auf mehr. Würde dann so aussehen:
Code:
if(Bedingung) { Code; } else if(Bedingung) { Code; } else { Code; }
Aber wenn Du mehrere machen möchtest, macht es mehr Sinn einen Switch/Case zu machen:
Code: switch (intVariable) { case 1: Code; break; case 2: Code; break; case 3: Code; break; default: Code; break; }
Prinzipiell findest Du bei einer Suche eine gute Microsoft Seite für C# die hier auch beispiele mit Code zeigen. Damit kannst Du dann bestimmt mehr anfangen. Ich denke Du solltest die Abfrage immer vor dem Befehl setzten den Du ausführen möchtest. Also z.B. direkt vor dem "ActionCallingContext" (eine Möglichkeit). If (Bedingung) und {ActionCallingContext...} elseif (Bedingung) {ActionCallingContext2...) Die Bedingung müsste eingetlich sein: if (Filter = A) {Führe den Befehl für A aus} elsif (Filter = B) {Führe den Befehl für B aus} else {mache etwas wenn gar nichts passt) Nur so als Beispiel. Gruss Pepe ------------------ Du merkst das Du erwachsen bist, wenn die Monster unter deinem Bett, in deinen Briefkasten umgezogen sind. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
P8er Mitglied E-Konstrukteur
Beiträge: 286 Registriert: 10.08.2020 Windows 10 Pro 64 Bit E-2236 CPU @ 3.41 GHz NVIDIA RTX A4000 Eplan P8 2.9, ProPanel Eplan 2022, Eplan 2023
|
erstellt am: 26. Aug. 2020 10:52 <-- editieren / zitieren --> Unities abgeben:
Danke Pepe, ja, dass mit den gefilterten Ausgaben passt. Wnn ich schreibe: Code: public class Fertigung_Druck { [DeclareAction("Fertigung_Druck")] public void Fertigung(); if("PAGEFILTERNAME", "A") { //Klemmenplan MP1 ausgeben ActionCallingContext printContext0001 = new ActionCallingContext (); printContext0001.AddParameter("printername","PDF24"); printContext0001.AddParameter("number","1"); printContext0001.AddParameter("printcollate","0"); printContext0001.AddParameter("printreverse","0"); printContext0001.AddParameter("printchangedpages","0"); printContext0001.AddParameter("type","PAGES"); printContext0001.AddParameter("PAGEFILTERNAME", "A"); new CommandLineInterpreter().Execute("print",printContext0001); } else("PAGEFILTERNAME", "B") { //Stromlaufpläne BL ActionCallingContext printContext0021 = new ActionCallingContext (); printContext0021.AddParameter("printername","PDF24"); printContext0021.AddParameter("number","1"); printContext0021.AddParameter("printcollate","0"); printContext0021.AddParameter("printreverse","0"); printContext0021.AddParameter("printchangedpages","0"); printContext0021.AddParameter("type","PAGES"); printContext0021.AddParameter("PAGEFILTERNAME", "B"); new CommandLineInterpreter().Execute("print",printContext0021); return; } } }
laufen Fehler auf (siehe Foto) Ohne die If Abfrage klappt alles fehlerfrei, es muss wohl an der Syntax liegen. [Diese Nachricht wurde von P8er am 26. Aug. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pepe-perez Mitglied Konstrukteur, Elektroplaner, Cunsultant
Beiträge: 941 Registriert: 11.09.2009 Eplan 5.70 Eplan P8 Prof. Elektrik 2.9.4 Win 10 Pro Microsoft 365
|
erstellt am: 26. Aug. 2020 11:18 <-- editieren / zitieren --> Unities abgeben: Nur für P8er
Ähm ja, das liegt an dem Syntax resp. an der Abfrage. By the way... hast Du die API zur Verfügung? Also, in deinem Skript setzt Du deine Werte. Aber in der Abfrage möchtest Du ja gerne wissen was der Benutzter eingestellt hat für einen Filter. Diesen Wert musst Du Auslesen und in eine Variable setzten. Dann nutzt Du die Variable um den Vergleich zu machen. Jetzt klarer? Gruss Pepe ------------------ Du merkst das Du erwachsen bist, wenn die Monster unter deinem Bett, in deinen Briefkasten umgezogen sind. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
P8er Mitglied E-Konstrukteur
Beiträge: 286 Registriert: 10.08.2020 Windows 10 Pro 64 Bit E-2236 CPU @ 3.41 GHz NVIDIA RTX A4000 Eplan P8 2.9, ProPanel Eplan 2022, Eplan 2023
|
erstellt am: 26. Aug. 2020 11:27 <-- editieren / zitieren --> Unities abgeben:
|
pepe-perez Mitglied Konstrukteur, Elektroplaner, Cunsultant
Beiträge: 941 Registriert: 11.09.2009 Eplan 5.70 Eplan P8 Prof. Elektrik 2.9.4 Win 10 Pro Microsoft 365
|
erstellt am: 26. Aug. 2020 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für P8er
Oke.... ohne API ist sicherlich komplizierter. Eplan lässt uns ohne die API gerne von aussen per Skript Werte setzten. Das herauslesen von Werten ist eine andere Geschichte. Ich kann Dir mal den Weg dahin erklären, wie ich ihn sehe. (Mögen mich die Skrip-Götter hier korrigieren) Um den Wert der eingestellt ist im Filter herauszufinden musst Du über das Skript einen Export des Filters machen. Danach die Datei öffnen und im XML nach dem Tag Suchen der den Wert enhält. Den Wert in deine Variable Lesen. Dann kann das Programm wie von Dir vorgegeben weiter gehen. Du sieht schon, das ist etwas abitionierter. Gruss Pepe ------------------ Du merkst das Du erwachsen bist, wenn die Monster unter deinem Bett, in deinen Briefkasten umgezogen sind. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
P8er Mitglied E-Konstrukteur
Beiträge: 286 Registriert: 10.08.2020 Windows 10 Pro 64 Bit E-2236 CPU @ 3.41 GHz NVIDIA RTX A4000 Eplan P8 2.9, ProPanel Eplan 2022, Eplan 2023
|
erstellt am: 26. Aug. 2020 12:39 <-- editieren / zitieren --> Unities abgeben:
|
F.S. Moderator
Beiträge: 1815 Registriert: 23.04.2003 EPLAN Electric P8 2023 Prof.
|
erstellt am: 26. Aug. 2020 18:44 <-- editieren / zitieren --> Unities abgeben: Nur für P8er
Hallo Zitat: In meinem Druckscript möchte ich gerne, dass diese Filter berücksichtigt werden.
Dann brauchst du nur diesen Parameter "USEPAGEFILTER=1" bei deiner print Aktion zu setzten. Mehr sollte nicht nötig sein. ------------------ grüße FrankS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
P8er Mitglied E-Konstrukteur
Beiträge: 286 Registriert: 10.08.2020 Windows 10 Pro 64 Bit E-2236 CPU @ 3.41 GHz NVIDIA RTX A4000 Eplan P8 2.9, ProPanel Eplan 2022, Eplan 2023
|
erstellt am: 27. Aug. 2020 10:31 <-- editieren / zitieren --> Unities abgeben:
Hallo, Mit "USEPAGEFILTER=1" geht das wahrscheinlich nicht, weil damit ja nicht zu erkennen ist, welcher Filter gesetzt wurde. Ich möchte ja abhängig vom gesetzten Filter zu dem Punkt der If-Schleife springen, der für den jeweiligen Filter relevant ist. Wie würde sowas mit API gelöst werden? Ich habe bei Suplanus etwas gefunden, dass in etwa so aussieht: Code: // Remove filter if exists SchemeSetting schemeSetting = new SchemeSetting(); schemeSetting.Init(SETTINGS_PATH); if (schemeSetting.CheckIfSchemeExists(SCHEME_NAME))
Das stammt aus einem Script, das Einstellungen setzen soll aber es liest sich so als ob ich damit schauen könnte welcher Filter gesetzt wurde. Wie könnte ich das in meinen Code einbinden?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
F.S. Moderator
Beiträge: 1815 Registriert: 23.04.2003 EPLAN Electric P8 2023 Prof.
|
erstellt am: 27. Aug. 2020 11:12 <-- editieren / zitieren --> Unities abgeben: Nur für P8er
|
F.S. Moderator
Beiträge: 1815 Registriert: 23.04.2003 EPLAN Electric P8 2023 Prof.
|
erstellt am: 27. Aug. 2020 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für P8er
|
P8er Mitglied E-Konstrukteur
Beiträge: 286 Registriert: 10.08.2020 Windows 10 Pro 64 Bit E-2236 CPU @ 3.41 GHz NVIDIA RTX A4000 Eplan P8 2.9, ProPanel Eplan 2022, Eplan 2023
|
erstellt am: 27. Aug. 2020 11:40 <-- editieren / zitieren --> Unities abgeben:
Das wäre zu einfach... Ich versuche es nochmal deutlicher zu erklären: Seitenfilter "Maschinentyp A"
Stromlaufpläne werden beidseitig bedruckt, Eplan Druckereinstellung auf schwarz/weiß Dafür habe ich einen Drucker erstellt, dessen Druckprofil darauf zugeschnitten ist ... "Canon_SLP" Damit der Eplan jetzt nicht alle Blätter des Filters "Maschine A" als Stromlaufplan druckt, muss ich diesem Stromlaufplan einen weiteren Filter verpassen, "A_SLP" Diesen "A_SLP" setze ich via Script. Klemmenpläne werden einseitig gedruckt, Eplan Druckeinstellung auf "nicht schwarz/weiß", weil die Grafiken sonst nur schwarze Vierecke sind. Dafür habe ich einen weiteren Drucker erstellt, dessen Druckprofil ist auf "schwarz/weiß" gestellt..."Canon_Klepla" Damit der Eplan jetzt nicht alle Blätter des Filters "Maschine A" als Klemmenplan druckt, muss ich diesem Stromlaufplan einen weiteren Filter verpassen, "A_Klepla" Diesen "A_Klepla" setze ich via Script. Aufbaupläne werden in A3 einseitig gedruckt, Eplan Druckeinstellungen wieder auf schwarz/weiß Dafür habe ich einen weiteren Drucker erstellt, dessen Druckprofil ist A3 Farbe gestellt..."Canon_Aufbau" Damit der Eplan jetzt nicht alle Blätter des Filters "Maschine A" als Aufbauplan druckt, muss ich diesem Stromlaufplan einen weiteren Filter verpassen, "A_Aufbau" Diesen "A_Aufbau" setze ich via Script. Genauso läuft es mit den anderen Maschinentypen. Klar, sind ne Menge Filter aber das Resultat sieht gut aus. Ich kann quasi keinen Filter bauen, der, wenn ich ihn mit USEPAGEFILTER=1 berücksichtige, mir die Seiten so ausgibt wie ich es gerne hätte. Zur Zeit ist es nur eben so, dass ich mit diesem System für jeden Maschinentyp einen Button brauche und ich hätte es gerne so, dass wenn der Seitenfilter des Projektes auf "Maschine A" steht, der Ablauf für Maschine A stattfindet. Steht der Filter auf "Maschine B" soll es bei B weitergehen. Ja und das hätte ich ganz gerne in einer If-Schleife aber ich weiß nicht woher ich den Wert des eingestellten Filters erhalte. Ich hoffe ich konnte es bisschen aufdröseln. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
F.S. Moderator
Beiträge: 1815 Registriert: 23.04.2003 EPLAN Electric P8 2023 Prof.
|
erstellt am: 27. Aug. 2020 13:43 <-- editieren / zitieren --> Unities abgeben: Nur für P8er
Gut, durch deine ausführlichen Erläuterungen sind mir nun die Zusammenhänge klarer. Ich habe mal was rumprobiert und kann mit folgendem Script den aktuell eingestellten Filter auslesen.
Code:
// GetFilter_Seitennavigator.cs // // Copyright by Frank Schöneck, 2020 // // letzte Änderung: // V1.0.0, 27.08.2020, Frank Schöneck, Projektbeginn // // für Eplan Electric P8, ab V2.9public class GetFilter_Seitennavigator { [Start()] public void MyFunction() { //Update Filter im Seitennavigator auslösen EventParameterString eventParameterString = new EventParameterString(); eventParameterString.String = "RefreshPageFilter"; new EventManager().Send("RefreshPageFilter", eventParameterString); //Filtername auslesen Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings(); string sSchemeName = oSettings.GetStringSetting("USER.PageBrowserGui.PageFilterScheme.LastUsed", 0); //Filtername anzeigen new Decider().Decide(EnumDecisionType.eOkDecision, "Es ist Filter '" + sSchemeName + "' eingestellt.", "GetFilter_Seitennavigator", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK, "", false, EnumDecisionIcon.eINFORMATION); } }
Du kannst so nachfolgend mit einer switch case Routine einfach auf den Inhalt in der Variablen sSchemeName reagieren. Ich gehe aber auch noch davon aus das du in deinem printContext neben dem PAGEFILTERNAME auch den Parameter USEPAGEFILTER = 1 angeben mußt. ------------------ grüße FrankS [Diese Nachricht wurde von F.S. am 27. Aug. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
P8er Mitglied E-Konstrukteur
Beiträge: 286 Registriert: 10.08.2020 Windows 10 Pro 64 Bit E-2236 CPU @ 3.41 GHz NVIDIA RTX A4000 Eplan P8 2.9, ProPanel Eplan 2022, Eplan 2023
|
erstellt am: 27. Aug. 2020 14:03 <-- editieren / zitieren --> Unities abgeben:
|
pepe-perez Mitglied Konstrukteur, Elektroplaner, Cunsultant
Beiträge: 941 Registriert: 11.09.2009 Eplan 5.70 Eplan P8 Prof. Elektrik 2.9.4 Win 10 Pro Microsoft 365
|
erstellt am: 27. Aug. 2020 16:54 <-- editieren / zitieren --> Unities abgeben: Nur für P8er
Hallo Frank Interessant! Kannst Du vielleicht noch erläutern wo Du diesen "Pfad" USER.PageBrowserGui.PageFilterScheme.LastUsed her genommen hast? Gibt es da irgendwo eine übersicht dafür? Vielleicht sitzte ich einfach auch nur auf dem Schlauch.... Gruss Pepe --> Sorry, hab es gefunden. Ist somit erledigt.
------------------ Du merkst das Du erwachsen bist, wenn die Monster unter deinem Bett, in deinen Briefkasten umgezogen sind. [Diese Nachricht wurde von pepe-perez am 28. Aug. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|