Hallo,
vor der Eplan 2.5 Version konnte man Projekte nur einzeln schließen, sobald man mehrere Projekte im Seitennavigator selektiert hatte war Rechtklick->Projekt->Schließen ausgegraut.
Ein Eplan Skript, z.B. PDF erstellen bei schließen eines Projekts, konnte bei schließen eines Projektes gestartet werden per Event
"onActionStart.String.XPrjActionProjectClose"
und der Name des Projekts mit
selectionset, Type Project
oder
PathMap.SubstitutePath("$(PROJECTNAME)")
ermittelt und für die PDF Ausgabe als Zieldatei verwendet werden.
Jetzt jedoch mit Eplan 2.5 gibt es Probleme wenn man mehrere Projekte auf einmal schließt.
Mit Event "onActionStart.String.XPrjActionProjectClose" wird das Skript nur einmal gestartet, statt entsprechend der Anzahl der zu schließenden Skripte.
Mit Event "Eplan.EplApi.OnUserPreCloseProject" wird das Skript zwar mehrmals gestartet, es gelingt mir aber nicht die Projektnamen korrekt zu ermitteln.
So kann es vorkommen wenn man z.B. 3 Projekt gleichzeitig schließt
zwei Namen erkannt werden, einmal ein leerer String zurückgegeben wird und die PDF Ausgabe von Projektname1 in den ermittelnen Projektnamen "Projektname2" geschrieben wird.
Es ergibt also ein echtes Chaos.
Hat wer von euch einen Weg gefunden alle zu schließenden Projekte korrekt zu verarbeiten (Namensermittlung und PDF bzw. Beschriftungsausgabe) ?
Besten Dank für eure Hilfe.
Als Beispiel:
Das (geladene) Skript Test.cs ermittelt z.B. die Namen nicht korrekt:
Code:
public class Test2
{
[DeclareEventHandler("Eplan.EplApi.OnUserPreCloseProject")] [Start]
[DeclareAction("Test3")]
public void Test2Void()
{
System.Windows.Forms.MessageBox.Show(PathMap.SubstitutePath("$(PROJECTNAME)"));
return;
}
public void Test3Void()
{
// Projektdatei, Projektpfad, Projektname
string sSelectedProjectData = string.Empty; // kompletter Pfad + Projektdateinamen + Erweiterung
string sSelectedProjectName = string.Empty; // Projektname
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);
System.Windows.Forms.MessageBox.Show(sSelectedProjectName);
}
}
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP