| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für EPLAN |
| |
 | Erste Einblicke in die neue Eplan Plattform 2026, eine Pressemitteilung
|
Autor
|
Thema: Skript zum Lesen von LOCATION_DESCRIPTION_SUPPLEMENTARYFIELD (913 / mal gelesen)
|
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 03. Apr. 2023 13:59 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich möchte ein Skript verwenden, um einige Werte zu lesen und zu bearbeiten, die ich in der Strukturkennzeichen-Verwaltung habe, insbesondere LOCATION_DESCRIPTION_SUPPLEMENTARYFIELD[7], kann ich das erreichen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apps4eplan Mitglied freier Entwickler
 
 Beiträge: 130 Registriert: 26.11.2020 EEC Professional in allen Versionen
|
erstellt am: 04. Apr. 2023 09:59 <-- editieren / zitieren --> Unities abgeben:          Nur für I.Tou
An dem Thema darf ich mich bitte anhängen; über die API ist es ein 10-Zeiler, aber über Skripting hätte ich bei der Strukturkennzeichenverwaltung keinen Ansatz! ------------------ sind doch alles nur Nuller und Einser :-) !!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 04. Apr. 2023 10:20 <-- editieren / zitieren --> Unities abgeben:         
|
apps4eplan Mitglied freier Entwickler
 
 Beiträge: 130 Registriert: 26.11.2020 EEC Professional in allen Versionen
|
erstellt am: 04. Apr. 2023 10:23 <-- editieren / zitieren --> Unities abgeben:          Nur für I.Tou
|
nairolf Ehrenmitglied Elektroingenieur
    
 Beiträge: 1998 Registriert: 21.01.2006 EPLAN Electric P8 2024.0.3 Update 1 (Build 21460) EPLAN Pro Panel Professional Addon EPLAN Fluid Addon
|
erstellt am: 04. Apr. 2023 10:33 <-- editieren / zitieren --> Unities abgeben:          Nur für I.Tou
Nach meinem Kenntnisstand ist es nach wie vor ausschließlich per API möglich, per Scripting keine Möglichkeit. Der voranstehend gepostet Hilfeauszug ist auch aus dem API. Die sonst oftmals möglichen "Umwege" über externes Bearbeiten im Scripting, greifen hier nicht, da die Strukturkennzeichenverwaltung kein solches Interface anbietet. VG nairolf ------------------ Der Fuchs ist schlau und stellt sich dumm. Bei vielen ist es andersrum  ------------------------------------------ Da lernt man mühevoll laufen und sprechen, und nun soll ich stillsitzen und die Klappe halten ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 04. Apr. 2023 10:48 <-- editieren / zitieren --> Unities abgeben:         
Tut mir leid, Leute, aber ich bin neu in diesem Bereich. Wissen Sie, ob es möglich ist, eine API oder ein Add-In zu erstellen, das diese Funktion für mich übernimmt, und es dann mit einem Skript auszuführen? Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apps4eplan Mitglied freier Entwickler
 
 Beiträge: 130 Registriert: 26.11.2020 EEC Professional in allen Versionen
