Scripts dienen zur Berechnung von Werten, dem Austausch von Daten zwischen verschiedenen Aufgaben des Prozesses und der Ausführung von spezifischen Aktionen mithilfe von SOAP-Calls.
In einem Workflow-Diagramm sind Scripts allgegenwärtig:
Jede Aktivität verfügt über ein Initialisierungscript. Dieses wird bei Aktivierung der Aktivität ausgeführt. Es initialisiert die Variablen oder ändert die Eigenschaften der Aktivität.
Die 'JavaScript-Code'-Aktivität dient einzig der Ausführung eines Scripts.
Die 'Test'-Aktivität wertet JavaScript-Ausdrücke aus, um die richtige Transition zu aktivieren.
Die meisten Textfelder sind JavaScript-Templates: Sie können zwischen <%= und %> JavaScript-Ausdrücke enthalten. Darüber hinaus besteht Zugriff auf eine Dropdown-Liste, die die Erstellung der Ausdrücke erleichtert.
Jedes im Rahmen des Workflows ausgeführte JavaScript greift auf eine Reihe von globalen Objekten zu.
Die verfügbaren Eigenschaften dieser Objekte sind über die Dropdown-Liste rechts in der Symbolleiste des Scripts abrufbar.
Die Objekteigenschaften sind schreibgeschützt mit Ausnahme der Unter-Eigenschaften der vars-Eigenschaft.
Die meisten Eigenschaften werden erst nach Ausführung einer elementaren Aufgabe oder zum Zeitpunkt der Instanzpassivierung aktualisiert. Daher entsprechen die abgerufenen Werte nicht unbedingt dem aktuellen, sondern in der Regel dem vorangegangenen Status.
Beispiel
Für das vorliegende Beispiel und die folgenden wird wie unten dargestellt ein Workflow mit einer JavaScript-Code-Aktivität und einem Ende benötigt.
Öffnen Sie die JavaScript-Code-Aktivität und fügen Sie das folgende Script ein:
logInfo("Label: " + instance.label)
logInfo("Start date: " + task.creationDate)
Die Funktion logInfo(message) erstellt einen Eintrag im Protokoll.
Klicken Sie auf OK, um den Assistenten zu schließen und starten Sie den Workflow mithilfe der Aktionsschaltflächen oben rechts der Workflow-Liste. Rufen Sie nach Ende der Ausführung das Protokoll auf. Bei korrekter Ausführung werden zwei dem Script entsprechende Nachrichten angezeigt: Ein Eintrag zeigt den Workflow-Titel, der zweite das Datum der Script-Aktivierung.
Variablen sind freie Eigenschaften der Objekte instance, task und event. Die für diese Variablen zulässigen JavaScript-Typen sind string,number und Date.
Instanzvariablen (instance.vars.xxx) sind mit allgemeinen Variablen vergleichbar und gelten für alle Aktivitäten.
Aufgabenvariablen (task.vars.xxx) sind mit lokalen Variablen vergleichbar. Nur die laufende Aufgabe kann auf sie zugreifen. Sie werden für persistente Aktivitäten verwendet, um Daten beizubehalten, und gegebenenfalls zum Austausch von Werten zwischen verschiedenen Scripts innerhalb einer Aktivität.
Ereignisvariablen (vars.xxx) ermöglichen den Austausch von Daten zwischen elementaren Aufgaben eines Workflow-Prozesses. Sie werden von der Aufgabe übermittelt, die die laufende Aufgabe aktiviert hat. Es besteht die Möglichkeit, sie zu ändern oder neue Ereignisvariablen zu definieren, die dann an die anschließenden Aktivitäten übermittelt werden.
Bei Verwendung einer UND-Verknüpfung fusionieren die Variablen. Wenn eine Variable mehrmals definiert wurde entsteht ein Konflikt und es wird ein unbestimmter Wert ausgegeben.
Ereignisvariablen sind die am häufigsten verwendeten Variablen und sind Instanzvariablen vorzuziehen.
Bestimmte Ereignisvariablen werden von den verschiedenen Aktivitäten geändert oder gelesen. Dies sind alle Zeichenfolgenvariablen. Beispiel: Ein Export definiert die Variable vars.filename mit dem vollständigen Namen der Datei, die gerade exportiert wurde. Alle diese gelesenen oder geänderten Variablen werden in Über Aktivitäten in den Abschnitten Eingabeparameter und Ausgabeparameter der Aktivitäten beschrieben.
Weitere Anwendungsbeispiele für Workflows sind in diesem Abschnitt verfügbar.
Beispiel 1
In diesem Beispiel wird eine Instanzvariable verwendet, um den auf eine Population anzuwendenden Aufspaltungsprozentsatz dynamisch zu berechnen.
Erstellen Sie einen Workflow und fügen Sie eine Startaktivität hinzu.
Fügen Sie eine JavaScript-Code-Aktivität hinzu und konfigurieren Sie sie, um eine Instanzvariable zu erstellen.
Beispiel: instance.vars.segmentpercent = 10;
Fügen Sie eine Abfrageaktivität hinzu und wählen Sie entsprechend Ihren Anforderungen Empfänger für die Zielgruppe aus.
Fügen Sie eine Aufspaltungsaktivität hinzu und konfigurieren Sie sie so, dass eine Stichprobe für die eingehende Population vorgenommen wird. Der Stichprobenprozentsatz kann beliebig sein. In diesem Beispiel ist er auf 50 % festgelegt.
Dieser Prozentsatz wird dank der zuvor definierten Instanzvariablen dynamisch aktualisiert.
Definieren Sie im Abschnitt „Initialisierungs-Script“ auf dem Tab „Erweitert“ der Aufspaltungsaktivität eine JS-Bedingung. Die JS-Bedingung wählt den zufälligen Stichprobenprozentsatz der ersten Transition aus der Aufspaltungsaktivität aus und aktualisiert ihn auf einen Wert, der von der zuvor erstellten Instanzvariablen festgelegt wurde.
activity.transitions.extractOutput[0].limiter.percent = instance.vars.segmentpercent;
Stellen Sie sicher, dass das Komplement in einer separaten Transition der Aufspaltungsaktivität generiert wird, und fügen Sie nach jeder der ausgehenden Transitionen Endaktivitäten hinzu.
Speichern und starten Sie den Workflow. Das dynamische Sampling wird entsprechend der Instanzvariablen angewendet.
Beispiel 2
Ausgehend vom Workflow des vorangehenden Beispiels wird das Script der JavaScript-Code-Aktivität durch folgendes Script ersetzt:
instance.vars.foo = "bar1"
vars.foo = "bar2"
task.vars.foo = "bar3"
Ergänzen Sie dann das Initialisierungsscript der Ende-Aktivität um folgendes Script:
logInfo("instance.vars.foo = " + instance.vars.foo)
logInfo("vars.foo = " + vars.foo)
logInfo("task.vars.foo = " + task.vars.foo)
Starten Sie den Workflow und rufen Sie das Protokoll auf:
Workflow finished
task.vars.foo = undefined
vars.foo = bar2
instance.vars.foo = bar1
Starting workflow (operator 'admin')
Das Beispiel zeigt, dass die Aktivität JavaScript-Code auf die Instanz- und Ereignisvariablen zugreift, während die Aufgabenvariablen ausserhalb der Aufgaben nicht verfügbar sind ('undefined').
In Aktivitäten definierte Instanzvariablen können in Workflow-Abfragen wiederverwendet werden.
Geben Sie beispielsweise zum Abruf der Variablen instance.vars.xxx = "yyy" folgende Filterbedingung an: $(instance/vars/xxx).
Beispiel:
Erstellen Sie eine Instanzvariable, die über die JavaScript-Code-Aktivität den internen Namen eines Versands definiert: instance.vars.deliveryIN = "DM42"
Erstellen Sie eine Abfrage mit den Empfängern als Zielgruppen- und als Filterdimension. Geben Sie in den Bedingungen an, alle Empfänger zu suchen, an die der von der Variablen bezeichnete Versand gerichtet war.
Hinweis: Diese Informationen werden in den Versandlogs gespeichert.
Geben Sie in der Spalte Wert $(instance/vars/@deliveryIN) an, um sich auf die Instanzvariable zu beziehen.
Der Workflow gibt die Empfänger aus, die den Versand DM42 erhalten haben.
Neben den Standard-JavaScript-Funkionen stehen spezifische Funktionen zur Verfügung, um Dateien zu bearbeiten, Daten der Datenbank zu lesen oder zu ändern oder Nachrichten in das Protokoll einzutragen.
logInfo(message) wurde bereits weiter oben erläutert. Diese Funktion fügt einen Eintrag zum Protokoll hinzu.
logError(message) fügt eine Fehlernachricht zum Protokoll hinzu. Die Ausführung des Scripts wird unterbrochen und der Workflow wechselt in den Fehlerstatus (standardmäßig wird die Instanz ausgesetzt).
Eine Aktivitätseigenschaft kann unter bestimmten Bedingungen zum Zeitpunkt der Ausführung geändert werden.
Die Mehrzahl der Aktivitätseigenschaften kann dynamisch berechnet werden, entweder unter Verwendung eines JavaScript-Templates oder weil die Workflow-Eigenschaften die Berechnung des Werts durch ein Script explizit erlauben.
Für andere Eigenschaften ist jedoch das Initialisierungsscript zu verwenden. Dieses Script wird vor Ausführung der Aufgabe ausgewertet. Die Variable activity referenziert die der Aufgabe entsprechende Aktivität. Die Eigenschaften dieses Objekts können geändert werden und betreffen nur diese Aufgabe.
Verwandte Themen
Beispiele für JavaScript-Code in Workflows