Skript

EPLAN API: DisplayLanguages

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).

Von |2017-11-09T11:23:00+01:002016-03-13|EPLAN, EPLAN-API|

EPLAN API: Masterdata

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;
		}
	}
}
Von |2017-11-09T11:23:07+01:002016-03-12|EPLAN, EPLAN-API|

EPLAN API: PlaceHolder

Nicht ganz so einfach wie man es sich vorstellt, ist das arbeiten mit Platzhaltern.
Vielen Dank an Fritz für die Zusendung. Ich hab mal die Helperklassen erweitert.

using System.Collections.Generic;
using System.Linq;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.DataModel.Graphics;

namespace Suplanus.Sepla.Helper
{
	public class PlaceHolderUtility
	{
		/// <summary>
		/// Apply a record to placeholder by name
		/// </summary>
		/// <param name="placeHolders"></param>
		/// <param name="placeHolderName"></param>
		/// <param name="recordName"></param>
		/// <returns></returns>
		public bool ApplyRecord(PlaceHolder[] placeHolders, string placeHolderName, string recordName)
		{
			List<PlaceHolder> foundPlaceHolder = placeHolders
				.Where(placeHolder => placeHolder.Name.Equals(placeHolderName)) // name
				.Where(placeHolder => placeHolder.FindRecord(recordName) != -1) // record
				.ToList();

			using (Transaction transaction = new TransactionManager().CreateTransaction())
			{
				foreach (PlaceHolder placeHolder in foundPlaceHolder)
				{
					placeHolder.ApplyRecord(recordName, true); // apply (with page data)
					transaction.Commit(); // needed if not placed in project
				}
			}

			return foundPlaceHolder.Any(); // true == found | false == not found
		}

		/// <summary>
		/// Create a record to a placeHolder by name and apply a record
		/// </summary>
		/// <param name="placeHolders"></param>
		/// <param name="placeHolderName"></param>
		/// <param name="recordName"></param>
		/// <param name="variableName"></param>
		/// <param name="value"></param>
		/// <returns></returns>
		public bool CreateRecordWithValueAndApply(PlaceHolder[] placeHolders, string placeHolderName, string recordName, string variableName, string value)
		{
			List<PlaceHolder> foundPlaceHolder = placeHolders
				.Where(placeHolder => placeHolder.Name.Equals(placeHolderName)) // name
				.ToList();

			foreach (PlaceHolder placeHolder in foundPlaceHolder)
			{
				placeHolder.AddRecord(recordName);
				placeHolder.set_Value(recordName, variableName, value);
				using (Transaction transaction = new TransactionManager().CreateTransaction())
				{
					placeHolder.ApplyRecord(recordName, true); // apply (with page data)
					transaction.Commit(); // needed if not placed in project
				}
			}

			return foundPlaceHolder.Any(); // true == found | false == not found
		}
	}
}
Von |2017-11-09T11:23:13+01:002016-03-10|EPLAN, EPLAN-API|

Aufrufparameter Sprache

Wenn man wie ich EPLAN in Deutsch und Englisch lizensiert hat, möchte man die Variante jeweils schnell starten.

Das geht über den Aufrufparameter /Language :

"C:\Program Files\EPLAN\Platform\2.5.4\Bin\Eplan.exe" /Variant:"Electric P8" /Language:en_US

Wichtig: Die Einstellung für Dialogsprache wird nicht verändert, was schlimm ist wenn man wie ich die Dialogsprache per Script ermitteln will.

2016-03-01_14-12-18

Naja, aber wir haben ja die Möglichkeit es manuell zu setzen:

"C:\Program Files\EPLAN\Platform\2.5.4\Bin\Eplan.exe" /Variant:"Electric P8" /Language:en_US XAfActionSetting /set:"USER.SYSTEM.GUI.LANGUAGE" /value:"en_US" /index:0

Ich habe mir einfach eine weitere Verknüpfung ins Startmenü gemacht :^)

2016-03-01_14-21-16

Von |2017-11-09T11:22:15+01:002016-03-01|EPLAN, EPLAN-Scripts|

EPLAN-API: Templates

Ich hab mal drei Templates für die EPLAN API Programmierung erstellt.

Dadurch können Addins/Verfications und Actions sehr schnell eingefügt werden:

2016-02-26_10-36-04

Beim ActionTemplate wird gleich der Klassenname als Actionname verwendet, was ich immer sehr praktisch finde.

Einfach in euer Template Verzeichnis packen (z.B. Documents\Visual Studio 2015\My Exported Templates) und freuen :^)

Von |2017-11-09T11:23:18+01:002016-02-27|EPLAN, EPLAN-API|
Nach oben