In der Beta von EPLAN 2022 hatte ich hier schon beschrieben, wie man eigene Befehle im Menüband erzeugt.
Ab EPLAN 2022 Update 1 ist es nun möglich auch eigene Icons zu definieren. Ich habe mal ein erweitertes Beispiel erstellt auch mit Muli-Language-Support:
Bei Laden eines Scriptes via Add-On oder Action RegisterScript
gibt es Stand EPLAN 2022 Update 1 Probleme. Hier sollte der Tab in [DeclareEventHandler("Eplan.EplApi.OnMainStart")]
hinzugefügt und in [DeclareEventHandler("Eplan.EplApi.OnMainEnd")]
entfernt werden.
using System.Windows.Forms; using Eplan.EplApi.Base; using Eplan.EplApi.Gui; using Eplan.EplApi.Scripting; class Example { private const string ACTION_NAME = "RibbonAction"; private MultiLangString TAB_NAME { get { MultiLangString tabName = new MultiLangString(); tabName.AddString(ISOCode.Language.L_de_DE, "Mein Tab"); tabName.AddString(ISOCode.Language.L_en_US, "My Tab"); return tabName; } } [DeclareRegister] public void Register() { RibbonBar ribbonBar = new RibbonBar(); RibbonTab ribbonTab = ribbonBar.GetTab(TAB_NAME, true); if (ribbonTab == null) { ribbonTab = ribbonBar.AddTab(TAB_NAME); } // Simple RibbonCommandGroup ribbonCommandGroup1 = ribbonTab.AddCommandGroup("My group 1"); RibbonIcon ribbonIcon1 = new RibbonIcon(CommandIcon.Accumulator); ribbonCommandGroup1.AddCommand("My action 1", ACTION_NAME, ribbonIcon1); // Extended MultiLangString groupText = new MultiLangString(); groupText.AddString(ISOCode.Language.L_de_DE, "Meine Gruppe 2"); groupText.AddString(ISOCode.Language.L_en_US, "My group 2"); RibbonCommandGroup ribbonCommandGroup2 = ribbonTab.AddCommandGroup(groupText); MultiLangString commandText = new MultiLangString(); commandText.AddString(ISOCode.Language.L_de_DE, "Meine Aktion 2"); commandText.AddString(ISOCode.Language.L_en_US, "My action 2"); MultiLangString tooltip = new MultiLangString(); tooltip.AddString(ISOCode.Language.L_de_DE, "Mein ToolTip"); tooltip.AddString(ISOCode.Language.L_en_US, "My tooltip"); MultiLangString description = new MultiLangString(); description.AddString(ISOCode.Language.L_de_DE, "Meine Beschreibung"); description.AddString(ISOCode.Language.L_en_US, "My description"); string imagePath = @"C:\test\test.svg"; RibbonIcon ribbonIcon2 = ribbonBar.AddIcon(imagePath); ribbonCommandGroup2.AddCommand(commandText, ACTION_NAME, tooltip, description, ribbonIcon2); } [DeclareUnregister] public void UnRegister() { RibbonBar ribbonBar = new RibbonBar(); RibbonTab ribbonTab = ribbonBar.GetTab(TAB_NAME, true); if (ribbonTab != null) { ribbonTab.Remove(); } } [DeclareAction(ACTION_NAME)] public void Function() { MessageBox.Show("Action wurde ausgeführt!"); } }
Hallo Johann Weiher,
wir sind gerade am intensiveren Test der neuen Platform Version 2022. Ich habe ein eigenes Menü für die älteren Version von Eplan. Hier habe Ich aber im jeweiligen Menü wieder PopUps realisiert da es sich um mehrere Befehle handelt.
Ist es Möglich das “Meine Aktion 2” wieder ein popUp ist und meherer Befehle darunter liegen.
Mehrere Befehle in die selbe Gruppe zu legen funktioniert, mir wird dann aber die Gruppe bzw. das Ribbon viel zu groß und ich müßte mehrer Reiter anlegen.
In der älteren Version habe ich das über
“menuIdPop0 = menu.AddPopupMenuItem(”
realisiert.
Danke.
Leider nein. Du müsstest Dir das selber bauen über ein Windows Forms Fenster.
Schade, Vielen Dank!
Hallo Johann,
wird dazu das Eplab Subscription Modell benötigt um die gesamte Eplan API verwenden zu können?
Ribbons kannst Du via Scripting erstellen, somit ohne API.
Die API kannst Du nur verwenden wenn Du eine API Extension Lizenz hast. Mit dem Subscription-Modell von EPLAN bekommt man eine Runtime Lizenz, welche nur fertige API-Addins ausführen kann.
Beispiel: Du sagst Ihr wollt die ibKastl Runtime haben, dann können wir Addins für Euch entwicklen welche Ihr ausführen könnt.
Hallo Johann, erstmal danke für das hilfreiche Template!
Hab das ganze mal bei uns durchgespielt und konnte einen eigenen Tab mit Gruppe und Ribbon erstellen.
Was leider nicht klappt, ist das automatische umschalten der beiden Sprachen beim öffnen von EPlan auf Englisch.
Wüsstest du spontan woran das liegen könnte? Wir arbeiten mit der aktuellsten EPlan-version.
Funktioniert es wenn Du das Beispiel lädst?
Hallo Johann,
Ich möchte eine Webside über das Ribbon menue öffnen können. Ich habe das schon gesehen, weiss aber nicht wie.
Ein Befehl im Ribbon führt eigentlich nur eine Action aus. Du musst dort eine Action angeben welche genau das macht. Einfach Process.Start(“https://google.com”) in der Action machen, hier ist ein Beispiel:
https://eep8a.de/v3/scripts/09_Externe_Programme/#02-unterschiedliche-prozesse-ausfuhren
Hallo Johann,
kann man irgendwie die Größe des Buttons im Ribbon anpassen?
Habe dazu nichts gefunden.
Hallo Philipp,
direkt ist das nicht möglich. Man kann aber nur das Icon anzeigen wenn man als CommandText ein Leerzeichen übergibt.
Das macht das Symbol trotzdem nicht größer. Schade.
Danke für die schnelle Antwort.
Hallo, das mit dem Leerzeichen bei CommandText, funktioniert aber auch nur bedingt. Nach Programmneustart sind dann auch QuickInfo/Tooltip und Beschreibung leer.
Kann ich so nicht reproduzieren. Kannst Du mal ein kleines Beispiel posten?
Beispiel kann ich später gerne posten.
Bin gerade dabei meine eigenes Menüband zu erstellen.
Gibt es eine Möglichkeit einen Standard-Button von Eplan über API-Skript in meine eigene Registerkarte/Befehlsgruppe einzufügen?
Ziel ist es, eine Registerkarte zu haben, auf der sowohl eigene, als auch Eplan Standard Buttons platziert sind.
Hallo! Das Skript ist sehr hilfreich für den Start, allerdings bekomme ich keine Zweite Action angezeigt.
Ich habe das so versucht:
ribbonCommandGroup1.AddCommand(
“My action 1”, ACTION_NAME, ribbonIcon1);
ribbonCommandGroup1.AddCommand(
“My action 2”, ACTION_NAME, ribbonIcon1);
Kann man so nicht zur CommandGroup mehrere Befehle hinzufügen?
Hast Du evtl. eine Systemmeldung bekommen (rechts unten). Versuche mal in eine andere Gruppe den Befehl hinzuzufügen, evtl. geht es nicht in der gleichen Gruppe.
Hallo, Danke für das Script.
Frage, kann man auch ein Dropdown Menü erstellen?
Direkt über Scripting nicht.
Man müsste hier eine Action programmieren, welche ein Menü dann aufploppen lässt.
Wie würde eine solche Action aussehen?
Guten Tag Her Weiher,
ich habe hier ihr Buch vorliegen und habe damit zwei Zusatzbuttons in die Menüleiste eingebracht, über die ein Skript gestartet wird, dass die Artikeldatenbank, die Verzeichnisse und das Wörterbuch vom Standard-SQL-Server auf einen temporären Server umschaltet und vice versa. Das funktioniert auch einwandfrei.
Allerdings wird jetzt noch von mir gefordert, dass man immer sehen können soll, welcher Button zuletzt betätigt wurde.
Es gibt offensichtlich die Funktion, dass Buttons bei Betätigung grau hinterlegt werden, solange z.B. der Navigator offen ist oder solange der Geräteanschluss an der Maus hängt. Wird der Navigator geschlossen, so verschwindet auch die grau Hinterlegung des jeweiligen Navigator-Buttons. Die graue Hinterlegung entsteht auch, wenn man mit der Maus über einen Button hovert.
Nun die Frage: Kann man bei Betätigung eigener Zusatzbuttons, die eigene Skripte starten, diese graue Hinterlegung einfügen? Ich könnte mir vorstellen, dass die Buttons an sich eigentlich mit grau hinterlegt werden, aber da das Skript sofort ausgeführt und beendet ist, endet die graue Hinterlegung auch sofort. Diese Hinterlegung soll aber so lange bestehen bleiben, bis der andere Button betätigt wird.
Ich hoffe sie können mir da weiterhelfen.
Ihr Buch ist übrigens sehr gut. Wir haben jetzt auch die neue Auflage für EPlan 2022 gekauft, die ist aber leider noch nicht da.
Mit freundlichen Grüßen,
Nicolas
Hallo Nikolas,
leider geht es nicht den Status eines Toolbar-Buttons via Scripting zu setzen.
Denke aber in EPLAN 2022 bzw. EPLAN 2023 könnte man das Icon tauschen.
Danke für die Antwort. Die Icons zu Tauschen wäre auch mein Alternativplan gewesen.
Nochmal Moin,
ich habe mein Problem gelöst. Allerdings glaube ich, dass es besser geht.
Es wird das Schema der Artikeldatenbanken und der Verzeichnisse getauscht. Außerdem werden die Buttons “Temp” und “Standard” neu generiert und bekommen entsprechend der Einstellung ein neues Icon. Eigentlich wäre es einfacher, nur das Icon zu tauschen. Das habe ich aber nicht hinbekommen.
Das Skript gibt es mit der Funktion “Standard” nochmal.
Anbei der Code, falls es da Interesse gibt. Bitte beachten, dass ich ein völliger C#-Newbie bin und ich das Skript anpassen musste (Private Details etc.).
Ich bin für jede Kritik offen.
using Eplan.EplApi.Gui;
public class ScriptTemp
{
/* Zum Starten des Skript muss in EPlan "Temporaer" aufgerufen werden */
[DeclareAction("Temporaer")]
[Start]
public void ScriptTempSwitch()
{
/* Umschalten des Artikeldatenbank-Schemas auf TempDatenbank und des Verzeichnis-Schemas auf TempVerzeichnisse */
Settings Partssettings = new Settings();
Partssettings.SetStringSetting("USER.PartSelectionGui.DataSourceScheme.LastUsed","TempDatenbank",0);
Settings Pathsettings = new Settings();
Pathsettings.SetStringSetting("USER.ModalDialogs.PathsScheme.LastUsed","TempVerzeichnisse",0);
/*Auslesen, ob auch wirklich richtiges Artikeldatenbank-Schema und richtiges Verzeichnis-Schema eingestellt ist */
string ReadParts = Partssettings.GetStringSetting("USER.PartSelectionGui.DataSourceScheme.LastUsed",0);
string ReadPaths = Pathsettings.GetStringSetting("USER.ModalDialogs.PathsScheme.LastUsed",0);
/* Prüfung ob alles richtig eingestellt wurde und Name von Translate einkürzen */
uint Fehler = 0;
if (ReadParts == "TempDatenbank"){
} else {
ReadParts = "FEHLER!";
Fehler = 1;
}
if (ReadPaths == "TempVerzeichnisse"){
} else {
ReadPaths = "FEHLER!";
Fehler = 1;
}
/* Ausgabehinweis, dass nicht korrekt umgeschaltet wurde */
if (Fehler == 1){
MessageBox.Show("Artikeldatenbank: " + ReadParts + Environment.NewLine +
"Verzeichnisse: " + ReadPaths + Environment.NewLine,
"Fehler in den Einstellungen");
} else {
/* Dieser Teil schaltet das Icon von Temp auf Grün und von Standard auf Transparent
/* Prüfen, welches ColorScheme (Oberflächenhintergrund) eingestellt ist und entsprechend den Icon-Pfad auswählen (Weiß auf Weiß nicht sichtbar)*/
Settings colorScheme = new Settings();
int ColorSchemeSetting = colorScheme.GetNumericSetting("USER.MF.GuiColorScheme",0);
string imagePathStandard;
string imagePathTemp;
string TabName = "Stammdaten"; /*Tab, in dem die Buttons geaendert werden*/
string CommandGroupName = "Standard / Temp"; /*Befehlsgruppe, in der die Buttons geaendert werden*/
if (ColorSchemeSetting == 1){
imagePathStandard = @"C:\*PFAD*\s_white_transparent.svg"; /*Speicherpfad des Icons StandardDeaktiviert für DarkMode*/
imagePathTemp = @"C:\*PFAD*\t_white_green.svg"; /*Speicherpfad des Icons TempAktiviert für DarkMode*/
}else{
imagePathStandard = @"C:\*PFAD*\s_grey_transparent.svg"; /*Speicherpfad des Icons StandardDeaktiviert für LightMode*/
imagePathTemp = @"C:\*PFAD*\t_grey_green.svg"; /*Speicherpfad des Icons TempAktiviert für LightMode*/
}
/* Alten Standard-Button entfernen und S-Button "Standard" mit Deaktiviert-Icon generieren*/
string CommandNameStandard = "Standard"; /*Name des Buttons*/
string CommandActionStandard = "Standard"; /*Befehl, der ueber den Button ausgefuehrt wird*/
RibbonBar ribbonBarStandard = new Eplan.EplApi.Gui.RibbonBar();
RibbonCommandInfo ribbonCommandInfoStandard = new Eplan.EplApi.Gui.RibbonCommandInfo(CommandNameStandard, CommandActionStandard);
RibbonIcon ribbonIconStandard = ribbonBarStandard.AddIcon(imagePathStandard);
ribbonBarStandard.UnregisterCommand(CommandActionStandard,TabName,CommandGroupName); /*Loescht den Button, damit das Icon geaendert werden kann*/
ribbonBarStandard.RegisterCommand(ribbonCommandInfoStandard,ribbonIconStandard,TabName,CommandGroupName); /*Fuegt Button an der voreingestellten Stelle ein*/
/* Alten Temp-Button entfernen und T-Button "Temp" mit Akktiviert-Icon generieren*/
string CommandNameTemp = "Temp";
string CommandActionTemp = "Temporaer";
RibbonBar ribbonBarTemp = new Eplan.EplApi.Gui.RibbonBar();
RibbonCommandInfo ribbonCommandInfoTemp = new Eplan.EplApi.Gui.RibbonCommandInfo(CommandNameTemp, CommandActionTemp);
RibbonIcon ribbonIconTemp = ribbonBarTemp.AddIcon(imagePathTemp);
ribbonBarTemp.UnregisterCommand(CommandActionTemp,TabName,CommandGroupName); // neu
ribbonBarTemp.RegisterCommand(ribbonCommandInfoTemp,ribbonIconTemp,TabName,CommandGroupName);
}
}
}
Gruß Nicolas
Hallo Nicolas,
vielen Dank für dein Beispiel. Hab das hier mal ausprogrammiert mit Farbumschaltung:
https://suplanus.de/eplan-ribbon-icon-umschalten/
Recht viel “einfacher” ist es aber nicht :)
Hallo,
Gute Arbeit Johann Weiher,
Für die standardmäßigen eplan-Icons muss entweder das gleiche Prinzip für Dark Mode und Light Mode gelten? es ist nur eine idee
Herzlich
Das ist auch ein guter Anwendungsfall @Rodeo.
Siehe hier: https://suplanus.de/eplan-ribbon-icon-umschalten/
Somit könnte man abhängig von der Einstellung andere Icons laden (Zeile 18).
Hallo Johann,
Hast du vielleicht ein Beispiel für mich wie kann ich ein DropdownMenü erstellen beim Command
Leider nein, da hab ich nichts fertiges.
oder eine Action programmieren, welche ein Menü aufploppen lässt?
Ja, das wäre die Lösung.
hast du ein Beispiel ?
Wie geschrieben, leider nein.
Ist es möglich in eine eigene Symbolleiste die per API/Skript programmiert wird auch Standartbutton (z.B.: Navigatoren, Meldungsverwaltung, Verbindungssymbole…) von Eplan zu integrieren ohne diese über Actions und eigene Symbole nachzubauen?
Ziel ist es, ein Ribbon zu erstellen, wo alle häufig verwendeten Button und auch eigene Button/Actions zusammen dargestellt werden. Das ganze über API/Skript, nicht über Rechtsklick -> Menüband anpassen.
Vielen Dank schonmal :)
Leider ist es nicht möglich die Standardbuttons einzufügen.
Somit müsstest Du das nachbauen und eigene Icons verwenden.
Schade, ok danke für die Info
Hallo,
ich habe jetzt nun endlich auch meine Scripte aus V2.9 umgebaut. Allerdings habe ich zwei kleine Probleme.
Wie kann ich ein weiteres Script über die ribbon menüs ausführen? Ich habe es soweit, dass das gewünscht Menü angezeigt wird. Nur wie kann ich jetzt das Script aufsführen welches auch in dem Ordner liegt.
Außerdem habe ich Probleme mit den Umlauten. In V2.9 hat EPLAN diese noch vernünftig ausgeschrieben. In EPLAN 2023 kann er diese aber nicht mehr anzeigen. Was gibt es hier für ein Trick?
Ein Command im Ribbon funktioniert genauso wie ein Menüpunkt in 2.9. Es wird eine Action aufgerufen, hinter diese kann eine eigene stecken welche Du zuvor über “Script laden” geladen hast.
Bzgl. Umlaute kenne ich keine Probleme. Kannst Du mal deinen Codeschnipsel für die Ribbons hier bereitstellen?
Hier der entsprechende Auszug aus dem Skript.
private const string ACTION_NAME = “RibbonAction”;
private MultiLangString TAB_NAME
{
get
{
MultiLangString tabName = new MultiLangString();
tabName.AddString(ISOCode.Language.L_de_DE, “Menüleiste”);
tabName.AddString(ISOCode.Language.L_en_US, “action bar”);
return tabName;
}
}
[DeclareRegister]
public void Register()
{
RibbonBar ribbonBar = new RibbonBar();
RibbonTab ribbonTab = ribbonBar.GetTab(TAB_NAME, true);
if (ribbonTab == null)
{
ribbonTab = ribbonBar.AddTab(TAB_NAME);
}
RibbonCommandGroup ribbonCommandGroup1 = ribbonTab.AddCommandGroup(“Allgemein”);
RibbonIcon ribbonIcon1 = new RibbonIcon(CommandIcon.Accumulator);
ribbonCommandGroup1.AddCommand(“Projektpfad DOC öffnen”, “OeffneProjektpfad”, CommandIcon.Accumulator);
ribbonCommandGroup1.AddCommand(“Öffne Strombedarf”, “OeffneEnergiebedarf”, CommandIcon.Accumulator);
RibbonCommandGroup ribbonCommandGroup2 = ribbonTab.AddCommandGroup(“Export”);
RibbonIcon ribbonIcon2 = new RibbonIcon(CommandIcon.Accumulator);
ribbonCommandGroup2.AddCommand(“ProAlpha”, “ProAlphaExport”, CommandIcon.Accumulator);
}
[DeclareUnregister]
public void UnRegister()
{
RibbonBar ribbonBar = new RibbonBar();
RibbonTab ribbonTab = ribbonBar.GetTab(TAB_NAME, true);
if (ribbonTab != null)
{
ribbonTab.Remove();
}
}
Wie würde die Action aussehen wenn ich ein weiteres Script per Datei laden würden? Was ist hier der Befehl und die Syntax? Oder muss ich das separat erstellte Skript komplett in die Action reinkopieren? Würde das nämlich lieber mit separater Datei umsetzten damit es übersichtlicher bleibt.
Danke für die Unterstützung.
Umlaute:
Hier werden bei mir alle Ös angezeigt wie Sie sollen :)
using System.Windows.Forms;
using Eplan.EplApi.Base;
using Eplan.EplApi.Gui;
using Eplan.EplApi.Scripting;
class Example
{
private const string ACTION_NAME = "RibbonAction";
private MultiLangString TAB_NAME
{
get
{
MultiLangString tabName = new MultiLangString();
tabName.AddString(ISOCode.Language.L_de_DE, "Menüleiste");
tabName.AddString(ISOCode.Language.L_en_US, "action bar");
return tabName;
}
}
[DeclareRegister]
public void Register()
{
RibbonBar ribbonBar = new RibbonBar();
RibbonTab ribbonTab = ribbonBar.GetTab(TAB_NAME, true);
if (ribbonTab == null)
{
ribbonTab = ribbonBar.AddTab(TAB_NAME);
}
RibbonCommandGroup ribbonCommandGroup1 = ribbonTab.AddCommandGroup("Allgemein");
RibbonIcon ribbonIcon1 = new RibbonIcon(CommandIcon.Accumulator);
ribbonCommandGroup1.AddCommand("Projektpfad DOC öffnen", "OeffneProjektpfad", CommandIcon.Accumulator);
ribbonCommandGroup1.AddCommand("Öffne Strombedarf", "OeffneEnergiebedarf", CommandIcon.Accumulator);
RibbonCommandGroup ribbonCommandGroup2 = ribbonTab.AddCommandGroup("Export");
RibbonIcon ribbonIcon2 = new RibbonIcon(CommandIcon.Accumulator);
ribbonCommandGroup2.AddCommand("ProAlpha", "ProAlphaExport", CommandIcon.Accumulator);
}
[DeclareUnregister]
public void UnRegister()
{
RibbonBar ribbonBar = new RibbonBar();
RibbonTab ribbonTab = ribbonBar.GetTab(TAB_NAME, true);
if (ribbonTab != null)
{
ribbonTab.Remove();
}
}
[DeclareAction(ACTION_NAME)]
public void Function()
{
MessageBox.Show("Action wurde ausgeführt!");
}
}
Eigene Action aufrufen:
In meinem Beispiel im Beitrag wird die Action “RibbonAction” aufgerufen. Diese kann auch in einer eigenen Datei stehen, siehe hier:
https://eep8a.de/v3/scripts/01_Erste_Schritte/#02-declareaction
Ich hoffe der Eintrag ist jetzt nicht doppelt.
Aber leider funktioniert es auch mit deinem Script bei mir nicht.
Ich nutze EPLan 2023 Update 1 könnte es damit evtl. was zu tun haben?
Wie kann es denn den Dateipfad eingeben um über das oben stehende Skript ein anderes Skript auszufähren?
Stehe ein bisschen auf dem Schlauch. Das Kommando dafür ist mir noch nicht klar.
[DeclareAction(“ProAlphaExport”)]
public void MyFunctionAsAction3()
{
???
MessageBox.Show(“Skript gestartet!”);
}
Hier wird als zweiter Parameter angegeben welche Action ausgeführt werden soll:
ribbonCommandGroup2.AddCommand(“ProAlpha”, “ProAlphaExport”, CommandIcon.Accumulator);
Im Beispiel von mir ist diese Action nicht in der Datei. Muss Sie auch nicht wenn Du Sie in einer anderen Datei hast und das Script auch geladen hast.
Ja soweit ist mir da glaub ich klar.
Nur wie ist der Befehl um das Skript dann auszuführen? Unabhängig von der Ribbonbar?
Ich habe hier nur Registerscript gefunden. Hier wird aber glaube ich nur ein Skript geladen nicht ausgeführt. Irgendwie muss man ja noch den Pfad angeben.
Denke Du musst dich erstmal mit den Grundlagen im Scripting auseinandersetzen um zu verstehen was Declare / Start / RegisterScript macht…
Ok.. Danke dir trotzdem für die Unterstützung und die guten Beispiele.
Beispiel für ein Menü im Menüband hab ich hier erstellt:
https://suplanus.de/popupmenu/
Ich mache einen neues Ribbon für einem Standardbefehl, der ein Icon(SVG) hat.
Den Befehl fürge ich alction ein.
WIe kann ich das SVG des Befehls, den nun als Action nutze, abrufen?
Grüße, Ralph
Es gibt ein Property am RibbonCommand Objekt. Aber man kann es nur lesen, nicht schreiben.
Beispiel: ribbonCommandGroupRevision.AddCommand(“Revision erzeugen”, “XRevLogCreateRevisionAction”, “Revison erzeugen”,” Erzeugt eine Revison des aktiven Projektes”, Wasrufeichhierauf); // um dann das Standardicon von EPLAN zu erhalten? Danke vielemals, Ralph
Es gibt leider keinen Weg das Standard-Icon von EPLAN zu bekommen. Bitte hier den Wunsch an EPLAN richten (hab ich auch schon gemacht).
Moin, wir benutzen auch das Menüscript, dies erleichtert uns die Arbeit. Wir haben es mit in unser Artikeldatenbankumschaltungs-Script seit der Version 2023 kombiniert.
Das aktualisieren des Artikelstammdaten-Navigators klappt mit der Version 2023 nicht mehr. In der Version 2.9 ging dies noch wunderbar.
Nachdem Umschalten der Datenbank braucht EPLAN nochmal einen schubs, um die Daten der geänderten Datenbank im Artikelstammdaten-Navigator anzuzeigen.
Ich bin leider nicht sehr erfahren was das Programmieren angeht. Vielleicht hast du ja mal Lust und Zeit drüber zu schauen.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
// ====
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Gui;
using Eplan.EplApi.Scripting;
using System.Windows.Forms;
// ====
namespace ADB_umschalten
{
class ArtikelSchema
{
[DeclareAction(“myArtikelSchemaSQL_GEPA”)]
public void myArtikelSchema1()
{
string sSchema = “SQL_GEPA”;
Settings oSetting = new Settings();
//USER.PartSelectionGui.DataSourceScheme.LastUsed “SQL_GEPA”
oSetting.SetStringSetting(“USER.PartSelectionGui.DataSourceScheme.LastUsed”, sSchema, 0);
//Artikelstammdatennavigator refreshen
new CommandLineInterpreter().Execute(“GfDlgMgrActionReload /DialogName:XPabPrjDataDialog”);
//Meldung in die Systemmeldung schreiben
BaseException bexAssert = new BaseException(“Artikelverwaltung auf Schema ” + sSchema + ” geändert”, MessageLevel.Message);
bexAssert.FixMessage();
return;
}
[DeclareAction(“myArtikelSchemaSQL_EPLAN_2023”)]
public void myArtikelSchema2()
{
string sSchema = “SQL_EPLAN_2023”;
Settings oSetting = new Settings();
//USER.PartSelectionGui.DataSourceScheme.LastUsed “SQL_EPLAN_2023”
oSetting.SetStringSetting(“USER.PartSelectionGui.DataSourceScheme.LastUsed”, sSchema, 0);
//Artikelstammdatennavigator refreshen
new CommandLineInterpreter().Execute(“GfDlgMgrActionReload /DialogName:XPabPrjDataDialog”);
//Meldung in die Systemmeldung schreiben
BaseException bexAssert = new BaseException(“Artikelverwaltung auf Schema ” + sSchema + ” geändert”, MessageLevel.Message);
bexAssert.FixMessage();
return;
}
[DeclareAction(“myArtikelSchemaSQL_EPLAN_22”)]
public void myArtikelSchema3()
{
string sSchema = “SQL_EPLAN_22”;
Settings oSetting = new Settings();
//USER.PartSelectionGui.DataSourceScheme.LastUsed “SQL_EPLAN_22”
oSetting.SetStringSetting(“USER.PartSelectionGui.DataSourceScheme.LastUsed”, sSchema, 0);
//Artikelstammdatennavigator refreshen
new CommandLineInterpreter().Execute(“GfDlgMgrActionReload /DialogName:XPabPrjDataDialog”);
//Meldung in die Systemmeldung schreiben
BaseException bexAssert = new BaseException(“Artikelverwaltung auf Schema ” + sSchema + ” geändert”, MessageLevel.Message);
bexAssert.FixMessage();
return;
}
[DeclareAction(“myArtikelSchemaSQL_DATAPORTAL”)]
public void myArtikelSchema4()
{
string sSchema = “SQL_DATAPORTAL”;
Settings oSetting = new Settings();
//USER.PartSelectionGui.DataSourceScheme.LastUsed “SQL_DATAPORTAL”
oSetting.SetStringSetting(“USER.PartSelectionGui.DataSourceScheme.LastUsed”, sSchema, 0);
//Artikelstammdatennavigator refreshen
new CommandLineInterpreter().Execute(“GfDlgMgrActionReload /DialogName:XPabPrjDataDialog”);
//Meldung in die Systemmeldung schreiben
BaseException bexAssert = new BaseException(“Artikelverwaltung auf Schema ” + sSchema + ” geändert”, MessageLevel.Message);
bexAssert.FixMessage();
return;
}
private const string ACTION_NAME = “RibbonAction”;
private MultiLangString TAB_NAME
{
get
{
MultiLangString tabName = new MultiLangString();
tabName.AddString(ISOCode.Language.L_de_DE, “HPS”);
tabName.AddString(ISOCode.Language.L_en_US, “HPS”);
return tabName;
}
}
[DeclareRegister]
public void Register()
{
RibbonBar ribbonBar = new RibbonBar();
RibbonTab ribbonTab = ribbonBar.GetTab(TAB_NAME, true);
if (ribbonTab == null)
{
ribbonTab = ribbonBar.AddTab(TAB_NAME);
}
// Simple
RibbonCommandGroup ribbonCommandGroup1 = ribbonTab.AddCommandGroup(“Artikeldatenbank umschalten”);
RibbonIcon ribbonIcon1 = new RibbonIcon(CommandIcon.Rectangle_G);
ribbonCommandGroup1.AddCommand(“Artikelverwaltung auf ‘GEPA’ ändern”, “myArtikelSchemaSQL_GEPA”, ribbonIcon1);
RibbonIcon ribbonIcon2 = new RibbonIcon(CommandIcon.Rectangle_H);
ribbonCommandGroup1.AddCommand(“Artikelverwaltung auf ‘HPS 2023’ ändern”, “myArtikelSchemaSQL_EPLAN_2023”, ribbonIcon2);
RibbonIcon ribbonIcon3 = new RibbonIcon(CommandIcon.Rectangle_2);
ribbonCommandGroup1.AddCommand(“Artikelverwaltung auf ‘HPS 2.2’ ändern”, “myArtikelSchemaSQL_EPLAN_22”, ribbonIcon3);
RibbonIcon ribbonIcon4 = new RibbonIcon(CommandIcon.Eplan);
ribbonCommandGroup1.AddCommand(“Artikelverwaltung auf ‘HPS Dataportal’ ändern”, “myArtikelSchemaSQL_DATAPORTAL”, ribbonIcon4);
}
[DeclareUnregister]
public void UnRegister()
{
RibbonBar ribbonBar = new RibbonBar();
RibbonTab ribbonTab = ribbonBar.GetTab(TAB_NAME, true);
if (ribbonTab != null)
{
ribbonTab.Remove();
}
}
[DeclareAction(ACTION_NAME)]
public void Function()
{
MessageBox.Show(“Action wurde ausgeführt!”);
}
}
}
Hi Johann, I hope you’re doing great.
A few questions here, as these are my first steps in developing for 2023 (I was still doing 2.9 API only until now):
1. It used to be that one added menus in the “OnInitGui” method. Now it seems it should be done in the “OnRegister” method. Is that optional, or is that a strict requirement? If it is a strict requirement, what is the OnInitGui method used for now?
2. In your examples, and also the examples in the API help, you remove the custom tabs in the “OnUnregister” method. Is that also a strict requirement? What happens if you don’t remove the custom tabs? Will they persist across user sessions?
Thank you
1. There are situation where the Ribbons not loaded correctly. OnInitGui can used for different things when you want to load something if the GUI is fully loaded (also the ribbon)
2. If the ribbons not removed correctly it will be in the workspace. They are also in the export and import files (XML).
I have two questions if qnyone know
1. Is it possible to get a bigger button icon on the ribbon that you create?
2. Is it possible to create a dropdownbottun on the ribbon?
I’m interested to see if anyone have a solution or know anything regaring this issues
BR Daniel
1. It is not possible via script or API
2. Yes. Look here: https://suplanus.de/popupmenu/
OK, Thanks Johan, will look into the script PopUp and se if I can make it work the way I want.
BR Daniel
Hallo Johann,
do you know if its possible to check either a RibbonTab is empty or not (any remaining Command Groups)?
BR Sten
Yes. You can check it in the Groups of the Tab:
https://www.eplan.help/en-US/Infoportal/content/api/2025/Eplan.EplApi.Guiu~Eplan.EplApi.Gui.RibbonTab~CommandGroups.html
Thanks for the input Johann.
Helped me to remove tabs after the last command group has been deleted.