Actions
Zuletzt geändert: 11.04.2026 13:18

Actions (Menübefehle) #

\ROOT\OBJECTS\DATAOBJECTS\{objektname}\Actions\{actionname}

Actions definieren Menübefehle innerhalb eines EULANDA-Moduls. Über Actions können externe Programme, Skripte, SQL-Prozeduren oder Exporte direkt aus dem Menü eines Datenobjekts heraus aufgerufen werden.

Aktionstypen #

TypeBeschreibung
ActiveScriptVBScript oder JScript über die iScript-Engine ausführen
PowershellPluginPowerShell-Modul mit Auto-Installation und Wait-Modi starten (ab 2026.4)
Powershell.betaPowerShell-Skript ausführen (ab 2025.10)
ShellCall.betaExternes Programm über die Kommandozeile starten (ab 2025.10)
ShellExecuteExternes Programm oder Datei über Windows ShellExecute öffnen
StoredProcSQL-Stored-Procedure ausführen
CSVExportDaten als CSV-Datei exportieren

Allgemeine Eigenschaften #

Jede Action besitzt folgende Grundeigenschaften:

EigenschaftTypBeschreibung
TypeStringAktionstyp (siehe Tabelle oben)
TitleStringAnzeigename im Menü
ActionClassStringUntermenü-Kategorie (z.B. ExtraData, Print)
HintStringHinweistext (Tooltip), maximal eine Zeile
ShortCutStringTastenkombination (z.B. CTRL+P)
IconUrlStringIcon für den Menüeintrag
ContextDWORDSichtbarkeitskontext: 0 = allgemein (keine Einschränkung), 1 = aktueller Datensatz (nur im Blättermodus aktiv), 2 = immer sichtbar (identisch mit 0). Siehe Context und ContextMode
ContextModeStringVerhalten bei nicht passendem Context: disabled = ausgegraut (Standard bei Context=1), hidden = versteckt. Siehe Context und ContextMode
SafeForBatchProcessingBoolAktion ist für Stapelverarbeitung geeignet

Context und ContextMode #

Der Registry-Wert Context steuert, wann eine Action im Menü aktiv ist. ContextMode bestimmt das Verhalten wenn der Kontext nicht passt.

Context-Werte #

WertBedeutung
0Allgemein — Action ist kontextunabhängig, erscheint immer
1Aktueller Datensatz — Action ist nur aktiv wenn ein Datensatz im Blättermodus angezeigt wird
2Immer sichtbar — identisch mit 0

Wird Context weggelassen, verhält sich die Action wie bei Context=0.

ContextMode-Werte (ab 2026.4) #

WertBedeutung
disabledAction ist immer im Menü sichtbar, aber ausgegraut wenn der Kontext nicht passt. Der Benutzer sieht den Menüpunkt und weiß, dass er existiert
hiddenAction wird versteckt wenn der Kontext nicht passt

Standard: Bei Context=1 ist der Standard disabled (ausgegraut). Bei allen anderen Context-Werten ist der Standard hidden. Der Standard kann durch explizites Setzen von ContextMode überschrieben werden.

Empfehlung #

Für Actions die einen aktiven Datensatz benötigen gibt es zwei Wege:

  • Context=1 — EULANDA steuert die Sichtbarkeit automatisch. Die Action ist ausgegraut bis ein Datensatz im Blättermodus angezeigt wird.
  • Context=2 mit RequiresRecordMsg — Die Action ist immer aktiv, aber EULANDA zeigt eine Meldung wenn kein Datensatz vorhanden ist (nur bei PowershellPlugin).

Namenskonvention #

Eigene Actions müssen mit dem Präfix user. beginnen, damit sie bei Programmupdates nicht überschrieben werden:

user.MeineFirma.MeinBefehl

Eigene Actions sollten unter \USER\.ALLUSER\OBJECTS\DATAOBJECTS\ angelegt werden, nicht direkt unter \OBJECTS\DATAOBJECTS\. Details zur Vererbung: USER

ActiveScript #

Führt ein VBScript oder JScript über die in EULANDA integrierte iScript-Engine aus. Das Skript wird als Text in der Eigenschaft Script hinterlegt oder als Verweis auf eine Bibliothek unter \SYSTEM\LIBS\.

EigenschaftTypBeschreibung
ScriptTextSkript-Code oder Bibliotheksverweis
ParamStringOptionale Parameter für das Skript

Beispiel: Artikelexport per VBScript #

