Quantcast
Channel: Suplanus
Viewing all 240 articles
Browse latest View live

EPLAN API: Masterdata

$
0
0

Nochmals ein tolles API-Beispiel von Fritz, vielen Dank.

Arbeiten mit Formularen ist (mit dem Helper) nicht schwer!

using System.Collections.Specialized;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.HEServices;

namespace Suplanus.Sepla.Helper
{
	public class MasterdataUtility
	{
		bool IsFormInProject(Project project, string formName)
		{
			return new Masterdata().get_ProjectEntries(project).Contains(formName);
		}

		bool IsFormInSystem(string formName)
		{
			return new Masterdata().SystemEntries.Contains(formName);
		}

		bool AddFormToProject(Project project, string formName)
		{
			Masterdata masterdata = new Masterdata();
			StringCollection newForms = new StringCollection();
			StringCollection projectForms = masterdata.get_ProjectEntries(project);

			if (!IsFormInSystem(formName))
			{
				return false;
			}

			if (!projectForms.Contains(formName))
			{				
				newForms.Add(formName);
				masterdata.AddToProjectEx(project, newForms);
			}
			return true;
		}
	}
}


EPLAN API: DisplayLanguages

$
0
0

Ich hab mir mal ne kleine API Methode um die Anzeigesprachen zu bekommen:

public static StringCollection DisplayLanguages()
{
	using (new LockingStep())
	{
		var project = ProjectUtility.GetCurrentProject();
		ProjectSettings projectSettings = new ProjectSettings(project);
		var displayLanguagesString = projectSettings.GetStringSetting("TRANSLATEGUI.DISPLAYED_LANGUAGES", 0);

		var languages = new StringCollection();
		var displaylanguages = displayLanguagesString.Split(';')
			.Where(s => !string.IsNullOrWhiteSpace(s)).Distinct().ToArray(); // remove empty
		languages.AddRange(displaylanguages);

		return languages;
	}
}

Habe mich hier für ne StringCollection entschieden, da man diese oft in der API braucht (z.B. Fehlwortliste exportieren).

EPLAN API: UserDefinedPropertyDefinition

$
0
0

Die benutzerdefinierten Eigenschaften… die Idee von EPLAN war gut, aber die Umsetzung ist in meinen Augen nicht optimal.

Nichts desto Trotz müssen wir damit leben und das auch in der API. Es ist nicht ganz so einfach wie mit den „normalen“ Eigenschaften.

Ich hab hier mal paar Methoden geschrieben um (Projekt-) Eigenschaften zu Lesen/Schreiben:

using System;
using System.Linq;
using Eplan.EplApi.Base;
using Eplan.EplApi.DataModel;

namespace Suplanus.Sepla.Helper
{
	public class UserDefiniedPropertyUtility
	{
		public static PropertyValue GetProjectPropertyValueAndCheckIfEmpty(Project project, string identName)
		{
			PropertyValue propertyValue = GetProjectPropertyValue(project, identName);
			if (propertyValue.IsEmpty)
			{
				return null;
			}
			return propertyValue;
		}

		public static PropertyValue GetProjectPropertyValue(Project project, string identName)
		{
			UserDefinedPropertyDefinition userDefProp = project.Properties.ExistingIds
				.Select(anyPropertyId => anyPropertyId.Definition)
				.OfType<UserDefinedPropertyDefinition>()
				.FirstOrDefault(obj => obj.IdentifyingName.Equals(identName));
			if (userDefProp != null)
			{
				AnyPropertyId anyPropertyId = userDefProp.Id;
				PropertyValue propertyValue = project.Properties[anyPropertyId];
				return propertyValue;
			}
			return null;
		}

		public static void SetProjectPropertyValue(Project project, string identName, object value)
		{
			PropertyValue propertyValue = GetProjectPropertyValue(project, identName);
			if (propertyValue != null)
			{
				if (value is bool)
				{
					propertyValue.Set((bool)value);
					return;
				}
				if (value is double)
				{
					propertyValue.Set((double)value);
					return;
				}
				if (value is MultiLangString)
				{
					propertyValue.Set((MultiLangString)value);
					return;
				}
				if (value is PointD)
				{
					propertyValue.Set((PointD)value);
					return;
				}
				if (value is int)
				{
					propertyValue.Set((int)value);
					return;
				}
				if (value is string)
				{
					propertyValue.Set((string)value);
					return;
				}
				if (value is DateTime)
				{
					propertyValue.Set((DateTime)value);
					return;
				}

				throw new Exception("Type not supported");
			}
			throw new Exception("Property not found");
		}
	}
}

 

