Skript

GetProjectLanguages

Hatte das Script schon länger hier, aber irgendwie vergessen zu posten.

Aufgrund dieses Beitrages wurde ich daran erinnert :)

Die Funktion um Projekt-Sprachen zu erhalten war im MultiLanguageTool von EPLAN enthalten (freie API). Diese wurde aber nicht mehr entwickelt und ein Teil kam als offizielle Action… leider nicht die Projektsprachen.

/* Usage
    private static string GetProjectLanguages()
    {
        string value = null;
        ActionCallingContext actionCallingContext = new ActionCallingContext();
        new CommandLineInterpreter().Execute("GetProjectLanguages", actionCallingContext);
        actionCallingContext.GetParameter("value", ref value);
        return value;
    }
*/

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

namespace EplanScriptingProjectBySuplanus.GetProjectLanguages
{
    public class GetProjectLanguages
    {
        private readonly string TempPath = Path.Combine(
            PathMap.SubstitutePath("$(TMP)"), "GetProjectLanguages.xml");

        [DeclareAction("GetProjectLanguages")]
        public void Action(out string value)
        {
            ActionCallingContext actionCallingContext = new ActionCallingContext();
            actionCallingContext.AddParameter("prj", FullProjectPath());
            actionCallingContext.AddParameter("node", "TRANSLATEGUI");
            actionCallingContext.AddParameter("XMLFile", TempPath);
            new CommandLineInterpreter().Execute("XSettingsExport", actionCallingContext);

            if (File.Exists(TempPath))
            {
                string languagesString = GetValueSettingsXml(TempPath,
                    "/Settings/CAT/MOD/Setting[@name='TRANSLATE_LANGUAGES']/Val");

                if (languagesString != null)
                {
                    List<string> languages = languagesString.Split(';').ToList();
                    languages = languages.Where(obj => !obj.Equals("")).ToList();

                    StringBuilder stringBuilder = new StringBuilder();
                    for (int i = 0; i < languages.Count; i++)
                    {
                        var language = languages[i];
                        stringBuilder.Append(language);

                        // not last one
                        if (i != languages.Count - 1)
                        {
                            stringBuilder.Append("|");
                        }
                    }

                    // returns list: "de_DE|en_EN"
                    value = stringBuilder.ToString();
                    return;
                }
            }

            value = null;
            return;
        }

        // Returns the EPLAN Project Path
        private static string FullProjectPath()
        {
            ActionCallingContext acc = new ActionCallingContext();
            acc.AddParameter("TYPE", "PROJECT");

            string projectPath = string.Empty;
            new CommandLineInterpreter().Execute("selectionset", acc);
            acc.GetParameter("PROJECT", ref projectPath);

            return projectPath;
        }

        // Read EPLAN XML-ProjectInfo and returns the value
        private static string GetValueSettingsXml(string filename, string url)
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(filename);

            XmlNodeList rankListSchemaName = xmlDocument.SelectNodes(url);
            if (rankListSchemaName != null && rankListSchemaName.Count > 0)
            {
                // Get Text from MultiLanguage or not :)
                string value = rankListSchemaName[0].InnerText;
                return value;
            }
            else
            {
                return null;
            }
        }
    }
}

Download auf GitHub

Von |2018-08-17T12:29:57+02:002015-08-03|EPLAN, EPLAN-Scripts|

Postbuild Befehlszeile ApiAddin

Ich muss selber immer nachschauen oder kopier mir es, darum schreib ich es hier mal auf :^)

Bei einem EPLAN ApiAddin ist es praktisch wenn die fertige DLL gleich ins Zielverzeichnis kopiert wird. In Visual Studio kann man das per Postbuild-Befehlszeile automatisieren:

COPY /Y "$(TargetDir)$(ProjectName).dll" "C:\Program Files (x86)\EPLAN\Platform\2.4.4\Bin\$(ProjectName).dll"

2015-04-28_09-46-33

Kurz zur Erklärung:

  • /Y: Unterdrückt die Bestätigungsaufforderung vor dem Überschreiben vorhandener Zieldateien.
  • $(TargetDir): Eingestellte Ausgabeverzeichnis
  • $(ProjectName): Projektname (sollte dem der DLL entsprechen)