\ROOT\USER\.ALLUSER\OBJECTS\DATAOBJECTS\Eulanda.Artikel\Actions\user.ArtikelExport\
  Type = ActiveScript
  Title = Artikel exportieren
  ActionClass = ExtraData
  Context = 1
  Script = (VBScript-Code oder libcall:userlib.MeinExport)

Im Skript steht das aktuelle Datenobjekt über die Client-Schnittstelle zur Verfügung. Details zur iScript-Programmierung: iScript

StoredProc #

Führt eine SQL-Stored-Procedure aus. Der aktuelle Datensatz kann über den Parameter @Id übergeben werden.

EigenschaftTypBeschreibung
StoredProcStringName der Stored Procedure

Beispiel: Eigene Prozedur aufrufen #

\ROOT\USER\.ALLUSER\OBJECTS\DATAOBJECTS\Eulanda.Adresse\Actions\user.AdressCheck\
  Type = StoredProc
  Title = Adresse prüfen
  ActionClass = ExtraData
  Context = 1
  StoredProc = cn_user_AdressCheck

ShellExecute #

Öffnet ein externes Programm, eine Datei oder eine URL über die Windows-ShellExecute-Funktion.

EigenschaftTypBeschreibung
FileNameStringProgramm, Datei oder URL
ParametersStringKommandozeilenparameter

CSVExport #

Exportiert die aktuelle Datenliste als CSV-Datei.

EigenschaftTypBeschreibung
FieldsStringKommagetrennte Liste der zu exportierenden Felder
SeparatorStringFeldtrenner (Standard: ;)

PowershellPlugin (ab 2026.4) #

Der Aktionstyp PowershellPlugin ermöglicht es, PowerShell-Module direkt aus dem EULANDA-Menü aufzurufen. Module werden automatisch bereitgestellt (dreistufige Fallback-Kette), der Aufruf läuft über Named Pipes mit Rückmeldung, und EULANDA bleibt bei Dialog-Aufrufen voll bedienbar.

PowershellPlugin ersetzt den bisherigen VBS-Weg (ActiveScript) für Plugin-Aufrufe und löst drei Probleme:

  • WebView2-Freeze: VBS blockiert den UI-Thread — WebView2-Controls frieren ein
  • Modul-Prüfung: Die Prüfung ob Module installiert sind, erfolgt automatisch in Delphi
  • Wartung: Änderungen nur noch an einer Stelle (PowerShell), kein VBS-Wrapper mehr nötig

Eigenschaften #

EigenschaftTypPflichtBeschreibung
TypeStringJaMuss PowershellPlugin sein
TitleStringJaAnzeigename im Menü
CommandTextStringJaPowerShell-Befehl, z.B. Show-XfactureSettings -Udl $Env:EULANDA_UDLFILENAME -Task $Task
WaitModeStringNeinCompleted (Standard), InputIdle oder FireAndForget
RequirementsStringNeinModul-Anforderungen, mehrzeilig (siehe unten)
EnvironmentStringNeinimport CURRENT übernimmt alle System-Umgebungsvariablen
PluginModuleStringNeinModulname für die Zuordnung zum Plugin
RequiresRecordMsgStringNeinMeldung wenn kein Datensatz angezeigt wird. Leer = keine Prüfung
ActionClassStringNeinMenü-Gruppe, z.B. ExtraData oder Extras.Schnittstellen
ContextDWORDNein0 = allgemein, 1 = aktueller Datensatz, 2 = immer sichtbar. Siehe Context und ContextMode
ContextModeStringNeindisabled = ausgegraut (Standard bei Context=1), hidden = versteckt
SafeForBatchProcessingStringNein1 = Action erscheint in der Treffer-Aktionsliste
IconUrlStringNeinIcon-Bezeichner

Wait-Modi #

ModusVerhaltenAnwendungsfall
CompletedWarteanzeige, wartet auf Prozess-Ende, zeigt ErgebnisExporte, kurze Operationen
InputIdleWarteanzeige bis $Task.InputIdle() feuert, dann EULANDA frei, PowerShell läuft weiterWPF-Dialoge (z.B. Einstellungen)
FireAndForgetStartet PowerShell und kehrt sofort zurückHintergrund-Jobs, Anzeige im Browser

InputIdle-Mechanismus #

Bei WaitMode=InputIdle erzeugt EULANDA ein $Task-Objekt im PowerShell-Scope. Wenn das Script $Task.InputIdle() aufruft, wird die EULANDA-Oberfläche wieder freigegeben während der PowerShell-Prozess im Hintergrund weiterläuft.