EPLAN-API: Showcase 2016 März

$
0
0

Bei der Version 2.4 sind in EPLAN benutzerdefinierte Eigenschaften hinzugekommen.
Erst habe ich mich gefreut. Leider gibt es mit diesen Eigenschaften viele Probleme. Übernimmt man z.B. aus einer alten Versionen einen Schaltplan, hat man keine Möglichkeit mehr den Namen zu ändern.

Darum habe ich mir eine kleine API-Erweiterung geschrieben welche eine Übernahme über eine Mapping-Tabelle macht.
Man kann festlegen welche Eigenschaft zu welcher konvertiert werden soll.

Es kann auch angegeben werden ob Werte nach der Konvertierung gelöscht werden sollen oder nicht.

 

SetUserDefProp

EPLAN 2.6: Scripting Neuerungen

$
0
0

Die Betaversion für EPLAN 2.6 ist nun verfügbar und ich schreibe hier mal was ich bzgl. Scripting aus den News und der Hilfe lesen konnte.

Die Actions

CreateTopologyFunctions
 und RouteTopology wurden in die Action Topology verschoben.

 

Folgende Actions sind nun (offiziell) hinzugekommen:

Action

Beschreibung

GenerateMacros

Erzeugt Makros aus einem Projekt.

SwitchProjectType

Schaltet die Eigenschaft „Art des Projekts“ um.

Topology

Verlegt Topologie-Verbindungen oder erzeugt Topologie-Funktionen.

XEsUserPropertiesExportAction

Exportiert benutzerdefinierte Eigenschaften in eine Datei.

XEsUserPropertiesImportAction

Importiert benutzerdefinierte Eigenschaften aus einer Datei.

XPamsDeviceSelectionAction

Führt eine Geräteauswahl durch oder aktualisiert Gerätedaten.

XPrjActionUpgradeProjects

Aktualisiert ein oder mehrere Projekte auf das aktuelle Datenbankschema.

XSettingsExport

Exportiert Benutzer-, Stations- oder Firmeneinstellungen.

 

Die Action

projectmanagement
 wurde erweitert um folgende Funktionen:

Projekt Korrigieren

/TYPE:CORRECTPROJECTITEMS
/SCHEME:"My scheme"

 

Projekt reorganisieren

/TYPE:REORGANIZE
/EXTENDEDMODE:1

Pfadvariablen Update 2.6

$
0
0

Es sind wieder neue Pfadvariablen dazugekommen, Ihr findet findet die Daten hier:

EPLAN_Pfadvariablen

 

Neuerungen

  • $(EPLAN_EXECUTABLE): Pfad zur EPLAN.exe
  • $(EPLAN_VARIANT): Name der gestarteten Produktvariante
  • $(EPLAN_VERSION): Versionsnummer
  • $(EPLAN_VERSION_SHORT): Hauptversionsnummer
  • $(RIGHTS_DB_PATH): Pfad zur Rechtedatenbank

Dash & Zeal offline Dokumentation

$
0
0

„Programmierer schreiben nur den ganzen Tag Code“… das höre ich oft, aber eigentlich lesen wir Dokumentation und im schlimmsten Fall kopieren wir einfach von StackOverflow.

Beider erleichtert mir seit kurzem ein Tool namens Dash für den Mac. Für Windows & Linux gibt es etwas ähnliches namens Zeal (OpenSource).

Ich kann leider nur von Dash berichten… und kann sagen dass es sehr angenehm ist damit zu arbeiten.

Schaut euch die Tools mal an, auch Dash kann man kostenlos testen.

Dash

Visual Studio Toolchain 2016 April

$
0
0

Ich schaue gerne Entwicklern bei der Arbeit zu :^)
… denn man sieht oftmals Workflows oder auch Tools welche man nie vermisst hat, aber welche viel Arbeit ersparen würden…

Darum hab ich mir gedacht, ich schreib einfach mal was ich so mit Visual Studio an Tools verwende… Vielleicht ist etwas für euch dabei.

  • ReSharper (kostenpflichtig): Glaube ohne den ReSharper könnte ich gar nicht mehr programmieren, schaut euch die tollen Features mal an.
  • Supercharger: Ganz neu bei mir im Einsatz, nutze gerne die CodeMap und die Farbgestaltung im Editor
  • ResXManager: Nimmt sehr viel Arbeit bei der Übersetzung von Projekt ab
  • Editor Guidelines: Zeigt mir dass ich nicht so lange Zeilen schreiben soll, damit es auf Suplanus schön lesbar ist
  • XAML Styler: Formatiert den XAML Code von WPF

