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 #
| Type | Beschreibung |
|---|---|
ActiveScript | VBScript oder JScript über die iScript-Engine ausführen |
PowershellPlugin | PowerShell-Modul mit Auto-Installation und Wait-Modi starten (ab 2026.4) |
Powershell.beta | PowerShell-Skript ausführen (ab 2025.10) |
ShellCall.beta | Externes Programm über die Kommandozeile starten (ab 2025.10) |
ShellExecute | Externes Programm oder Datei über Windows ShellExecute öffnen |
StoredProc | SQL-Stored-Procedure ausführen |
CSVExport | Daten als CSV-Datei exportieren |
Allgemeine Eigenschaften #
Jede Action besitzt folgende Grundeigenschaften:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Type | String | Aktionstyp (siehe Tabelle oben) |
Title | String | Anzeigename im Menü |
ActionClass | String | Untermenü-Kategorie (z.B. ExtraData, Print) |
Hint | String | Hinweistext (Tooltip), maximal eine Zeile |
ShortCut | String | Tastenkombination (z.B. CTRL+P) |
IconUrl | String | Icon für den Menüeintrag |
Context | DWORD | Sichtbarkeitskontext: 0 = allgemein (keine Einschränkung), 1 = aktueller Datensatz (nur im Blättermodus aktiv), 2 = immer sichtbar (identisch mit 0). Siehe Context und ContextMode |
ContextMode | String | Verhalten bei nicht passendem Context: disabled = ausgegraut (Standard bei Context=1), hidden = versteckt. Siehe Context und ContextMode |
SafeForBatchProcessing | Bool | Aktion 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 #
| Wert | Bedeutung |
|---|---|
0 | Allgemein — Action ist kontextunabhängig, erscheint immer |
1 | Aktueller Datensatz — Action ist nur aktiv wenn ein Datensatz im Blättermodus angezeigt wird |
2 | Immer sichtbar — identisch mit 0 |
Wird Context weggelassen, verhält sich die Action wie bei Context=0.
ContextMode-Werte (ab 2026.4) #
| Wert | Bedeutung |
|---|---|
disabled | Action ist immer im Menü sichtbar, aber ausgegraut wenn der Kontext nicht passt. Der Benutzer sieht den Menüpunkt und weiß, dass er existiert |
hidden | Action 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=2mitRequiresRecordMsg— Die Action ist immer aktiv, aber EULANDA zeigt eine Meldung wenn kein Datensatz vorhanden ist (nur beiPowershellPlugin).
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\.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Script | Text | Skript-Code oder Bibliotheksverweis |
Param | String | Optionale 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.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
StoredProc | String | Name 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.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
FileName | String | Programm, Datei oder URL |
Parameters | String | Kommandozeilenparameter |
CSVExport #
Exportiert die aktuelle Datenliste als CSV-Datei.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Fields | String | Kommagetrennte Liste der zu exportierenden Felder |
Separator | String | Feldtrenner (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 #
| Eigenschaft | Typ | Pflicht | Beschreibung |
|---|---|---|---|
Type | String | Ja | Muss PowershellPlugin sein |
Title | String | Ja | Anzeigename im Menü |
CommandText | String | Ja | PowerShell-Befehl, z.B. Show-XfactureSettings -Udl $Env:EULANDA_UDLFILENAME -Task $Task |
WaitMode | String | Nein | Completed (Standard), InputIdle oder FireAndForget |
Requirements | String | Nein | Modul-Anforderungen, mehrzeilig (siehe unten) |
Environment | String | Nein | import CURRENT übernimmt alle System-Umgebungsvariablen |
PluginModule | String | Nein | Modulname für die Zuordnung zum Plugin |
RequiresRecordMsg | String | Nein | Meldung wenn kein Datensatz angezeigt wird. Leer = keine Prüfung |
ActionClass | String | Nein | Menü-Gruppe, z.B. ExtraData oder Extras.Schnittstellen |
Context | DWORD | Nein | 0 = allgemein, 1 = aktueller Datensatz, 2 = immer sichtbar. Siehe Context und ContextMode |
ContextMode | String | Nein | disabled = ausgegraut (Standard bei Context=1), hidden = versteckt |
SafeForBatchProcessing | String | Nein | 1 = Action erscheint in der Treffer-Aktionsliste |
IconUrl | String | Nein | Icon-Bezeichner |
Wait-Modi #
| Modus | Verhalten | Anwendungsfall |
|---|---|---|
Completed | Warteanzeige, wartet auf Prozess-Ende, zeigt Ergebnis | Exporte, kurze Operationen |
InputIdle | Warteanzeige bis $Task.InputIdle() feuert, dann EULANDA frei, PowerShell läuft weiter | WPF-Dialoge (z.B. Einstellungen) |
FireAndForget | Startet PowerShell und kehrt sofort zurück | Hintergrund-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:
| Variable | Beschreibung |
|---|---|
EULANDA_ALIAS | Alias des Mandanten |
EULANDA_SERVERNAME | Name des SQL-Servers |
EULANDA_DATABASENAME | Name der SQL-Datenbank |
EULANDA_CONNECTIONSTRING | ADO/OleDB-Verbindungszeichenfolge |
EULANDA_UDLFILENAME | Pfad zur UDL-Datei |
EULANDA_DOC | Name des Datenobjekts (z.B. Eulanda.Rechnung) |
EULANDA_CURRENT_ID | ID des aktuell angezeigten Datensatzes |
EULANDA_BASE_URL | EULANDA interne Base-URL |
Zusätzlich wird $Context als PSCustomObject bereitgestellt:
$Context.DOCName # z.B. 'Eulanda.Rechnung'
$Context.CurrentId # z.B. 12345
Wichtig:
Environment=import CURRENTin der Registry übernimmt alle System-Umgebungsvariablen des EULANDA-Prozesses. Ohne das fehlen dem PowerShell-Prozess grundlegende Variablen wiePATH,USERPROFILEetc.
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>
| Variante | Bedeutung |
|---|---|
MODULE XfactureModule version:1.0.11 | Exakte Version 1.0.11 muss vorhanden sein |
MODULE EulandaXtools minimum-version:1.0.48 | Mindestens Version 1.0.48 |
Automatische Modul-Installation #
Wenn ein Modul fehlt, sucht EULANDA in drei Stufen:
- Lokales ZIP:
<EXE-Verzeichnis>\<ModulName>.zip— für Offline-Umgebungen - Online-Download:
https://files.eulanda.eu/<modulname>/<modulname>.zip— Standard - 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:
| ActionClass | Menüposition |
|---|---|
ExtraData | Menü “Extras” / “Daten” |
Print | Druckmenü |
ExtraTools | Menü “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 #
- PowershellCall und ShellCall – Aktionstypen
Powershell.betaundShellCall.beta(ab 2025.10) - Plugins – Wie Plugins eigene Actions registrieren
- USER – Vererbung und Überschreibung
- iScript – Skriptprogrammierung in EULANDA