|
erstellt am: 04. Apr. 2023 10:59 <-- editieren / zitieren --> Unities abgeben:          Nur für I.Tou
Hab Dir gerade ein Video dazu gemacht; keine Ahnung, ob das auch nur annähernd in die richtige Richtung geht! Sonst einfach Kontakt aufnehmen! Ich leg das neue Strukturkennzeichen einfach nur an damit Du sehen kannst, dass man die Strukturkennzeichen manipulieren kann, ok?! Video ------------------ sind doch alles nur Nuller und Einser :-) !!! [Diese Nachricht wurde von apps4eplan am 04. Apr. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 04. Apr. 2023 11:20 <-- editieren / zitieren --> Unities abgeben:         
Ich denke du bist auf dem richtigen Weg! Nehmen wir an, der Wert von "<EPLAN.Page.UserSupplementaryField10> " ist gleich X, ich möchte zu diesem Wert 1 addieren und ihn in Strukturkennzeichen-Verwaltung widerspiegeln lassen, insbesondere LOCATION_DESCRIPTION_SUPPLEMENTARYFIELD[7] Wird das möglich sein? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 04. Apr. 2023 11:36 <-- editieren / zitieren --> Unities abgeben:         
|
apps4eplan Mitglied freier Entwickler
 
 Beiträge: 130 Registriert: 26.11.2020 EEC Professional in allen Versionen
|
erstellt am: 04. Apr. 2023 11:45 <-- editieren / zitieren --> Unities abgeben:          Nur für I.Tou
Natürlich geht auch das, mit der API geht sehr viel; Du/ihr müsst euch nur darüber in Klaren sein, dass API eine Lizenzerweiterung ist und bei Eplan Geld kostet; wenn auch nicht viel, aber API ist kostenpflichtig! Video------------------ sind doch alles nur Nuller und Einser :-) !!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 04. Apr. 2023 12:24 <-- editieren / zitieren --> Unities abgeben:         
Bravo!!! das ist genau das was ich will! Kann ich die API-Erweiterung also mit meinem Skriptteil kombinieren? Ich würde auch gerne wissen, was die Anweisungen wären, um dies zu erreichen, wenn Sie mir bitte eine Anleitung geben könnten. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 05. Apr. 2023 12:45 <-- editieren / zitieren --> Unities abgeben:         
Guten Morgen nochmal, ich werde Fan von EPLAN Scripting, bin aber noch ein kleiner Laie.. Im Folgenden beschreibe ich den Zweck des Codes: Nach Mehrfachselektion von Seiten möchte ich den einzelnen Wert jeder Seite auslesen, der sich im Feld "EPLAN.Page.UserSupplementaryField10" befindet und dann in einer MessageBox anzeigen, welcher der höchste Wert ist. In diesem Feld steht normalerweise REV. X X= eine Zahl. Beim Ausführen des Codes, den ich erstellt habe, zeigt er mir nach dem Lesen aller Seiten nur den Wert der letzten Seite an. Aber was ich suche, ist der größte Wert aller ausgewählten Seiten. Mal sehen, ob mir jemand helfen kann. Danke using System; using System.Windows.Forms; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using Eplan.EplApi.ApplicationFramework; using Eplan.EplApi.Base; using Eplan.EplApi.Scripting;
class Program { [Start] public void Action() { string Rev1 = string.Empty; var pages = GetPages(); Progress oProgress = new Progress("EnhancedProgress"); oProgress.SetTitle("Actualizar revisiones"); oProgress.SetAllowCancel(true); oProgress.ShowImmediately(); oProgress.SetNeededSteps(pages.Length + 1); try {
// Do something with pages foreach (var page in pages) { oProgress.SetActionText(page); oProgress.Step(1); SelectPage(page); //Reads value of userSupplementField10 from every page CommandLineInterpreter cliRev1 = new CommandLineInterpreter(); ActionCallingContext accRev1 = new ActionCallingContext(); accRev1.AddParameter("PropertyIdentName", "EPLAN.Page.UserSupplementaryField10"); accRev1.AddParameter("PropertyIndex", "0"); cliRev1.Execute("XEsGetPagePropertyAction", accRev1); accRev1.GetParameter("PropertyValue", ref Rev1); } } catch (Exception exception) { MessageBox.Show(exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { Rev1 = new Regex("[?_@;REV. ]").Replace(Rev1, string.Empty); //ELiminate characters leaving only numbers int number = Int32.Parse(Rev1); //convert from string to int int[] numbers = new int[] { number }; //indicating numbers has multiple values int maxnumber = numbers.Max(); //Looks for the highest value string nRev1 = maxnumber.ToString(); //Converts it to string again CommandLineInterpreter cpage = new CommandLineInterpreter(); cpage.Execute("XGedClosePage");
oProgress.EndPart(true); MessageBox.Show("Ultima revisión: REV. " + nRev1); //Shows highest revision } } private static string[] GetPages() { CommandLineInterpreter cli = new CommandLineInterpreter(); ActionCallingContext acc = new ActionCallingContext(); string pagesString = string.Empty; acc.AddParameter("TYPE", "PAGES"); cli.Execute("selectionset", acc); acc.GetParameter("PAGES", ref pagesString); string[] pages = pagesString.Split(';'); return pages; } private void SelectPage(string page) { CommandLineInterpreter cli = new CommandLineInterpreter(); ActionCallingContext acc = new ActionCallingContext(); acc.AddParameter("PAGENAME", page); cli.Execute("edit", acc); } }
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apps4eplan Mitglied freier Entwickler
 