EPLAN-API: Showcase 2016 April

$
0
0

Wir haben eine sehr nützliche API-Erweiterung geschrieben, welche es erlaubt Bilder im Makroprojekt zu organisieren.
Das Bild wird automatisch auf Dateiebene zum Makro gespeichert. Zusätzlich wird am Artikel der Bilderpfad eingetragen.

Ob auch alles seine Richtigkeit hat, kann über den Prüflauf kontrolliert werden.

EPLAN Lizenzen überprüfen

$
0
0

Manchmal muss man prüfen welche Lizenz gerade läuft. Das geht per API und Scripting wie folgt:

License license = new License();
LicenseOptions licenseOptions = LicenseOptions.APIExtension;
if (license.HasOption(licenseOptions))
{
   // do some API things
}

EPLAN Datenbanken: Zugriff über Entity Framework

$
0
0

Ich hatte eine Kundenanforderung, schnell und einfach Daten aus den Datenbanken von EPLAN zu lesen.

Dank des Entity Frameworks geht das recht schön. Ich hab die Datenbanken (Artikeldatenbank, Projektverwaltung, Übersetzung) in Projekte gepackt und auf Github geladen. Einfach die richtigen Serverdaten eintragen und sollte laufen :^)

Stand ist EPLAN 2.5

GitHub: Suplanus.Eplan.Database

Artikeldatenbank

EntityDesignerDiagram_Parts

 

Projektverwaltungsdatenbank

EntityDesignerDiagram_Project

 

Übersetzungsdatenbank

EntityDesignerDiagram_Translation

Schemata einlesen

$
0
0

Ich habe im Scripting eigentlich immer Schemata per 

new Settings().ReadSettings(Scheme)
 eingelesen…

Aber es gibt auch den Weg über SchemeSetting, wobei man hier genau steuern kann ob ein Schemata überschrieben werden soll:

var schemeFile = @"\\Mac\Home\Desktop\PXex.Test.xml";

SchemeSetting schemeSetting = new SchemeSetting();
schemeSetting.Init("USER.MacrosGui.PXF.Export.Schemes");
schemeSetting.ImportSchemes(schemeFile, true); // overwrite

Die Klasse gibt noch einiges her, so auch das setzen von einzelnen Filtereigenschaften…

HTTPS für Suplanus und so…

$
0
0

Habe gerade geschaut… seit drei Jahren auf meiner Todo-Liste… die Umstellung auf https für Suplanus.de und paar private Seiten.

Die Organisation Let’s Encrypt hat das bisl verzögert… denn als ich gelesen habe, dass das Problem mit den Zertifikaten nun gelöst ist, wollte ich darauf noch warten.

Schön ist auch dass hier Uberspace viel Vorarbeit leistet und die Verbindung nur ein paar Zeilen auf der Bash sind.

WordPress muss man bisl umbiegen, damit alles wieder läuft… aber dann, seht selbst, ist Suplanus grün:

SSL

EPLAN Bug 2.5: BMK von Abbruchstellen ändern

$
0
0

Beschreibung

Verändert man das BMK einer Abbruchstelle per API, funktioniert die BMK-Übernahme nicht mehr.

 

Workaround

Projekt schließen und wieder öffnen.

Ticketnummer (T1050956), Bug wurde aufgenommen.

EPLAN Bug 2.5: Symbolbibliothek PNE1ESS wird nicht aktualisiert

$
0
0

Beschreibung

Bei der Übernahme von EPLAN Projekten in die Version 2.5 wird manchmal die Symbolbibliothek PNE1ESS nicht aktualisiert. Über die EPLAN Oberfläche gibt es leider keine Möglichkeit diese zu erneuern.

Das Problem tritt bei der Übernahme von Projekten von 2.3 auf wenn bestimmte Symbole verwendet werden.

 

Workaround

Man muss manuell die Daten kopieren und ersetzen:

  • Quelle: EPLAN_DATA\Symbole\FIRMENKENNUNG\PNE1ESS.sdb
  • Quelle: EPLAN_DATA\Symbole\FIRMENKENNUNG\PNE1ESS.slk
  • Ziel: Projektordner.edb\PNE1ESS.sdb
  • Ziel: Projektordner.edb\PNE1ESS.slk

Der Support (T1005954) kann das Verhalten nachvollziehen.


EPLAN Bug 2.5: Klemmen Anzahl Anschlüsse verändern

