Konfigurationsskripte
Konfigurationsskripte dienen der Einrichtung des Systems. Durch diese werden Default-Konfigurationen vorgenommen. Daher werden diese nur einmal pro Systemstrukturelement oder pro System ausgeführt. Zur Konfiguration gehört beispielsweise das Anlegen von Default-Stammdaten oder anderer höherwertiger Default-Konfigurationen für Ausführungsrechte.
Da Bausteine "persistente" Caches haben (können), ist es hier sinnvoll, diese Konfigurationen per Service durchzuführen, damit diese per Events sich im System verteilen. Daher werden diese Konfiguration häufig nicht über Datenbank-Patches erstellt. Jeder Baustein bringt seine eigenen Konfigurationsskripte mit und bezieht sich auch nur auf die eigene Funktionalität bis auf die Plattformfunktionalität.
Konfigurationsskripte sind normale Powershell-Skripte und
- können manuell mithilfe des Cmdlets
Invoke-CSConfigurationScript [-Name]
einzeln oder zusammen aufgerufen werden - müssen einer definierten Signatur genügen
- werden durch die Installation automatisch ausgeführt.
Nachfolgend ist ein exemplarisches Konfigurationsskript zu sehen.
[CmdletBinding()] Param( [Parameter(Mandatory = $True, Position = 0)] [string] $sessionToken ) $defaultSystemUsage = Select-SystemUsage | Where-Object { $_.IsDefault -eq $true} if (!$defaultSystemUsage) { $defaultSystemUsage = Select-SystemUsage | Where-Object { $_.IsProductive -eq $true} } if (!$defaultSystemUsage) { Write-Error 'Default Verwendungszweck könnte nicht ermittelt werden.' } $customDataType = Select-CustomDataType -Name Schleupen.AS.MT.BIB.Buecher.BuchVerlustAbwickelnTask_3.1 if (-not $customDataType) { Write-Error "Es wurde kein passender CustomDataType gefunden!" } $systemSessionToken = Request-SessionToken -ViewName Standard -ElementTypeName System -ElementName System -SystemUsages $defaultSystemUsage.Name New-TaskType -Name "AS.MT.BIB: Buchverlust abwickeln" -DelegationId "S-1-1-0" -CustomDataTypeId $customDataType.Id -SessionToken $systemSessionToken New-TaskType -Name "AS.MT.BIB: Benutzer kontaktieren" -DelegationId "S-1-1-0" -SessionToken $sessionToken New-TaskType -Name "AS.MT.BIB: Sachbearbeiter kontaktieren" -DelegationId "S-1-1-0" -SessionToken $sessionToken New-TaskType -Name "AS.MT.BIB: Buchverlust abwickeln" -DelegationId "S-1-1-0" -CustomDataTypeId $customDataType.Id -EditDialogFlowId "Schleupen.AS.mal.bal.bap.BuchVerlustAbwickelnTaskFlow_3.1" -SessionToken $sessionToken
Hier ist zu erkennen, dass in der Signatur das $sessionToken als Parameter erwartet wird. Ist ein derartiger Parameter vorhanden, so wird das Konfigurationsskript pro Systemstrukturelement ausgeführt (genauer: siehe Konfigurationsskripte mit Systemstrukturbezug). Ist das Konfigurationsskript Parameter-los, so wird es einmal pro System ausgeführt.
In einer Solution werden Konfigurationsskripte abgelegt, durch spezielle Installationspackages definiert und in das System gebracht. Ein Package-Builder erzeugt diesen Pakettyp.
Konfigurationsskripte werden durch das Deployment unter %Programfiles%\Schleupen\ConfigurationScripts
abgelegt.
Folgende Regeln müssen bei der Erstellung von Konfigurationsskripten beachtet werden:
- direkte DB-Zugriffe (z.B. per SQL) sind nicht erlaubt
- Zuordnungen von DB-Schemata zu Systemstrukturen sind nicht erlaubt
- Konfigurationsskripte dürfen Systemstrukturelementtypen und DB-Schemata in der Systemstruktur nicht voraussetzen
Ausführungsreihenfolge
Die Ausführungsreihenfolge der Konfigurationsskripte über Bausteine hinweg ist nicht deterministisch. Die Reihenfolge wird implizit durch die Registrierung in der Datenbank vorgegeben. Ergo: Man kann sich nicht auf eine feste Ausführungsreihenfolge verlassen.
Die Ausführungsreihenfolge der Konfigurationsskripte eines Bausteins hingegen ist deterministisch: Durch eine Nummer als Präfix (siehe Abbildung oben) wird die Ablage im Deployment Package festgelegt und somit diese in genau der spezifizierten Weise installiert und somit in dieser Reihenfolge ausgeführt.
Konfigurationsskripte mit einem Bezug zu Systemstrukturelementen
Konfigurationsskripte können, wie oben bereits beschrieben, einen Bezug zu Systemstrukturelementen haben. Als Erkennung hierfür wird geprüft, ob das Konfigurationsskript einen Parameter $sessionToken vom Typ String hat. Konfigurationsskripte bekommen dann einen sogenannten ExecutionScope, der steuert, in welchem Kontext die Skripte ausgeführt werden: Mögliche Werte für den ExecutionScope sind Global und SystemStructureElement.
Mithilfe der Serviceimplementierungsgruppe wird im Falle eines Systemstrukturbezugs über Serviceimplementierungsgruppe gesteuert, auf welchen Systemstrukturknoten die Konfigurationsskripte ausgeführt werden. Konfigurationsskripte sind über den ausliefernden Baustein einer Serviceimplementierungsgruppe zugeordnet