Skript

EplApiReferenceAction

EPLAN lädt DLLs via Reflections nach. Hierfür wird in bekannten Verzeichnissen nach den Dateien gesucht. Wird aber z.B. eine Resource-Datei nicht gefunden, kann es zu Fehlern kommen. Einen Workaround habe ich hier beschrieben.

Vom grandiosen EPLAN API Support habe ich nun eine Info über eine interne Action bekommen, mit der man angeben kann in welchen Verzeichnissen zusätzlich gesucht werden soll.

Somit kann man bei Register / Unregister zusätzliche Verzeichnisse angeben, in denen sich z.B. die Resource-Dateien befinden. Die Action gibt es schon immer in EPLAN und ist somit an keine Version gebunden.

Action

EplApiReferenceAction
When a reference cannot found, add a path for it and it will searched also.

Parameter

  • register Full file name of the assembly to be used as reference
  • unregister Full file name of the assembly to be unregistered
Von |2022-08-26T08:45:17+02:002022-08-26|EPLAN, EPLAN-API|

Buch – EPLAN Electric P8 automatisieren – 3. Auflage

Es ist wieder so weit… Nachdem die zweite Auflage ausverkauft ist, durfte ich mich wieder ans Schreiben machen.
Mir war wichtig EPLAN 2022 aufzunehmen, da sich hier im Userinterface viel geändert hat. Somit alle Screenshots neu.

Es ist jedesmal viel Arbeit, aber es macht mich stolz einen Beitrag für die Community zu leisten 💖
Alle Scripte zum Buch findet ihr wie gewohnt auf eep8a.de.

Hier der Changelog die Änderungen im Überblick:

  • Screenshots und Beschreibung
    • EPLAN 2022
    • Windows 11
    • Visual Studio 2022
  • Ribbons erzeugen
  • Artikeldaten lesen und schreiben
  • ActionCallingContext als Parameter
  • uvm.

Somit auch wieder neuer Inhalt für Käufer der ersten und / oder der zweiten Ausgabe.
Eine Leseprobe findet Ihr hier.

Wie gewohnt könnt Ihr das Buch hier kaufen.
Freue mich sehr über eure Rückmeldungen!

Von |2022-06-07T07:21:10+02:002022-06-07|EPLAN, EPLAN-Scripts|

EPLAN Ribbon erstellen

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:

 

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!");
  }
}
Von |2021-12-07T09:05:07+01:002021-12-04|EPLAN, EPLAN-Scripts|

Eplan.EplApi.MasterData in Scripting verfügbar

Ein kleiner Schritt in der EPLAN Versionsnummer, ein großer Schritt im Scripting. Ab Version EPLAN 2022 Update 1 ist es nun möglich auf fast alle Klassen in Eplan.EplApi.MasterData im Scripting zuzugreifen. Ausnahmen (inkl. Unterklassen):

  • MDSymbolLibrary
  • MDSymbolLibraryPropertyList
  • MDSymbol
  • MDSymbolPropertyList
  • MDSymbolVariant
  • MDTranslationDatabase

EPLAN hat dem Thema auch ein kleines Kapitel in der Hilfe gewidmet.

Von |2021-11-24T14:15:53+01:002021-11-24|EPLAN, EPLAN-Scripts|

WPF API-Addins mit Übersetzungen

Einige unserer Produkte sind auch mehrsprachig. Einige API-Addins besitzen eine GUI mit WPF, welche die Übersetzungen aus einer Resource-Datei in einer referenzierten Assembly laden.

 

Leider gibt es beim Öffnen des Windows dann folgenden Fehler:

The file or assembly LocalizationExample.Translations, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null or a dependency of it was not found.
Assembly loader: LocalizationExample.Translations, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null not found
The file or assembly LocalizationExample.Translations, PublicKeyToken=null or a dependency of it was not found.
Assembly loader: LocalizationExample.Translations, PublicKeyToken=null not found
The LocalizationExampleAction action with the /_cmdline:LocalizationExampleAction parameters of the LocalizationExample.EplAddIn.Gui module has failed. Could not load file or assembly 'LocalizationExample.Translations, PublicKeyToken=null' or one of its dependencies. Das System kann die angegebene Datei nicht finden.

 

Ich habe mir mit Fusion++ mal angesehen, was nicht geladen wurde:

LOG: Attempting download of new URL file:///C:/Users/moz/AppData/Roaming/EPLAN/ShadowCopyAssemblies/8980/LocalizationExample.EplAddIn.Gui/bin/en-US/LocalizationExample.EplAddIn.Gui.resources.DLL.
LOG: Attempting download of new URL file:///C:/Users/moz/AppData/Roaming/EPLAN/ShadowCopyAssemblies/8980/LocalizationExample.EplAddIn.Gui/bin/en-US/LocalizationExample.EplAddIn.Gui.resources/LocalizationExample.EplAddIn.Gui.resources.DLL.
LOG: Attempting download of new URL file:///C:/Users/moz/AppData/Roaming/EPLAN/ShadowCopyAssemblies/8980/LocalizationExample.EplAddIn.Gui/bin/en-US/LocalizationExample.EplAddIn.Gui.resources.EXE.
LOG: Attempting download of new URL file:///C:/Users/moz/AppData/Roaming/EPLAN/ShadowCopyAssemblies/8980/LocalizationExample.EplAddIn.Gui/bin/en-US/LocalizationExample.EplAddIn.Gui.resources/LocalizationExample.EplAddIn.Gui.resources.EXE.

 

Der Assembly-Loader sucht nach der falschen Datei… mhh, komisch. Denn der Zugriff außerhalb von WPF, sprich im C# Code, funktioniert ohne Probleme.
Meine Vermutung, dass WPF die Resource-Datei nicht findet hat sich betätigt. Darum greife ich nun BEVOR ich ein WPF-Control erstelle, einmal auf die Assembly zu.

Hab das die Lösung auf GitHub mit einem Beispielprojekt dokumentiert.

Von |2021-09-16T08:38:57+02:002021-09-16|EPLAN, EPLAN-API|
Nach oben