Info: Es gibt eine neue Version von diesem Script.
Mit diesem Script könnt ihr einzelne Projekteigenschaften lesen.
Als Parameter habe ich mich für string entschieden, da zum Setzen der Projekteigenschaft die ID auch als String übergeben werden muss.
Verwendung:
string value = GetProjectProperty(Id, Index);
Die Methode muss im verwendeten Script vorhanden sein:
private static string GetProjectProperty(string id, string index) { string value = null; ActionCallingContext actionCallingContext = new ActionCallingContext(); actionCallingContext.AddParameter("id", id); actionCallingContext.AddParameter("index", index); new CommandLineInterpreter().Execute("GetProjectProperty", actionCallingContext); actionCallingContext.GetParameter("value", ref value); return value; }
Das Script GetProjectProptery.cs laden und das Schema (GetProjectProperty_Template.xml) im Ordner Scripte/GetProjectProperty abspeichern.
Anbei das ganze Script + Download.
/* Usage private static string GetProjectProperty(string id, string index) { string value = null; ActionCallingContext actionCallingContext = new ActionCallingContext(); actionCallingContext.AddParameter("id", id); actionCallingContext.AddParameter("index", index); new CommandLineInterpreter().Execute("GetProjectProperty", actionCallingContext); actionCallingContext.GetParameter("value", ref value); return value; } */ using System; using System.Windows.Forms; using Eplan.EplApi.ApplicationFramework; using Eplan.EplApi.Base; using Eplan.EplApi.Scripting; using System.IO; class GetProjectProperty { [DeclareAction("GetProjectProperty")] public void Action(string id, string index, out string value) { string pathTemplate = Path.Combine(PathMap.SubstitutePath("$(MD_SCRIPTS)"), "GetProjectProperty", "GetProjectProperty_Template.xml"); string pathScheme = Path.Combine(PathMap.SubstitutePath("$(MD_SCRIPTS)"), "GetProjectProperty", "GetProjectProperty_Scheme.xml"); try { // Set scheme string content = File.ReadAllText(pathTemplate); content = content.Replace("GetProjectProperty_ID", id); content = content.Replace("GetProjectProperty_INDEX", index); File.WriteAllText(pathScheme, content); new Settings().ReadSettings(pathScheme); string pathOutput = Path.Combine( PathMap.SubstitutePath("$(MD_SCRIPTS)"), "GetProjectProperty", "GetProjectProperty_Output.txt"); // Export ActionCallingContext actionCallingContext = new ActionCallingContext(); actionCallingContext.AddParameter("configscheme", "GetProjectProperty"); actionCallingContext.AddParameter("destinationfile", pathOutput); actionCallingContext.AddParameter("language", "de_DE"); new CommandLineInterpreter().Execute("label", actionCallingContext); // Read value = File.ReadAllLines(pathOutput)[0]; } catch (Exception exception) { MessageBox.Show(exception.Message, "GetProjectProperty", MessageBoxButtons.OK, MessageBoxIcon.Error); value = "[Error]"; } } }
Hello Johann.
I do not speak german but I am a fan of this website and follow it!
For this script I have some questions, it is not exactly clear to me how I use this script.
Could you explain the steps I would need to do to make this work?
Thanks in advance,
Tim
Hi Tim, follow these steps:
– Load the script GetProjectProperty.cs
– Copy the scheme files to Scripts/GetProjectProperty
– Include the Method GetProjectProperty() in your Script
I see that i missed to upload the XML-Schemes, so please download the ZIP again.
Thank you for the quick reply.
Could you show me an example script where you call the method GetProjectProperty() ?
I tried to put it into a script, but it gave multiple errors.
Hi Tim,
I guess you made the same mistake I did. I copied the GetProjectProperty() method into the class also named GetProjectProperty. This throws a compiler error “member names cannot be the same as their enclosing type “. Rename the class and it should work.
Hey Daniel!
Thank you, that was indeed the same mistake :)
I had tried to run it straight from a toolbar also “GetProjectProperty /ID:number /INDEX:number” Which gave me an error.
I thought that I made a mistake in using it in that way, but now I have the same erorr; “Can’t find a part of the path”
I fixed the path error.
Now it works!
I also used the principle to remake a read/write action that I made before.
The original uses the ProjectInfo XML to read the values stored there, downside was that it would only work once. After writing you would need to close and reopen the project so you can read the new values.
So very happy with the new way of approaching it!
Thanks alot!
[…] dass ich nun wieder mehr mit Thema Scripting & EPLAN zu tun habe, entstehen viele Lösungen wie GetProjectProperty oder […]
Hallo Zusammen,
wie bekomme ich es den hin, das die aufrufende Klasse, die, in der “private static string GetProjectProperty(string id, string index)” ist, die Classe GetProjectProperty_XY kennt. Über den Namespace klappt es bei mir nicht. Leider sind meine Grundkenntnisse hier nicht ausreichend.
vielen Dank
Das Script musste geladen werden.
Hallo Zusammen
Entschuldigung für meine Unwissenheit, aber ist es mit den Project Properties auch möglich die Strukturkennzeichenverwaltung aus zu lesen?
Ich müsste mal die FZ herauslesen und weiss nicht wie ich da hin komme. Bin halt noch Neuling.
Leider ist es nicht möglich die Strukturkennzeichenverwaltung auszulesen.
Aber als Workaround kannst du dir per Label-Action eine Strukturkennzeichenübersicht mit allen Kennzeichen und Eigenschaften ausgeben lassen und weiter verarbeiten.
Hallo zusammen,
Ich möchte gerne das Script benutzen um das Benutzerzusatzfeld 100 auszulesen.
Ich habe die Funktion Action bei mir eingefügt (abgesehen von [DeclareAction(“GetProjectProperty”)]) und rufe sie wie folgt auf.
string value;
Action(“40100”, “0”, out value);
Leider bekomme ich in EPLAN immer die Meldung “der Index war außerhalb des Arraybereichs”.
Woran kann das liegen?
Gruß Marcel
Einfach wie oben beschrieben das Script laden und dann im Code irgendwo diesen Aufruf:
Und diese Methode muss in deinem Script sein:
Hier ist nirgends ein out-Parameter definiert
Hallo,
Ich benötige leider noch mal Hilfe von der Community.
Ich habe in mein Programm folgendes integriert:
string value = GetProjectProperty(“40100”, “0”);
private static string GetProjectProperty(string id, string index)
{
string value = null;
ActionCallingContext actionCallingContext = new ActionCallingContext();
actionCallingContext.AddParameter(“id”, id);
actionCallingContext.AddParameter(“index”, index);
new CommandLineInterpreter().Execute(“GetProjectProperty”, actionCallingContext);
actionCallingContext.GetParameter(“value”, ref value);
return value;
}
Das Benutzerzusatzfeld 100 soll in die Variable value geschrieben werden.
Zur Zeit steht in den Projekteigenschaften dort testweise 1234.
“Der Inex war außerhalb des Arraybereichs.”
Die Überschrift des Textfeldes lautet GetProjectProperty.
Da ist im Script irgendwas kaputt… ich hab Dir mal ne Mail geschrieben.
Hallo Johann,
wie Marcel erhalte ich ebenfalls die Meldung „Der Index war außerhalb des Arraybereichs.“
Wie du selber schreibst, ist wohl etwas im Skript kaputt. Könntest du mir evtl. weiterhelfen den Fehler zu korrigieren.
Grüße
Jan
Marcel hat die XML Dateien neu heruntergeladen und richtig abgelegt.
Denke du hast hier auch das Schema nicht, hast du evtl. Systemmeldungen?
Script habe ich getestet, das geht :)
Hallo Johann,
ich versuche gerade dein script in meins einzubinden bekomme aber von EPlan aber immer folgende Fehlermeldungen:
Schwerer Fehler in Datei C:\Users\Public\EPLAN\Data\Skripte\Klein_GmbH\GetProjectProperty\GetProjectProperty_Scheme.xml in Zeile 7 und Spalte 9. DTD ist nicht zulässig.
Ungültiges Schema. Parameterwert: “GetProjectProperty”. Bitte benutzen Sie eines der folgenden Schemata: “Cable diagram, Device tag list, Summarized parts list, Terminal diagram”
Das script von dir ist unter Scripte abgelegt und die Shemata unter Scripte\GetProjectProperty, das sollte ja so passen.
Weiß du eventuell woran das liegen könnte?
Vielen Dank schon mal :)
ps. Super Seite
Denke das stimmt was mit dem Schema nicht bzw. mit der Eigenschaft. Was hast Du für einen Wert in der Eigenschaft?
An den Eigenschaften lag es nicht habe die Schema noch mal neu geladen und dann ging es auch.
Werden bei dem Script alle Eigenschaften in die xml ab gelegt oder nur die gesuchte?
Es wird ein temporäres Beschriftungsschema erzeugt (siehst du auch in EPLAN). Dort ist nur immer eine Eigenschaft drin. Man könnte aber natürlich auch ein eigenes Beschriftungsschema machen welche alle (gewünschten) Eigenschaften ausgibt.
Ok dann muss ich mir das mal anschauen.
Weißt du die ID der Benutzer Zusatzfelder (Projekt). Das auslesen mit dem Namen geht nicht. Finde aber auch leider nirgends eine ID.
Die stehen im *.edb Ordner in der ProjectInfo.xml (nach dem Projekt Schließen).