Das PowerShell-Modul muss dazu einen -Task-Parameter akzeptieren und $Task.InputIdle() vor dem blockierenden Dialog-Aufruf aufrufen:

function Show-XfactureSettings {
  param(
    [string]$Udl,
    $Task
  )
  # ... Dialog aufbauen ...

  # EULANDA freigeben bevor ShowDialog blockiert
  if ($Task -and $Task.PSObject.Methods['InputIdle']) { $Task.InputIdle() }

  [void]$window.ShowDialog()
}

Umgebungsvariablen #

Folgende Variablen stehen im aufgerufenen PowerShell-Prozess automatisch zur Verfügung:

VariableBeschreibung
EULANDA_ALIASAlias des Mandanten
EULANDA_SERVERNAMEName des SQL-Servers
EULANDA_DATABASENAMEName der SQL-Datenbank
EULANDA_CONNECTIONSTRINGADO/OleDB-Verbindungszeichenfolge
EULANDA_UDLFILENAMEPfad zur UDL-Datei
EULANDA_DOCName des Datenobjekts (z.B. Eulanda.Rechnung)
EULANDA_CURRENT_IDID des aktuell angezeigten Datensatzes
EULANDA_BASE_URLEULANDA interne Base-URL

Zusätzlich wird $Context als PSCustomObject bereitgestellt:

$Context.DOCName    # z.B. 'Eulanda.Rechnung'
$Context.CurrentId  # z.B. 12345

Wichtig: Environment=import CURRENT in der Registry übernimmt alle System-Umgebungsvariablen des EULANDA-Prozesses. Ohne das fehlen dem PowerShell-Prozess grundlegende Variablen wie PATH, USERPROFILE etc.

Requirements-Format #

Jede Zeile in Requirements definiert ein benötigtes Modul. EULANDA prüft und installiert diese automatisch bevor PowerShell startet.

MODULE <Name> [version|minimum-version|maximum-version]:<Version>
VarianteBedeutung
MODULE XfactureModule version:1.0.11Exakte Version 1.0.11 muss vorhanden sein
MODULE EulandaXtools minimum-version:1.0.48Mindestens Version 1.0.48

Automatische Modul-Installation #

Wenn ein Modul fehlt, sucht EULANDA in drei Stufen:

  1. Lokales ZIP: <EXE-Verzeichnis>\<ModulName>.zip — für Offline-Umgebungen
  2. Online-Download: https://files.eulanda.eu/<modulname>/<modulname>.zip — Standard
  3. SQL-Registry Blob: \SYSTEM_NC\Powershell-modules\<Name>\<Version>\module.zip — Legacy

PluginModule — Modulzuordnung #

Der Key PluginModule ordnet die Action einem bestimmten Plugin-Modul zu, z.B. Xfacture.

Beispiel: Dialog-Action (InputIdle) #

CnRegEdit1

[\OBJECTS\ACTIONS\cnsoft.Xfacture.PS.Settings]
"Type"="PowershellPlugin"
"Title"="XfacturePS Einstellungen"
"ActionClass"="Extras.Schnittstellen"
"PluginModule"="Xfacture"
"Context"=dword:00000002
"WaitMode"="InputIdle"
"Environment"="import CURRENT"
"Requirements"="MODULE XfactureModule version:1.0.11
MODULE EulandaXtools minimum-version:1.0.48
"
"CommandText"="Show-XfactureSettings -Udl $Env:EULANDA_UDLFILENAME -Task $Task"

Beispiel: Export-Action (Completed) #

CnRegEdit1

[\OBJECTS\DATAOBJECTS\Eulanda.Rechnung\Actions\cnsoft.Xfacture.PS.Export]
"Type"="PowershellPlugin"
"Title"="XfacturePS Ausgeben"
"PluginModule"="Xfacture"
"Context"=dword:00000002
"WaitMode"="Completed"
"Environment"="import CURRENT"
"Requirements"="MODULE XfactureModule version:1.0.11
MODULE EulandaXtools minimum-version:1.0.48
"
"RequiresRecordMsg"="Eine auszugebende Rechnung muss im Blättermodus am Bildschirm angezeigt sein."
"CommandText"="Export-XfactureInvoice -InvoiceId $Env:EULANDA_CURRENT_ID -Udl $Env:EULANDA_UDLFILENAME"

Beispiel: Hintergrund-Action (FireAndForget) #

CnRegEdit1