$
0
0

Beschreibung

Bei Erweiterung von von logischen Anschlüssen von einer Klemme mit der API, wird die Funktionsdefinition nicht verändert. Hat die Funktionsschablone weniger Anschlüsse als hinzugefügt, werden diese als Undefiniert gekennzeichnet.

 

Workaround

Der Fehler wurde laut EPLAN in der Version 2.6 behoben.

EPLAN Bug 2.5: Funktionsschablone verändern

$
0
0

Beschreibung

Verändert man eine Funktionsschablone am Artikel per API, werden alle Produktgruppen auf undefiniert gestellt.

 

Workaround

if (part.PartNr.Equals("PXC.0708713"))
{
	MDTerminalTemplatePosition componentTemplatePosition = part.FunctionTemplatePositions.FirstOrDefault() as MDTerminalTemplatePosition;
	if (componentTemplatePosition != null)
	{
		// Bug 2.5: Issue T1048334 --> save and restore groups
		MDPartsDatabaseItem.Enums.ProductTopGroup productTopGroup = part.GenericProductGroup;
		MDPartsDatabaseItem.Enums.ProductGroup productGroup= part.ProductGroup;
		MDPartsDatabaseItem.Enums.ProductSubGroup productSubGroup = part.ProductSubGroup;
 
		// Set
		var newDesignation = @"111¶222";
		componentTemplatePosition.ConnectionPointDesignation = newDesignation;
 
		// Bug 2.5: Issue T1048334 --> save and restore groups
		part.GenericProductGroup = productTopGroup;
		part.ProductGroup = productGroup;
		part.ProductSubGroup = productSubGroup;
	}
}

Ticketnummer (T1048334). Der Support kann das Verhalten nachvollziehen und es wurde in EPLAN 2.6 behoben.

EPLAN Bug 2.5: Makroanfasspunkte drucken

$
0
0

Beschreibung

Ist die Ebene EPLAN316 Symbolgrafik.Makro.Makroanfasspunkte auf Drucken wird diese in der Druckvorschau nicht angezeigt. Sie wird aber gedruckt. Leider vergrößert und an der falschen Position.

In der Version 2.3 gab es den Bug dass die Ebene niemals gedruckt wurde.

 

Workaround

Ebeneneinstellung „nicht Drucken“.

Der Support (T1045946) kann das Verhalten nachvollziehen und es wurde in EPLAN 2.6 behoben.

EPLAN Bug 2.5: Bezugspfeil

$
0
0

Beschreibung

Verwendet man einen Bezugspfeil an einer Eigenschaftsanordnung kann es vorkommen dass dieser nicht angezeigt wir.

Erst nach Verbindungen aktualisieren, oder Umschaltung von Unsichtbaren Elementen, wird dieser angezeigt. Beim Seitenwechsel wird der Bezugspfeil wieder ausgeblendet.

 

Workaround

Laut EPLAN Support (T1060950) wird das Verhalten mit der EPLAN Version 2.6 behoben.

EPLAN Bug 2.5: Navigation mit Pfeiltasten bei aktiven Seitenfilter

$
0
0

Beschreibung

Wird in V2.4 und V2.5 im Seitennavigator ein beliebiger Filter aktiviert, und man befindet sich auf einer Seite im Schaltplan, auf welcher dieses Filterkriterium NICHT zutrifft, kann man mit Bild auf/ab nicht mehr zur nächsten Seite blättern. Nur ein Doppelklick im Seitennavigator macht das Blättern auf den gefilterten Seiten wieder möglich.

In V2.3 ist dieses Verhalten anders. Befindet man sich dort auf einer Seite die den Filterkriterien NICHT entspricht, bewirkt das Weiterblättern mit Seite auf/ab, dass man einfach die nächste Seite vor bzw. nach der aktuellen Seite angezeigt bekommt, welche das Filterkriterium beinhaltet.

Der Seitenfilter konnte somit jederzeit aktiviert werden, ohne den Arbeitsfluss zu beeinträchtigen. Dies funktioniert nun nicht mehr. Ich muss mich VOR dem Aktivieren eines Seitenfilters immer bewusst eine Schaltplanseite öffnen, die dem Filterkriterium entspricht. Das ist eine Einschränkung des Arbeitsablaufes, das für mich nicht nachvollziehbar ist.

 

Workaround

Eine Änderung bezgl. des gemeldeten Verhaltens wird in der Version 2.6 umgesetzt.

Viewing all 240 articles
Browse latest View live