Menübefehle Powershell Call Und Shell Call
Zuletzt geändert: 02.12.2025 11:35

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

Diese zwei Typen von Menübefehlen sind in EULANDA 2025.10 neu hinzugekommen und befinden sich aktuell in der Erprobungsphase. Als Typ (Type) sind deshalb aktuell Powershell.beta oder ShellCall.beta vorgesehen. Bis zur allgemeinen Freigabe ist das Anhängsel .beta notwendig, da sich bis dahin noch Details der Implementierung und Parameter ändern können.

Allgemeine Eigenschaften aller Menübefehle #

Name Typ Standard Bedeutung
Type string Powershell.beta oder ShellCall.beta
Title string Anzeigename - z.B. im Menü
ActionClass string (ohne) Untermenü
Hint string (ohne) Hinweis, maximal eine Zeile
ShortCut string (ohne) Tastenkombination, englisch. Z.B. CTRL+P
IconUrl string (ohne) Angezeigtes Icon
SafeForBatchProcessing bool false

Gemeinsame Eigenschaften von ShellCall und Powershell #

Name Typ Bedeutung
CommandText string Powershell- oder Cmd-Befehl
Context int/string 0 Aufruf mit aktuellem Datensatz oder allgemein
Visible bool false Prozessfenster ist sichtbar
Interactive bool false Interaktiver Prozess
Async bool false Asynchrone Ausführung
Environment string (ohne) Umgebungsvariablen manipulieren. DARF NICHT leer sein. z.B.: “import CURRENT” für den aktuellen Umgebungsblock der Anwendung oder “base ps-min” für einen Minimalumfang, damit Powershell starten kann.
Logs string (ohne) Debugausgaben (für zukünftike Erweiterungen)

Automatische Umgebungsvariablen #

folgende Umgebungsvariablen sind im aufgerufenen Prozess verfügbar

Name Datentyp Bedeutung
EULANDA_ALIAS string Alias des Mandanten, i.d.R. der Menüeintrag
EULANDA_SERVERNAME string Name des SQL-Servers
EULANDA_DATABASENAME string Name der SQL-Datenbank
EULANDA_CONNECTIONSTRING string ADO/OleDB-Verbindungszeichenfolge
EULANDA_DOC string Name des Datenobjekts, falls zutreffend
EULANDA_CURRENT_ID int ID des aktuellen Datensatzes, falls zutreffend

Powershell-spezifisch #

Type = Powershell.beta

Name Datentyp Bedeutung
ExecutionPolicy string
StrictMode int
CallStyle string
Timeout variabel Timeout in ms oder String “INFINITE”
InputFormat
OutputFormat

ShellCall-spezifisch #

Type = ShellCall.beta

aktuell keine gesonderten Einstellungen

Powershell Beispiel A #

In diesem Beispiel wird der Text “Hallo Welt!” mit der aktuellen Datensatz-ID ausgegeben. Falls kein Datensatz selektiert ist, wird eine ausgegeben.

Implementierungsdetails #

Innerhalb des Commandtext wird das Object $Context zur Verfügung gestellt, welches die aktuelle Datensatz ID oder -1 als $Context.CurrentID zur Verfüguing stellt.

Eine Fehlermeldung kann über den Powershell throw-Befehl ausgegeben werden. Der Powershell-Befehl wird danach typischerweise abgebrochen, wenn keine weitere Behandlung der Exception erfolgt.

Normale Meldungen werden über write-host ausgegeben. Wie auch bei SQL-Fehlermeldungen innerhalb Eulandas kann über den Präfix [ADDRESS:USER] oder [ADDRESS:DEVELOPER] festgelegt werden, ob die Meldung direkt dem Benutzer präsentiert wird oder nur im Debug-Fenster sichtbar ist.

Commandtext #

if ($Context.CurrentID -eq -1) {  
  Throw "Es ist kein Datensatz ausgewählt" 
} else { 
  write-host "[ADDRESS:USER]Hallo Welt! Die ID für $($Context.DOCName) 
    lautet $($Context.CurrentID)"   
}

Ausgabe #

Passende Registry-Datei #

Diese kann als CNREG-Datei gespeichert oder über die Zwischenablage in der ROOT der SQL-Registry eingefügt werden über das Rechte-Maustastenmenü. Danach muss EULANDA neu gestartet werden.

CnRegEdit1

[\OBJECTS\DATAOBJECTS\Eulanda.Adresse\Actions\user.Adresse.PowershellBeispielA]
"ActionClass"="ExtraData"
"CommandText"="if ($Context.CurrentID -eq -1) {  
  Throw ""Es ist kein Datensatz ausgwählt"" 
} else { 
  write-host ""[ADDRESS:USER]Hallo Welt! Die ID für $($Context.DOCName) 
    lautet $($Context.CurrentID)""   
}"
"Environment"="import CURRENT"
"Title"="Powershell Beispiel A"
"Type"="Powershell.beta"

Powershell Beispiel B #

Dieses Beispiel baut eine eigene Datenbankverbindung auf und führt eine einfache SQL-Abfrage aus. Der aktuelle ConnectionString steht als Umgebungsvariable EULANDA_CONNECTIONSTRING zur Verfügung.

$Conn = New-Object -ComObject ADODB.Connection
$Conn.Open($env:EULANDA_CONNECTIONSTRING)
if ($Conn.State -eq 1) {
  $Sql = "select Match from Adresse where id = $env:EULANDA_CURRENT_ID"
  $Recordset = $Conn.Execute($Sql)
  $Match = $Recordset.Fields("Match").Value
  Write-Host "[address:USER]Der Matchcode lautet: $Match"
} else {
  throw "Verbindung fehlgeschlagen!"        
}
$Conn = $Null