[\OBJECTS\DATAOBJECTS\Eulanda.Rechnung\Actions\cnsoft.Xfacture.PS.Show]
"Type"="PowershellPlugin"
"Title"="XfacturePS Anzeigen"
"PluginModule"="Xfacture"
"Context"=dword:00000002
"WaitMode"="FireAndForget"
"Environment"="import CURRENT"
"Requirements"="MODULE XfactureModule version:1.0.11
MODULE EulandaXtools minimum-version:1.0.48
"
"RequiresRecordMsg"="Eine Rechnung muss im Blättermodus am Bildschirm angezeigt sein."
"CommandText"="Show-XfactureInvoice -InvoiceId $Env:EULANDA_CURRENT_ID -Udl $Env:EULANDA_UDLFILENAME"

Beispiel: Batch-Action (Stapelverarbeitung) #

CnRegEdit1

[\OBJECTS\DATAOBJECTS\Eulanda.Rechnung\Actions\cnsoft.Xfacture.PS.Batch]
"Type"="PowershellPlugin"
"Title"="XfacturePS Ausgeben - Ohne Dialog"
"PluginModule"="Xfacture"
"Context"=dword:00000002
"WaitMode"="Completed"
"SafeForBatchProcessing"="1"
"Environment"="import CURRENT"
"Requirements"="MODULE XfactureModule version:1.0.11
MODULE EulandaXtools minimum-version:1.0.48
"
"RequiresRecordMsg"="Eine auszugebende Rechnung muss im Blättermodus am Bildschirm angezeigt sein."
"CommandText"="Export-XfactureInvoice -InvoiceId $Env:EULANDA_CURRENT_ID -Udl $Env:EULANDA_UDLFILENAME -Headless"

Mit SafeForBatchProcessing=1 erscheint die Action in der Treffer-Aktionsliste. Der -Headless-Parameter unterdrückt Dialoge für den unbeaufsichtigten Betrieb.

Einstellseiten (Settings) #

PowershellPlugin kann auch als Einstellseite unter Kommunikation/Schnittstellen registriert werden:

CnRegEdit1

[\OBJECTS\SETTINGS\esol.XfacturePS]
"Type"="PowershellPlugin"
"Title"="XfacturePS"
"Group"="PLUGIN"
"PluginModule"="Xfacture"
"WaitMode"="InputIdle"
"Environment"="import CURRENT"
"Requirements"="MODULE XfactureModule version:1.0.11
MODULE EulandaXtools minimum-version:1.0.48
"
"CommandText"="Show-XfactureSettings -Udl $Env:EULANDA_UDLFILENAME -Task $Task"

Der Pfad für Settings-Einträge ist \OBJECTS\SETTINGS\<Name>\ statt \OBJECTS\DATAOBJECTS\...\Actions\.

Powershell und ShellCall (ab 2025.10) #

Die Aktionstypen Powershell.beta und ShellCall.beta bieten erweiterte Möglichkeiten wie asynchrone Ausführung, Umgebungsvariablen und Datenbankzugriff. Diese werden auf einer eigenen Seite beschrieben: PowershellCall und ShellCall

ActionClass – Untermenüs #

Die ActionClass bestimmt, in welchem Untermenü die Action erscheint:

ActionClassMenüposition
ExtraDataMenü “Extras” / “Daten”
PrintDruckmenü
ExtraToolsMenü “Extras” / “Werkzeuge”
(leer)Hauptmenü des Moduls

Beispiel: Kompletter Menübefehl als CNREG-Datei #

Diese Datei kann über die Zwischenablage in der SQL-Registry eingefügt werden (Rechte Maustaste auf ROOT, “Einfügen”):

CnRegEdit1

[\USER\.ALLUSER\OBJECTS\DATAOBJECTS\Eulanda.Rechnung\Actions\user.RechnungExport]
"Type"="ActiveScript"
"Title"="Rechnung als XML exportieren"
"ActionClass"="ExtraData"
"Hint"="Exportiert die aktuelle Rechnung als XML-Datei"
"Context"=dword:00000001
"Script"="Option Explicit
Dim xmlEul
Set xmlEul = Client.CreateObject(\"XMLLIB\")
xmlEul.LoadFromDB \"SALESORDER\"
xmlEul.SaveToFile Client.Properties(\"FOLDER.DESKTOP\") & \"\\RechnungExport.xml\"
Set xmlEul = Nothing
MsgBox \"Export abgeschlossen.\""

Nach dem Einfügen muss EULANDA neu gestartet werden, damit der neue Menübefehl angezeigt wird.

Siehe auch #