 Beiträge: 130 Registriert: 26.11.2020 EEC Professional in allen Versionen
|
erstellt am: 05. Apr. 2023 12:55 <-- editieren / zitieren --> Unities abgeben:          Nur für I.Tou
Du solltest deine Liste mit Integers ausserhalb der foreach-Schleife deklarieren und erst nach der froeach-Schleife dein Maximum ermitteln; aktuell wird für jede Seite die Liste neu erstellt und der Max-Wert neu ermitteln; ist natürlich nicht gut! ------------------ sind doch alles nur Nuller und Einser :-) !!! [Diese Nachricht wurde von apps4eplan am 05. Apr. 2023 editiert.] [Diese Nachricht wurde von apps4eplan am 05. Apr. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 05. Apr. 2023 13:50 <-- editieren / zitieren --> Unities abgeben:         
Sie könnten mir helfen, den Code zu strukturieren, da ich immer noch den gleichen Fehler habe. Auch um in der Lage zu sein, den Wert jeder Seite zu lesen, sollte in foreach sein oder ich liege falsch. Alles Gute. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apps4eplan Mitglied freier Entwickler
 
 Beiträge: 130 Registriert: 26.11.2020 EEC Professional in allen Versionen
|
erstellt am: 05. Apr. 2023 14:41 <-- editieren / zitieren --> Unities abgeben:          Nur für I.Tou
Ich würde den Action-Teil einmal so versuchen: public void Action() { var pages = GetPages(); Progress oProgress = new Progress("EnhancedProgress"); oProgress.SetTitle("Actualizar revisiones"); oProgress.SetAllowCancel(true); oProgress.ShowImmediately(); oProgress.SetNeededSteps(pages.Length + 1); // Do something with pages List<int> Numbers = new List<int>(); foreach (var page in pages) { oProgress.SetActionText(page); oProgress.Step(1); SelectPage(page); //Reads value of userSupplementField10 from every page CommandLineInterpreter cliRev1 = new CommandLineInterpreter(); ActionCallingContext accRev1 = new ActionCallingContext(); accRev1.AddParameter("PropertyIdentName", "EPLAN.Page.UserSupplementaryField10"); accRev1.AddParameter("PropertyIndex", "0"); try { cliRev1.Execute("XEsGetPagePropertyAction", accRev1); accRev1.GetParameter("PropertyValue", ref Rev1); Rev1 = new Regex("[?_@;REV. ]").Replace(Rev1, string.Empty); //ELiminate characters leaving only numbers int number = Int32.Parse(Rev1); Numbers.Add(number); } catch (Exception exception) { MessageBox.Show(exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); continue; } CommandLineInterpreter cpage = new CommandLineInterpreter(); cpage.Execute("XGedClosePage"); } oProgress.EndPart(true); int maxnumber = Numbers.Max(); string nRev1 = maxnumber.ToString(); MessageBox.Show("Ultima revisión: REV. " + nRev1); } ------------------ sind doch alles nur Nuller und Einser :-) !!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 06. Apr. 2023 08:27 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank für Ihre Hilfe, genau das war die Funktion, die ich wollte! Können Sie mir sagen, was Ihre Logik für diese Strukturierung war? da es sich ziemlich von meinem ursprünglichen Code unterscheidet. Ich würde auch gerne wissen, wo ich mehr über C#-Code im Allgemeinen und Eplan-Scripting lernen kann, weil ich es gerade erst entdeckt habe und noch viel lernen muss ... obwohl es mir wirklich Spaß macht. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apps4eplan Mitglied freier Entwickler
 
 Beiträge: 130 Registriert: 26.11.2020 EEC Professional in allen Versionen
|
erstellt am: 06. Apr. 2023 11:08 <-- editieren / zitieren --> Unities abgeben:          Nur für I.Tou
Sehr gerne, freut mich, wenn es geklappt hat! Strukturierung: Erfahrung und Intuition dafür, was als Ergebnis raus kommen soll C# Learning: auf LinkedIn gibt es ein gutes eLearning Portal, da sind sicherlich Videotrainings zu finden oder einen wirklichen Grundkurs in einem offiziellen Institut besuchen Eplan Scripting: da gibt es mittlerweile auch schon die eine oder andere Firma, die solche Einführungstrainings anbietet, im Internet fliegt dazu auch schon einiges herum und meine Kontaktdaten hab ich dir/ihnen ja zukommen lassen. Tipp meinerseits: learning by doing ist zwar interessant und liefert auch das eine oder andere Ergebnis, aber mit einer fundierten Grundausbildung geht's meistens viel leichter und die Investition hat man rasch wieder rein geholt! Viel Spaß beim Scripten ------------------ sind doch alles nur Nuller und Einser :-) !!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| Dipl.-Ing./M./BA/Techniker Elektro-Konstrukteur (m/w/d) | Die Hinterkopf GmbH ist ein inhabergeführtes, mittelständisches Unternehmen in zweiter Generation mit Sitz in Eislingen/Fils bei Göppingen (BaWü), das 1962 gegründet wurde. Das Familienunternehmen hat es bei der Entwicklung und Herstellung von großen Maschinen und Produktionslinien zur Herstellung und Dekoration zylindrischer Hohlkörper zur Weltmarkt- und Technologieführerschaft geschafft.... | Anzeige ansehen | Feste Anstellung |
|
I.Tou Mitglied CAD

 Beiträge: 18 Registriert: 28.03.2023
|
erstellt am: 06. Apr. 2023 17:39 <-- editieren / zitieren --> Unities abgeben:         
|