Im CAD.de-Forum gab es die Frage wie man auslesen kann welche API-Addins und Scripte geladen sind. Ich habe das mal ausprogrammiert:
using System.Windows.Forms; using Eplan.EplApi.Base; using Eplan.EplApi.Scripting; using System.Collections.Generic; using System.Collections.Specialized; public class ReadApiAddinsAndScripts { [Start] public void Action() { // API addins List<string> apiAddins = GetApiAddins(); string apiAddinsText = string.Join("\n", apiAddins); MessageBox.Show(apiAddinsText, "ApiAddins", MessageBoxButtons.OK, MessageBoxIcon.Information); // scripts List<string> scripts = GetScripts(); string scriptsText = string.Join("\n", scripts); MessageBox.Show(scriptsText, "Scripts", MessageBoxButtons.OK, MessageBoxIcon.Information); } public List<string> GetApiAddins() { List<string> list = new List<string>(); Settings settings = new Settings(); SettingNode settingsNode = new SettingNode("STATION.EplanEplApiModule.Module"); StringCollection nodes = new StringCollection(); settingsNode.GetListOfNodes(ref nodes, false); foreach (string node in nodes) { SettingNode subNode = settingsNode.GetSubNode(node); string name = subNode.GetNodePath() + ".AssemblyName"; var text = settings.GetStringSetting(name, 0); list.Add(text); } return list; } private List<string> GetScripts() { List<string> list = new List<string>(); Settings settings = new Settings(); string settingsPath = "STATION.EplanEplApiScriptGui.Scripts"; var count = settings.GetCountOfValues(settingsPath); for (var index = 0; index < count; index++) { var text = settings.GetStringSetting(settingsPath, index); list.Add(text); } return list; } }
Hallo,
gibt es sowas auch für registrierte AddOns? Anwendungsfall wäre folgender:
AddOn per Skript nur registrieren, wenn es nicht bereits registriert ist, und umgekehrt (nur registrierte löschen). Die Actions XSettingsRegisterAction und XSettingsUnregisterAction prüfen das nicht vorher ab. Das Registrieren beim Start von ePLAN führt so zu längeren Ladezeiten, bzw. zu irreführenden Systemmeldungen, wenn ein nicht registriertes AddOn beim Beenden gelöscht werden soll.
mit freundlichen Grüßen
Thomas Kaiserauer
Die geladenen addons werden in STATION.SYSTEM.PATH.ADDONS gespeichert. Auslesen kannst Du diese wie folgt:
public StringCollection XReadRegisterdAddOns()
{
//Alle registrierten AddOns sammeln
StringCollection oStrCl = new StringCollection();
Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
Int32 nCount = oSettings.GetCountOfValues(“STATION.SYSTEM.PATH.ADDONS”);
for (Int32 nI = 0; nI < nCount; ++nI) { String nstrAddon = oSettings.GetStringSetting("STATION.SYSTEM.PATH.ADDONS", nI); oStrCl.Add(nstrAddon); } return oStrCl; }
Vielen Dank, der Code funktioniert einwandfrei!
Ich habe ihren Code inzwischen wie folgt adaptiert (kann vielleicht jemand brauchen). Im Beispiel sind ePLAN-Standard-Addons. Zur Anwendung kommt das bei uns bei Kunden-spezifischen AddOns, die nicht alle Konstrukteure brauchen. Das steuere ich über Gruppen-Zugehörigkeiten in der Rechteverwaltung. Das verringert Erklärungsbedarf und Ladezeiten bei Konstrukteuren, die so ein AddOn gar nicht brauchen.
Das Laden erfolgt im Event OnMainStart, das Entladen im Event OnMainEnd.
//Deklarationen
public const string quote = “\””;
public string str_AddOnEP8 = @”C:\Program Files\EPLAN\Electric P8 Data\” + PathMap.SubstitutePath(“$(EPLAN_Version)”) + @”\Cfg\install.xml”;
public string str_AddOnPlatform = @”C:\Program Files\EPLAN\Platform Data\” + PathMap.SubstitutePath(“$(EPLAN_Version)”) + @”\Cfg\install.xml”;
public string str_AddOnFluid = @”C:\Program Files\EPLAN\Fluid Data\” + PathMap.SubstitutePath(“$(EPLAN_Version)”) + @”\Cfg\install.xml”;
public string str_AddOnProPanel = @”C:\Program Files\EPLAN\Pro Panel Data\” + PathMap.SubstitutePath(“$(EPLAN_Version)”) + @”\Cfg\install.xml”;
//OnMainStart:
//API-AddOns
//AddOns registrieren
LoadAddOn(str_AddOnEP8);
LoadAddOn(str_AddOnPlatform);
LoadAddOn(str_AddOnFluid);
//für berechtigte ProPanel-User
if (ProPanelForUser)
{
//AddOn Pro Panel registrieren
LoadAddOn(str_AddOnProPanel);
}
//Funktionen:
//AddOn mit Pfadangabe entladen
private void UnloadAddOn(string InstXML)
{
//nur geladene AddOns entladen
if (AddOnRegistered(InstXML))
{
new CommandLineInterpreter().Execute(“XSettingsUnregisterAction /installFile:” + quote + InstXML + quote);
new BaseException(“Registrierung AddOn ” + quote + InstXML + quote + ” gelöscht.”, MessageLevel.Message).FixMessage();
}
return;
}
//AddOn mit Pfadangabe laden
private void LoadAddOn(string InstXML)
{
//nur noch nicht geladenes AddOns laden
if (!AddOnRegistered(InstXML))
{
new CommandLineInterpreter().Execute(“XSettingsRegisterAction /installFile:” + quote + InstXML + quote);
new BaseException(“AddOn ” + quote + InstXML + quote + ” neu registriert.”, MessageLevel.Message).FixMessage();
}
return;
}
//Prüfung auf geladenes AddOn
private bool AddOnRegistered(string str_name)
{
bool b_result = false;
//Alle registrierten AddOns sammeln
StringCollection oStrCl = new StringCollection();
Settings oSettings = new Settings();
Int32 nCount = oSettings.GetCountOfValues(“STATION.SYSTEM.PATH.ADDONS”);
for (Int32 nI = 0; nI < nCount; ++nI)
{
String nstrAddon = oSettings.GetStringSetting("STATION.SYSTEM.PATH.ADDONS", nI);
if (nstrAddon.ToLower().Contains(str_name.ToLower()))
{
b_result = true;
}
}
return b_result;
}