Skript-Aktion
Skript-Aktion
Serverseitige Skriptaktionen sind ein sehr mächtiges Instrument von CURSOR-BPM zum Definieren der unterschiedlichsten Aktionen.
Eine Skript-Aktion hat Zugriff auf alle Variablen aus dem Prozess. Über Hilfsklassen können Daten ausgewertet und neue Daten im CRM-System manipuliert werden. Das Erzeugen von neuen Prozess-Variablen für die spätere Verwendung ist auch möglich.
Ausführungsrechte für Skript-Aktionen
Grundsätzlich werden Skript-Aktionen mit den Rechten des zuletzt ausführenden Benutzers im Prozess ausgeführt.
Sollte in einem Prozess eine Skript-Aktion mit davon abweichenden Rechten ausgeführt werden müssen, dann können Sie eine explizite Rechtezuweisung vornehmen. Anwendungsbeispiel: der letzte ausführende Mitarbeiter hat keine Rechte für die Neuanlage von Datensätzen und genau das soll die Skript-Aktion ausführen. Dazu wählen Sie im Feld Ausführen als in der Konfiguration der Skript-Aktionen einen technischen Benutzer aus. Dazu müssen Sie vorher Mitarbeiterdatensätze mit den gewünschten Rechten anlegen und diese als technischen Benutzer (Entitätsfeld: TechnicalUser.Employee
) kennzeichnen.
Abbildung: "Skriptaktion ausführen als"
Zur Auswahl stehen auch Primärschlüssel-Variablen (im Beispiel ${memberPk}
) des Prozesses. In dieser Variable muss der Primärschlüssel des technischen Mitarbeiters hinterlegt sein. Zudem stehen auch in der Prozess-Bibliothek verknüpfte globale Variablen vom Typ Primärschlüssel zur Verfügung.
Die Datenoperationen der relevanten Skript-Aktionen werden mit dem Kürzel des technischen Benutzers gespeichert (UpdateUser
). E-Mails werden auch mit der Konfiguration des technischen Benutzers versendet, dafür muss die entsprechende Konfiguration im Mitarbeiterdatensatz angelegt sein.
Zur komfortablen Unterstützung wird Ihnen im Script-Editor eine ausführliche Dokumentation über die Autovervollständigung angeboten:
Prozess-Variablen
Prozess-Variablen stehen dem Skript direkt unter dem Namen zur Verfügung, unter dem sie zuvor im Prozess angelegt wurden. Sie sind im ganzen Prozess unter diesem Namen verfügbar und können in allen Skripten (Skript- oder UserTask) und weiteren Stellen wie Sequenzflüssen mit Entscheidungen verwendet werden.
Masken-Skript
HashMap variables = new HashMap();
variables.put("var1", "value1");
startProcess("process", variables);
var1
wurde als Parameter dem Prozess beim Start mitgegeben. Auf sie kann im Groovy-Skript direkt zugegriffen werden. Alternativ kann sie mit ProcessUtils.getVariable
() aus dem Prozess-Kontext gelesen werden.
Skript Task 2
String value1 = var1; //var1 steht direkt im Skript zur Verfügung
String value1a = ProcessUtils.getVariable("var1");
if(value1.equals(value1a )) //value1 und value1a sind identisch
{
ScriptUtils.info("value1: " + value1 + ", value1a: " + value1a);
}
ProcessUtils.setVariable("var2", "value2");
Auch var2
ist im nächsten Skript verfügbar.
Skript Task 1
String v1 = ProcessUtils.getVariable("var1");
String v2 = ProcessUtils.getVariable("var2");
//var1 und var2 sind direkt im Skript verfügbar
if(v1.equals(var1) && v2.equals(var2))
{
//v1 und var1 sind identisch, ebenso wie v2 und var2
ScriptUtils.info("var1 " + var1);
ScriptUtils.info("var2 " + var2);
}
//Wichtig: var2 wird lokal im Skript überdeckt
var2 = "neuer Wert";
//Wichtig: ohne das Setzen der Variable in den Prozess-Kontext ist die Änderung nach dem Prozess-Schritt nicht sichtbar
//ProcessUtils.setVariable("var2", var2);
Damit die korrekte Schreibweise der Variablen systemunterstützt sichergestellt werden kann, sollten Sie Variablen immer vorab in der Prozess-Sammlung angelegen.
Bitte beachten Sie, dass einige Variablennamen schon reserviert sind und daher für Ihre Variablendefinition nicht verwendet werden dürfen:
SessionConstants
START_USER, CURRENT_USER_PK, CURRENT_USER_SHORTCUT
eventName
entityName
container, container_New, container_Old
workSpace, positionInWorkSpace, changeInfo
insertConfig, copyConfig, relationCreateConfig
relationName, relationMetaData, relationAttributes
masterPk, slavePk, masterTable
containers_Add, containers_Remove
parameter
rightIdentifier
ProcessID
NewMail
Sichtbarkeit von Variablen
Durch den Aufruf von ProcessUtils.setVariable()
werden Variablen im gesamten Prozess zur Verfügung gestellt. Sie stehen in allen nachfolgenden Skript-Aktionen, UserTasks und Sequenzflüssen zur Verfügung. Prozessvariablen können fast jeden beliebigen Datentyp repräsentieren mit Ausnahme der Klasse IScriptingWorkSpace.
Wird ein Objekt der Klasse IScriptingWorkSpace
durch den Aufruf von WorkSpaceScriptUtils.search()
ermittelt, so ist dieser nur in der aktuellen Skript-Aktion verwendbar. Im globalen Prozess ist die Variable leer. Hierdurch wird vermieden, dass prozessschrittübergreifende Schreibsperren gesetzt werden. Wollen Sie die Ergebnisse der Suche weiterverarbeiten, ist dies nur lesend möglich. Dies bietet die Methode WorkSpaceScriptUtils.searchForRead()
.
Suchen und Ersetzen
Damit Texte im Skript einfach ersetzt werden können, kann mittels der Tastenkombination STRG+F der Dialog zum Suchen und Ersetzten geöffnet werden.
Validierung
Im Zuge der Prüfung auf Update-Konflikte zwischen Prozess- und CRM-Daten ist es wichtig, dass die Methode WorkSpaceScriptUtils.saveEntry
korrekt verwendet wird. Der Ergebnis-Container sollte der verwendeten Container-Variable zugewiesen werden.
container = WorkSpaceScriptUtils.saveEntry(workSpace, container)
Die Skript-Validierung können Sie zudem über die Schaltfläche "Validierung der Prozess-Skripte" in der Symbolleiste starten. Diese Prüfung wird beim Update auf die Version 15.1 automatisch durchgeführt. Evtl. anzupassende BPM-Skripte werden im Update-Log vermerkt.
Autovervollständigung
In Skripten steht für Entitäten und Felder aus dem Datenmodell die Autovervollständigung zur Verfügung (genauso wie für die Methoden).
Häufige Skriptausführung
Um unkontrollierte Ausführungen von Prozessen zu erkennen, werden zu häufige Ausführung von ein und derselben Skript-Aktion als Problem im Prozess-Log
Es gibt Prozesse, die eine häufige Ausführung bedingen. Hierfür kann für diesen Prozess eine Anwendungsvariable erstellt werden, um dort die Log-Schwelle anzupassen.