Von |2017-11-09T11:24:11+01:002015-04-28|EPLAN, EPLAN-API|

Automatischer Action-Name ApiAddin

Da ich derzeit viel mit der EPLAN-API machen darf, hab ich mir mal Gedanken gemacht wie man das ewige Action deklarieren automatisieren kann.

Die Deklaration funktioniert ein bisschen anders als im Scripting und somit kann man auch auf die Methoden- / bzw. Klassennamen zugreifen.

Mit dieser Lösung wird immer der Klassenname als Action-Name verwendet, was für mich immer zutreffend ist.
In diesem Beispiel wäre der Action-Name MyAction:

using Eplan.EplApi.ApplicationFramework;
using System;
using System.Reflection;

namespace Suplanus.EplAddin.Examples
{
    class MyAction : IEplAction
    {
        public bool OnRegister(ref string Name, ref int Ordinal)
        {
            Name = MethodBase.GetCurrentMethod().DeclaringType.Name; // Get name from class
            Ordinal = 20;
            return true;
        }

        public bool Execute(ActionCallingContext oActionCallingContext)
        {
            throw new NotImplementedException();
        }

        public void GetActionProperties(ref ActionProperties actionProperties)
        {
            throw new NotImplementedException();
        }
    }
}
Von |2017-11-09T11:24:17+01:002015-04-14|EPLAN, EPLAN-API|

Eigenschaftsanordnungsprojekt

Als EPLAN-Admin kennt man wohl die mühselige Arbeit alle Eigenschaftsanordnungen auf einen Standard zu bringen. Es ist sehr zeitintensiv und schwer zu organisieren. Hier kann ich jedem empfehlen es in einem eigenen Projekt zu machen und die Eigenschaftsanordnungen zu Im-/Exportieren über Projekt>Organisieren.

Eigenschaftsanordnungen-exportieren

Wenn man alle EPLAN-Symbole in allen Varianten platzieren möchte benötigt man dafür sehr viel Zeit. Ich habe es kurz mal gebenchmarked:

  • Symbolbibliotheken: 22
  • Symbole: 11590
  • Varianten: 87548

Bei manueller Platzierung wären es 251h vorausgesetzt man hat einen schnellen Rechner und arbeitet lokal. Wir haben ein Projekt vorbereitet welches alle Symbole in allen Varianten beinhaltet. Die Projekt-Struktur ist identisch mit der unter Einfügen>Symbol. Somit findet man sich schnell zurecht.

EPLAN-Projekt-Eigenschaftsanordnungen-Deutsch-2-3

Folgende Symbolbibliotheken wurden platziert:

  • BaseSymbolLibrary
  • CCL1ESS
  • GB_single_symbol
  • GB_symbol
  • GOST_single_symbol
  • GOST_symbol
  • GRAPHICS
  • HVAC_ESS
  • HYD1ESS
  • HYD2ESS
  • IEC_ED_ESS
  • IEC_SC_ESS
  • IEC_single_symbol
  • IEC_symbol
  • LUB1ESS
  • NFPA_single_symbol
  • NFPA_symbol
  • OS_SYM_ESS
  • PID_ESS
  • PNE1ESS
  • PPE_SYM SPECIAL

EPLAN-Projekt-Eigenschaftsanordnungen-Deutsch-2-3-Motorschutz

 

Pro Symbol und Variante wird eine eigene Eigenschaftsanordnung erstellt. Der Name ist Customer_A (wobei “A” die Variante darstellt). Gerne können wir auch z.B. euer Firmenkürzel voranstellen. Somit ist sogar dieser Aufwand minimiert einen Namen zu wählen.

2015-03-10_13-52-27

Das Projekt gibt es in Deutsch & Englisch in Version 2.3 & 2.4. Auf Anfrage erstellen wir gerne auch das Projekt in einer anderen Sprache bzw. Version. Im Artikel findet Ihr auch Beispiel-PDFs der Projekte:

Von |2016-01-11T14:35:18+01:002015-03-12|EPLAN, ShopForProcess|
Nach oben