Der kleine Unterschied (war einmal)
Projektvorlagen waren in EPlan bis Eplan P8 Version 2.9 nur eine Hülle eines Projektes, welches keine Stammdaten eingelagert, sondern nur referenziert hatte. Übrigens ähnlich zu den Projekten damals in Eplan5 und der Grund bei Problemen der Migration alter Projekte.
Basisprojekte hingegen haben alles direkt an Bord, was man eben braucht (oder eben auch nicht mehr braucht, aber nicht bereinigt wurde).
Projektvorlagen ade – noch schnell umsteigen
Packen wir erstmal das Scheidende an. In 2022 und neuer wird das leider nicht mehr nutzbar sein. Aber es lässt sich mit der Action XPrjConvertBaseProjectsAction und dem Parameter /Folder:<Folder> einfach in ein Basisprojekt konvertieren. Entweder wie in der Beschreibung im Link, oder als kleines Script (ehrlich gesagt: Im Consulting hätte ich mir die Schweizer Taschenmesser-Ribbon-Bar gebastelt, die das direkt mit drin hätte… Als Admin reicht es auch manuell in die Menüleiste gezogen, ausgeführt und wieder gelöscht.
XPrjConvertBaseProjectsAction /Folder:$(MD_TEMPLATES) // Übernommen aus der Anleitung von EPlan
Basisprojekte und wie ich sie automatisiert ausschreibe
Es gibt immer wieder diese Phasen, in denen man viel an seinen Formularen oder auch mal Normblättern macht, aber auch mal Artikel updated. Wenn man dann zum Abschluss einmal die idealerweise ein, maximal zwei Basisprojekte neu ausschreibt, plant man die Zeit vorher auch mal ein, für
- Temporäres Projekt aus Basisprojekt anlegen
- Stammdatenabgleich anschieben
- Ggf. Bereinigen
- Das Projekt neu als Basisprojekt sichern
Aber wenn sich dann im Nachgang hier und da leider zeigt, dass in einem Formular ein kleiner Bug ist (der sich leider in den Testcases nicht gezeigt hatte), geht das Spiel von vorne los. Dazu kommt dann noch: Es gibt nicht ein oder zwei Basisprojekte, sondern schon einige mehr (Unterschiede für Abteilungen/Bereiche/Standorte/…). Und genau da setzt die Idee an. Dank eines kleinen Posts von Johann Weiher zu dem Thema bin ich auf die Funktion gestoßen (Vielen Dank nochmal für die Info!). Allerdings spare ich mir den ersten Schritt und habe meine Basisprojekt-Vorlagen in einem Unterordner als ganz normale Projekte liegen. Zum XPrjActionProjectUpdateMasterdata muss ich gestehen, ist mir die Quelle nicht mehr bekannt, wurde aber im CAD-Forum schon mal diskutiert. Die Funktion gibt es allerdings noch in anderer Form.
Zum Bereinigen kann compress verwendet werden. Da viele unterschiedliche Basisprojekte nicht ohne Grund existieren, sind oft auch die Schemata zur Bereinigung deutlich unterschieden. Daher nutze ich das hier nicht, weise aber wenigstens drauf hin.
using System;
using System.IO;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
public class createBasisProjects {
// Die Basisfunktion:
public void createBaseProjekt(string Project, string Vorlagenordner) {
CommandLineInterpreter cli = new CommandLineInterpreter();
ActionCallingContext acc = new ActionCallingContext();
acc.AddParameter("PROJECT", "$(MD_TEMPLATES)" + "\\" + Vorlagenordner + Project + ".elk");
acc.AddParameter("TARGET", "$(MD_TEMPLATES)" + "\\" + Project + ".elk");
cli.Execute("XPrjActionProjectCreateBaseProject", acc);
}
// dann sollen ja auch die Stammdaten upgedated werden (ohne das machts keinen Sinn)
public void updateStammdaten(string Project, string Vorlagenordner) {
CommandLineInterpreter cli = new CommandLineInterpreter();
ActionCallingContext acc = new ActionCallingContext();
acc.AddParameter("PROJECT", "$(MD_TEMPLATES)" + "\\" + Vorlagenordner + Project + ".elk");
cli.Execute("XPrjActionProjectUpdateMasterdata", acc);
}
// Das "Herzstück" der ganzen Aktion, kann man durch
[Start] // oder eben eine
[DeclareAction(ACTION_NAME)] // oder auch für das Einbinden ins Menü, oder ein
[DeclareRegister] // wenn man bei jedem Laden die Funktion ausführen möchte
public void updateAllBaseProjects() {
string Vorlagenordner = "...\\";
string Suchpfad = "$(MD_TEMPLATES)" + "\\" + Vorlagenordner;
string Projects = Directory.GetFiles(Suchpfad, // Ordner
"*.elk", // Pattern
TopDirectoryOnly); // Suchoption
foreach (string Project in Projects) {
string Projectname = Path.GetFileNameWithoutExtension(Project);
updateStammdaten(Projectname, Vorlagenordner);
createBaseProjekt(Projectname, Vorlagenordner);
}
}
Was nun noch fehlt ist das ganze Tamtam drumherum, also:
- Fehler abfangen
- Projekte ggf. prüfen (check)
- Interaktionen mit dem Nutzer: „Du bist im begriff diese Aktion auszuführen!! Willst du das?!“
aber das sind letztendlich nur noch ein paar kosmetische Punkte.