Die System-Skriptsprache wird u. a. im Workflow-Management verwendet, um z. B. eine Vorbedingung oder Übergangsbedingung zu formulieren oder um Bearbeiter zu ermitteln, die nicht in einer Workflowrolle zusammengefasst sind.
Die Workflow-Engine unterstützt sowohl die eigene System-Skriptsprache als auch JavaScript, um komplexe Zusammenhänge auszudrücken. In dieser Dokumentation erhalten Sie ausführliche Informationen zu den einzelnen Workflow-Funktionen der System-Skriptsprache. Workflow-Funktionen sind Funktionen, deren Verwendungskontext eine Aktivitätsdefinition voraussetzen. Workflow-Funktionen, die das Vorhandensein einer Aktivität voraussetzen, können nicht in Übergangsbedingungen verwendet werden, da zum Zeitpunkt der Auswertung der Übergangsbedingung die Aktivität noch nicht erzeugt ist. Beispiele von Workflow-Funktionen sind setActivityWorkDuration und setActivityPriority, die beim Erzeugen einer Workflow-Aktivität die Bearbeitungsdauer bzw. Priorität bestimmen.
Die Beispiele in diesem Dokument dienen dem Verständnis dafür, wie die Funktionen und Befehle der System-Skriptsprache verwendet werden können. Um die Beispiele in anderen Verwendungskontexten einzusetzen, müssen sie ggf. angepasst werden. Dieses Dokument umfasst auch Beispiele für Funktionen, die nicht Bestandteil der System-Skriptsprache sind. In diesem Fall weisen die Beispiele auf Möglichkeiten hin, wie mithilfe der System-Skriptsprache die gleiche oder eine ähnliche Funktionalität erreicht werden kann.
Zielgruppe
Die Zielgruppe dieses Dokuments besteht aus Entwicklern und technischen Beratern, die Workflows bei Kunden erstellen oder anpassen, sowie Kunden, die eigene Workflows verwalten.
Für dieses Dokument wird das Verständnis des für den Benutzer sichtbaren Funktionsumfangs des Workflow-Managements vorausgesetzt. Weiterhin sollte der Leser zum Verständnis der System-Skriptsprache grundlegende Kenntnisse in SQL oder einer beliebigen Programmiersprache haben.
Begriffsbestimmung
- Aktivitätsdefinition – Aktivitätsdefinitionen legen fest, ob beim Auftreten eines bestimmten Ereignisses eine Aktivität erzeugt werden soll und welche Merkmale diese Aktivität haben soll. Eine Aktivitätsdefinition muss aktiviert sein. Wenn das der Fall ist, dann erzeugt die Workflow-Engine beim Auftreten des dort angegebenen Ereignisses eine neue Aktivität, sofern die Übergangs- und Vorbedingung erfüllt sind. Alle für die Aktivität notwendigen Daten werden aus der Aktivitätsdefinition berechnet. Die Aktivitätsdefinition stellt somit die Vorlage für die aus ihr erzeugten Aktivitäten dar. Aktivitätsdefinitionen sind unabhängig von der OLTP-Datenbank und dem System, in dem sie erfasst wurden, da sie weder System- noch OLTP-spezifische Daten enthalten. Aktivitätsdefinitionen werden in der Repository-Datenbank abgelegt.
- Deklarationen – Deklarationen sind Skripte in den Prozessdefinitionen und Aktivitätsdefinitionen, die Methoden zur Verfügung stellen, welche beim Erzeugen von Aktivitäten, bei Statuswechseln und bei der Eingabe von bestimmten Parameterwerten aufgerufen werden. Durch Anpassung der Deklarationen lassen sich die Eigenschaften von Prozessen und Aktivitäten flexibel festlegen. Deklarationen werden in einer Skriptsprache erfasst.
- GUID – GUID ist die Abkürzung für Globally Unique Identifier und entspricht einem „Global eindeutigen Bezeichner”. Eine GUID ist eine 128-Bit Zahl, die nach dem Schema der Open Software Foundation (OSF) für verteilte Berechnungen (Distributed Computing Environment, DCE) berechnet wurde. Sie enthält u. a. die IP-Adresse der erzeugenden Rechner, eine Zeit-Komponente und eine Zufalls-Komponente. So können zwei unabhängige Rechner ohne Synchonisation immer unterschiedliche GUIDs berechnen. In Comarch ERP Enterprise werden GUIDs als Java-Byte-Arrays der Länge 16 repräsentiert und vor allem als kompakte Primär- und Fremdschlüssel in Business Objects verwendet.
- System-Skriptsprache – Terme, Bedingungen, Befehle, Funktionen und Deklarationen werden verwendet, um komplexe Zusammenhänge auszudrücken. Alle diese Ausdrücke sind Teil einer gemeinsamen Skriptsprache, die System-Skriptsprache genannt wird. Die Syntax der System-Skriptsprache lehnt sich an SQL, Pascal und Java an. Die System-Skriptsprache wird u. a. im Workflow-Management verwendet, um z. B. eine Vorbedingung oder Übergangsbedingung zu formulieren oder um Bearbeiter zu ermitteln, die nicht in einer Workflowrolle zusammengefasst sind.
- Workflow-Engine – Zusammen mit dem Ereignisdienst koordiniert und überwacht die Workflow-Engine die Ausführung von Workflows. Die Workflow-Engine wird in jedem System auf dem Message-Server ausgeführt.
Workflow-Funktionen
Workflow-Funktionen sind Funktionen, deren Verwendungskontext eine Aktivitätsdefinition voraussetzen. Workflow-Funktionen, die das Vorhandensein einer Aktivität voraussetzen, können nicht in Übergangsbedingungen verwendet werden, da zum Zeitpunkt der Auswertung der Übergangsbedingung die Aktivität noch nicht erzeugt ist. Dieses Dokument teilt die Workflow-Funktionen in folgenden Gruppen auf:
- Funktionen für Prozesse (Process functions)
- Funktionen für Aktivitäten (Activity functions)
- Funktionen für Bearbeiter (Editor functions)
- Funktionen für Aktivitätsergebnisse (Activity results functions)
- Funktionen für E-Mail-Nachrichten und E-Mail-Knoten (E-Mail functions)
- Funktionen für Service-Knoten (Service node functions)
- Funktionen für Webservice-Knoten
- Befehle für dynamische Indikatoren (Dynamic indicator commands)
- Funktionen für Cockpit-Anwendungen (Cockpit functions)
Funktionen für Prozesse (Process functions)
Zu den Funktionen für Prozesse gehören sowohl Befehle, welche die Eigenschaften des zu erzeugenden Prozesses festlegen, als auch Funktionen, um Eigenschaften abzufragen, die sich mithilfe der vorgegebenen Prozessparameter nur schlecht abfragen lassen:
abortProcess
Name | abortProcess |
Beschreibung | Bricht die Aktivitätserzeugung ab und beendet den Prozess. |
Signaturen | abortProcess() |
Parameter | Keine. |
Ergebnis | In der Funktion create eines Startknotens bricht abortProcess die Prozesserzeugung ab, ohne den Prozess und die Startaktivität zu erzeugen. Wird abortProcess in einem anderen Knoten als dem Startknoten verwendet, werden alle noch offenen Aktivitäten unbearbeitet erledigt und der Prozess endet über den Fehlerknoten mit dem Fehlercode WFL-00576 Process aborted. |
Fehlerquellen | Die Verwendung von abortProcess in einer anderen Funktion als create kann zu einem Fehler führen. |
Beispiele | abortProcess() in der Funktion create eines Startknotens bricht die Prozesserzeugung ab. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Der Befehl abortProcess kann z. B. dann verwendet werden, wenn die Übergangsbedingung im gleichnamigen Feld der Aktivitätsdefinition für den Startknoten nicht komplett abgebildet werden kann, z. B. aus Platz- oder Performanzgründen. |
Siehe auch | abort |
Folgendes Beispiel stammt aus dem Startknoten einer Prozessdefinition. Beim Löschen einer Instanz des Business Objects com.cisag.app.inventory.obj.UnitOnhand
bricht die Prozesserzeugung ab, wenn nicht sämtliche Stellplätze des Lagerplatzes leer sind. Diese Prüfung wurde nicht nur aus Platzgründen aus der Übergangsbedingung in die Funktion create
verlagert. Die Verlagerung vermeidet auch einen unnötigen Datenbankzugriff, wenn die Übergangsbedingung aufgrund weiterer Kriterien den Wert false
besitzt.
function create() { /* if the storage location has more UnitOnhand then the location is not empty */ if (cast(Number, getResultList("SELECT COUNT(*) FROM com.cisag.app.inventory.obj.UnitOnhand uoh WHERE uoh:storageLocation = ?", list(parameters.oldObject:storageLocation), 1)[0][0]) > 0) { abortProcess(); } }
processOwner
Name | processOwner |
Beschreibung | Gibt eine Liste mit den Prozessverantwortlichen zurück. |
Signaturen | Guid[] processOwner() |
Parameter | Keine. |
Ergebnis | Die Funktion processOwner gibt eine Liste mit den Guids der Prozessverantwortlichen zurück. Besitzt der Prozess keinen zuständigen Benutzer, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Keine. |
Beispiele | isEmpty(processOwner()) prüft, ob dem Prozess ein verantwortlicher Benutzer zugeordnet ist.
Folgendes Skript gibt die Namen aller Prozessverantwortlichen ins Protokoll aus: var owners := processOwner(); for (u as Guid : owners) { echo(userName(u)); } |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch |
Beispiel: processOwner
Folgendes Beispiel aus der Aktivitätsdefinition help.processOwner gibt die Guids aller Prozessverantwortlichen zurück.
function create() { const ProcessOwnerOrigin as valueSet(com.cisag.sys.workflow.ProcessOwnerOrigin); var owners as Guid[]; var ownerNames as String; var pd := getByBusinessKey("REPOSITORY", CisObject(com.cisag.sys.workflow.obj.ProcessDefinition), parameters.PROCESS_DEFINITION, parameters.ORIGIN); if (definition->ProcessDefinition:processData.sourceOfOwner = ProcessOwnerOrigin.WORKFLOW_ROLE) { if (not isNull(definition->ProcessDefinition:ownerRole)) owners := resolveRole(definition->ProcessDefinition:ownerRole); } else { if (not isNull(definition->ProcessDefinition:owner)) owners := list(userGuid(definition->ProcessDefinition:owner)); } for (u : owners) { ownerNames := ownerNames + " " + userName(u); } result.OWNERS := trim(ownerNames); }
setProcessWorkDuration
Name | setProcessWorkDuration |
Beschreibung | Ersetzt den Wert des Feldes Bearbeitungsdauer in der Prozessdefinition. |
Signaturen | setProcessWorkDuration(Number milliseconds) |
Parameter | milliseconds ist die Bearbeitungsdauer in Millisekunden. |
Ergebnis | Die Funktion setProcessWorkDuration ersetzt den Wert des Feldes Bearbeitungsdauer in der Prozessdefinition. Ist milliseconds negativ, wird die Bearbeitungsdauer auf den Wert 0 gesetzt. |
Fehlerquellen | Keine. |
Beispiele | setProcessWorkDuration(3600*24*1000) setzt die Bearbeitungsdauer auf 24 Stunden. Der Zeitpunkt im Feld Endzeitpunkt des Prozesses ist genau 24 Stunden nach dem Zeitpunkt im Feld Beginnzeitpunkt. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Eine nachträgliche Änderung des geplanten Endzeitpunkts kann zu einem Statuswechsel des Prozesses führen. Die Änderung hat keine Auswirkung auf die Terminierung von bereits erzeugten Aktivitäten. |
Siehe auch | setActivityWorkDuration |
Funktionen für Aktivitäten (Activity functions)
Zu den Funktionen für Aktivitäten gehören vor allem Befehle, um die Eigenschaften der zu erzeugenden Aktivität festzulegen. Solche Befehle können nur in der Funktion create
der Deklarationen verwendet werden.
- abort
- addAttachment
- formatDescription
- formatDescriptionHTML
- formatSubject
- primaryAttachment
- setActivityCategory
- setActivityPriority
- setActivityResult
- setActivityWorkDelay
- setActivityWorkDuration
- setSeriesDuration
abort
Name | abort |
Beschreibung | Bricht die Aktivitätserzeugung ab. |
Signaturen | abort() |
Parameter | Keine. |
Ergebnis | In der Funktion create bricht abort die Aktivitätserzeugung ab, ohne die Aktivität zu erzeugen. |
Fehlerquellen | Die Verwendung von abort in einer anderen Funktion als create kann zu einem Fehler führen.
Wird |
Beispiele | abort() in der Funktion create einer Aktivitätsdefinition des Typs Einzelaktivität bricht die Aktivitätserzeugung ab, ohne die Aktivität zu erzeugen. |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | Der Befehl abort kann z. B. dann verwendet werden, wenn die Übergangsbedingung im gleichnamigen Feld einer Aktivitätsdefinition für eine Einzelaktivität nicht komplett abgebildet werden kann, z. B. aus Platz- oder Performanzgründen. |
Siehe auch | abortProcess |
addAttachment
Name | addAttachment |
Beschreibung | Fügt der Aktivität eine Verknüpfung zu einem Business Object hinzu. |
Signaturen | addAttachment(CisObject object) |
Parameter | object ist das Business Object, das mit der Aktivität verknüpft werden soll. |
Ergebnis | Der Befehl addAttachment fügt der Aktivität eine Verknüpfung zu einem Business Object hinzu.
Bei einem Ereignis des Typs Benutzeraktion wird das im Ereignisparameter |
Fehlerquellen | Wenn object und die Aktivität nicht in derselben Datenbank gespeichert sind, entsteht ein Laufzeitfehler. |
Beispiele | addAttachment(parameters.object) in der Funktion create eines Startknoten verknüpft das Business Object, für welches das Ereignis ausgelöst wurde, mit der Aktivität.
|
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Die zuerst mithilfe des Befehls addAttachment hinzugefügte Verknüpfung gilt als bevorzugte Verknüpfung. Auf dem Karteireiter Verknüpfungen der Anwendung Aktivitäten ist es möglich, eine beliebige Verknüpfung als bevorzugt zu kennzeichnen.
Ist eine Benutzer-Aktivität nicht mit einer Anwendung verknüpft, wird beim Öffnen der Aufgabe das bevorzugt verknüpfte Business Object geöffnet. Über das Kontextmenü der Aufgabe sowie über den Karteireiter Verknüpfungen der Anwendung Aktivitäten können alle mit der Aktivität verknüpften Business Objects geöffnet werden. In der Anwendung Cockpit: Aktivitäten/OLTP-Datenbank und Cockpit: Aktivitäten/Repository-Datenbank kann nach Aktivitäten mithilfe deren verknüpften Business Objects gesucht werden. Ist ein Business Object mit dem Startknoten eines Prozesses verknüpft, dann ist eine Suche auch in den Anwendungen Cockpit: Prozesse-OLTP-Datenbank und Cockpit: Prozesse/Repository-Datenbank möglich. Das Suchfeld für das verknüpfte Business Object kann mithilfe der Aktionen Aktivitäten abfragen und Prozesse abfragen im Kontextmenü von Business Entities vorbelegt werden. |
Siehe auch | primaryAttachment |
formatDescription
Name | formatDescription |
Beschreibung | Ersetzt einen Platzhalter in der Beschreibung der Aktivität durch einen konkreten Wert. |
Signaturen | formatDescription(String name, String value) |
Parameter | name ist der Name des Platzhalters.
|
Ergebnis | Der Befehl formatDescription ersetzt alle Vorkommnisse des Platzhalters name im Texteditor-Feld Beschreibung der Aktivitätsdefinition durch den konkreten Wert value , der in der Aktivität angezeigt werden soll. |
Fehlerquellen | Ist die Aktivität bereits erzeugt, kann die Beschreibung der Aktivität nicht mehr geändert werden. D. h. der Befehl formatDescription kann nur in der Funktion create verwendet werden. |
Beispiele | formatDescription("item", loadItem("10010"):number) in der Funktion create ersetzt alle Vorkommnisse des Platzhalters item durch die Nummer des Artikels 10010.
Der Befehl |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | formatDescriptionHTML, formatSubject |
formatDescriptionHTML
Name | formatDescriptionHTML |
Beschreibung | Ersetzt einen Platzhalter in der Beschreibung der Aktivität durch ein HTML-Fragment. |
Signaturen | formatDescriptionHTML(String key, String value) |
Parameter | name ist der Name des Platzhalters.
|
Ergebnis | Der Befehl formatDescription ersetzt alle Vorkommnisse des Platzhalters name im Texteditor-Feld Beschreibung der Aktivitätsdefinition durch den konkreten Wert value , der in der Aktivität angezeigt werden soll. |
Fehlerquellen | Ist die Aktivität bereits erzeugt, kann die Beschreibung der Aktivität nicht mehr geändert werden. D. h. der Befehl formatDescriptionHTML kann nur in der Funktion create verwendet werden. |
Beispiele | formatDescriptionHTML("item", loadItem("10010"):number) in der Funktion create ersetzt alle Vorkommnisse des Platzhalters item durch die Nummer des Artikels 10010.
Der Befehl |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | formatDescription, formatSubject, toHtml (siehe Artikel System-Skriptsprache: Allgemeine Funktionen, Funktionen für Zeichenketten (String functions)), getURL (siehe Artikel |
Beispiel: Tabelle mit Hyperlinks in einer E-Mail-Nachricht
Folgendes Beispiel gibt die Artikelbezeichnung des Test-Artikels 10010 in allen aktiven Inhaltssprachen aus. Zunächst ermittelt die FunktiongetCisObjectList
die aktiven Inhaltssprachen. Danach wird der Test-Artikel einmal für jede aktive Inhaltssprache geöffnet, um die Bezeichnung in der jeweiligen Sprache zu ermitteln. Das Eregbnis wird als Zeile in einer HTML-Tabelle festgehalten. Mithilfe der Funktion getURL und eines Anchor-Tags in HTML wird die Artikelnummer als klickbarer Hyperlink in der Aktivitätsbezeichnung angezeigt.
function create() { /* item number of this example */ const ItemNumber := "10010"; /* get system and database names */ var systemName := getSystemName(); var databaseName := getDatabaseName(); /* get system and database Guid */ var system := getByBusinessKey("CONFIGURATION", CisObject(com.cisag.sys.configuration.obj.System), systemName, 1); var database := getByBusinessKey("CONFIGURATION", CisObject(com.cisag.sys.configuration.obj.Database), system:guid, databaseName, 1); /* query configuration database for active content languages */ var params as Unknown[]; add(params, database:guid); add(params, 1); /* active version */ var activeLanguages := getCisObjectList("CONFIGURATION", "SELECT FROM com.cisag.sys.configuration.obj.DatabaseLanguage o WHERE o:databaseGuid = ? AND o:version = ?", params, 99); /* build HTML table with one row for each content language */ var item as CisObject(com.cisag.app.general.obj.Item); var url := getURL(loadItem(ItemNumber)); var htmlTable := "<table>" + char(13); for (l as CisObject(com.cisag.sys.configuration.obj.DatabaseLanguage) : activeLanguages) { setNLSContentLanguage(l:language); item := loadItem(ItemNumber); htmlTable := htmlTable + "<tr><td><a href=\"" + url + "\">" + item:number + "</a></td><td>" + l:language + "</td><td>" + item:description + "</td></tr>" + char(13); echo(htmlTable); } htmlTable := htmlTable + "</table>"; /* format activity */ formatDescriptionHTML("table", htmlTable); }
Um sich das Öffnen die beiden Business Objects System
und Database
zu ersparen, könnte eine Aktivitätsdefinition des Typs Funktionsaufruf die Guid der Datenbank zurückgeben. Die Aktivitätsdefinition müsste in JavaScript erfasst werden und könnte wie folgt aussehen:
function create() { var db = Java.type('com.cisag.pgm.appserver.CisEnvironment').getInstance(); result.GUID = com.cisag.pgm.datatype.Guid.toHexString(db.getDatabaseGuid()); }
Die GUID wird über den Ergebnisparameter GUID zurückgegeben. Die Funktion create
würde würde dann wie folgt beginnen:
function create() { /* item number of this example */ const ItemNumber := "10010"; /* query configuration database for active content languages in the database */ var params as Unknown[]; add(params, @getDatabaseGuid().GUID; add(params, 1); /* active version */ var activeLanguages := getCisObjectList("CONFIGURATION", "SELECT FROM com.cisag.sys.configuration.obj.DatabaseLanguage o WHERE o:databaseGuid = ? AND o:version = ?", params, 99);
formatSubject
Name | formatSubject |
Beschreibung | Ersetzt einen Platzhalter im Betreff der Aktivität durch einen konkreten Wert. |
Signaturen | formatSubject(String key, String value) |
Parameter | key ist der Name des Platzhalters.
|
Ergebnis | Der Befehl formatSubject ersetzt alle Vorkommnisse des Platzhalters key im Feld Betreff der Aktivitätsdefinition durch den konkreten Wert value , der in der Aktivität angezeigt werden soll. |
Fehlerquellen | Ist die Aktivität bereits erzeugt, kann der Betreff der Aktivität nicht mehr geändert werden. D. h. der Befehl formatSubject kann nur in der Funktion create verwendet werden. |
Beispiele | formatSubject("item", loadItem("10010"):number) in der Funktion create ersetzt den Platzhalter item
durch die Nummer des Artikels 10010. Der Befehl |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | formatDescription, formatDescriptionHTML |
primaryAttachment
Name | primaryAttachment |
Beschreibung | Gibt das Business Object der bevorzugten Verknüpfung zurück. |
Signaturen | CisObjectReference primaryAttachment() |
Parameter | Keine. |
Ergebnis | Die Funktion primaryAttachment gibt eine Referenz zum Business Object der bevorzugten Verknüpfung der Aktivität zurück. Besitzt die Aktivität keine Verknüpfungen, wird der Standardwert null des Datentypen CisObjectReference zurückgegeben.
Bei einem Ereignis des Typs Benutzeraktion wird das im Ereignisparameter |
Fehlerquellen | Keine. |
Beispiele | isNull(primaryAttachment()) prüft, ob die Aktivität eine Verknüpfung besitzt.
|
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | Die zuerst mithilfe des Befehls addAttachment hinzugefügte Verknüpfung gilt als bevorzugte Verknüpfung. In dem Karteireiter Verknüpfungen der Anwendung Aktivitäten ist es möglich, eine beliebige Verknüpfung als bevorzugt festzulegen.
Ist eine Benutzer-Aktivität nicht mit einer Anwendung verknüpft, wird beim Öffnen der Aufgabe das bevorzugt verknüpfte Business Object geöffnet. Über das Kontextmenü der Aufgabe sowie über den Karteireiter Verknüpfungen der Anwendung Aktivitäten können alle mit der Aktivität verknüpften Business Objects geöffnet werden. In der Anwendung Cockpit: Aktivitäten/OLTP-Datenbank und Cockpit: Aktivitäten/Repository-Datenbank kann nach Aktivitäten über deren verknüpfte Business Objects gesucht werden. Ist ein Business Object mit dem Startknoten eines Prozesses verknüpft, dann ist eine Suche auch in den Anwendungen Cockpit: Prozesse-OLTP-Datenbank und Cockpit: Prozesse/Repository-Datenbank möglich. Das Suchfeld für das verknüpfte Business Object kann mithilfe der Aktionen Aktivitäten abfragen und Prozesse abfragen im Kontextmenü von Business Entities vorbelegt werden. |
Siehe auch | addAttachment |
setActivityCategory
Name | setActivityCategory |
Beschreibung | Legt die Kategorie der Aktivität fest. |
Signaturen | setActivityCategory(String categoryConstant) |
Parameter | categoryConstant ist ein konstanter Wert des ValueSets com.cisag.sys.workflow.ActivityClass :
|
Ergebnis | Der Befehl setActivityCategory legt die Kategorie der Aktivität und somit auch das Icon der Aufgaben im andockbaren Fenster Aufgaben suchen fest. Die in der Aktivitätsdefinition ausgewählte Kategorie wird durch diesen Befehl geändert. |
Fehlerquellen | Ist die Aktivität bereits erzeugt, kann die Kategorie nicht mehr geändert werden. D. h. der Befehl setActivityCategory kann nur in der Funktion create verwendet werden. |
Beispiele | setActivityCategory("EMAIL") weist der Aktivität die Kategorie E-Mail zu. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setActivityPriority |
setActivityPriority
Name | setActivityPriority |
Beschreibung | Legt die Priorität der Aktivität fest. |
Signaturen | setActivityPriority(Number priorityId) |
Parameter | priorityId ist ein numerischer Wert des ValueSets com.cisag.sys.workflow.ActivityPriority . Ist priorityId kleiner als 1 oder größer als 9, wird der kleinste bzw. der größte zulässige Wert verwendet. |
Ergebnis | Der Befehl setActivityPriority legt die Priorität der Aktivität und somit auch das Icon für die Priorität der Aufgaben im andockbaren Fenster Aufgaben suchen fest. Die in der Aktivitätsdefinition ausgewählte Priorität wird durch diesen Befehl geändert. |
Fehlerquellen | Ist die Aktivität bereits erzeugt, kann die Priorität nicht mehr geändert werden. D. h. der Befehl setActivityPriority kann nur in der Funktion create verwendet werden. |
Beispiele | setActivityPriority(1) weist der Aktivität die höchste Priorität zu.
|
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setActivityCategory |
setActivityResult
Name | setActivityResult |
Beschreibung | Legt das Ergebnis der Aktivität fest. |
Signaturen | setActivityResult(String result) |
Parameter | result ist das Ergebnis der Aktivität als eine Zeichenkette. |
Ergebnis | Der Befehl setActivityResult legt das Ergebnis der Aktivität fest. Das Ergebnis wird in der Anwendung Aktivitäten auf dem Karteireiter Ergebnisse im Feld Ergebnis angezeigt. Das Ergebnis kann auch in der Funktion create gesetzt werden, bevor die Aktivität erzeugt wurde. |
Fehlerquellen | Durch das Datenmodell ist das Ergebnis auf 80 Zeichen begrenzt. |
Beispiele | setActivityResult("Hello World!") weist legt das Ergebnis der Aktivität auf Hello World! fest. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch |
setActivityWorkDelay
Name | setActivityWorkDelay |
Beschreibung | Legt die Zeitdauer bis zum Beginn des Bearbeitungszeitraums fest. |
Signaturen | setActivityWorkDelay(Number seconds) |
Parameter | seconds ist die Zeitdauer in Sekunden bis zum Beginn des Bearbeitungszeitraums. |
Ergebnis | Der Befehl setActivityWorkDelay legt die Zeitdauer in Sekunden bis zum Beginn des Bearbeitungszeitraums der zu erzeugenden Aktivität fest. Die im Feld Beginn in der Aktivitätsdefinition eingetragene Zeitdauer wird durch diesen Befehl geändert. |
Fehlerquellen | Ist die Aktivität bereits erzeugt, kann die Zeitdauer nicht mehr geändert werden. D. h. der Befehl setActivityWorkDelay kann nur in der Funktion create verwendet werden. |
Beispiele | setActivityWorkDelay(3600) legt die Zeitdauer bis zum Beginn des Bearbeitungszeitraums auf eine Stunde fest.
|
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Die Zeitdauer wird zum Wert des Attributs creationTime der Aktivität hinzugefügt. |
Siehe auch | setActivityWorkDuration |
setActivityWorkDuration
Name | setActivityWorkDuration |
Beschreibung | Legt die Bearbeitungsdauer fest. |
Signaturen | setActivityWorkDuration(Number seconds) |
Parameter | seconds ist eine Zeitdauer in Sekunden. |
Ergebnis | Der Befehl setActivityWorkDuration legt die Bearbeitungsdauer in Sekunden fest. Die im Feld Bearbeitungsdauer der Aktivitätsdefinition eingetragene Zeitdauer wird durch diesen Befehl geändert. |
Fehlerquellen | Ist die Aktivität bereits erzeugt, kann die Bearbeitungsdauer nicht mehr geändert werden. D. h. der Befehl setActivityWorkDuration kann nur in der Funktion create verwendet werden. |
Beispiele | setActivityWorkDuration(3600) legt die Bearbeitungsdauer auf eine Stunde nach dem Beginn des Bearbeitungszeitraums fest.
Ist die Zeitdauer bis zum Beginn des Bearbeitungszeitraums 0 und die Aktivität beginnt sofort, dann legt Wurde der Beginn des Bearbeitungszeitraums auf den Anfang des darauffolgenden Tages mithilfe des Befehls
|
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Die Bearbeitungsdauer wird zum Beginn des Bearbeitungszeitraumes hinzugefügt. |
Siehe auch | setActivityWorkDelay |
setSeriesDuration
Name | setSeriesDuration |
Beschreibung | Legt die Seriendauer fest. |
Signaturen | setSeriesDuration(Number seconds) |
Parameter | seconds ist eine Zeitdauer in Sekunden. |
Ergebnis | Der Befehl setSeriesDuration legt die Seriendauer einer Aktivität des Typs Serienvorlage oder Time-Ereignis in Sekunden fest. Die im Feld Seriendauer der Aktivitätsdefinition eingetragene Zeitdauer wird durch diesen Befehl geändert. |
Fehlerquellen | Ist die Aktivität bereits erzeugt, kann die Bearbeitungsdauer nicht mehr geändert werden. D. h. der Befehl setSeriesDuration kann nur in der Funktion create verwendet werden. |
Beispiele | setSeriesDuration(3600 * 24 * 7) legt die Seriendauer auf eine Woche fest. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setActivityWorkDuration |
Funktionen für Bearbeiter (Editor functions)
Zu den Funktionen für Bearbeiter gehören vor allem Funktionen, um die Bearbeiter mit Aufgaben eines bestimmten Status zu ermitteln. Diese Funktionen können z. B. verwendet werden, um Bearbeiter für eine Folgeaktion bei Zeitüberschreitung zu ermitteln:
- activeParticipants
- activeWorkers
- allParticipants
- allWorkers
- canceledWorkers
- closedWorkers
- currentParticipants
- currentWorkers
- doneWorkers
- forwardedWorkers
- overdueWorkers
activeParticipants
Name | activeParticipants |
Beschreibung | Gibt die aktiven beteiligten Benutzer am Prozess zurück. |
Signaturen | Guid[] activeParticipants() |
Parameter | Keine. |
Ergebnis | Die Funktion activeParticipants gibt eine Liste mit den Guids aller aktiven beteiligten Benutzer am Prozess zurück. Ein Benutzer gilt als aktiver Beteiligter, wenn dieser eine Aufgabe im Status In Bearbeitung besitzt. Hat der Prozess keine aktiven beteiligten Benutzer, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Wird die Funktion activeParticipants in einer Aktivitätsdefinition verwendet, die nicht mit einer Prozessdefinition verknüpft ist, bricht die Auswertung mit einem Fehler ab. |
Beispiele | Der Ausdruck size(activeParticipants()) gibt die Anzahl der beteiligten Benutzer mit einer offenen Aufgabe im Prozess zurück.
Folgendes Skript gibt die Namen aller beteiligten Benutzer mit einer offenen Aufgabe ins Protokoll aus: var users := activeParticipants(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | activeWorkers, allParticipants, currentParticipants |
activeWorkers
Name | activeWorkers |
Beschreibung | Gibt die aktiven Bearbeiter der Aktivität zurück. |
Signaturen | Guid[] activeWorkers() |
Parameter | Keine. |
Ergebnis | Die Funktion activeWorkers gibt eine Liste mit den Guids aller aktiven Bearbeiter der Aktivität zurück. Ein Bearbeiter gilt als aktiv, wenn er eine Aufgabe im Status In Bearbeitung besitzt. Hat der Prozess keinen aktiven Bearbeiter, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Keine. |
Beispiele | Der Ausdruck size(activeWorkers()) gibt die Anzahl der Bearbeiter mit einer offenen Aufgabe zurück.
Folgendes Skript gibt die Namen aller Benutzer mit einer offenen Aufgabe ins Protokoll aus: var users := activeWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | activeParticipants, allWorkers, canceledWorkers, closedWorkers, currentWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
allParticipants
Name | allParticipants |
Beschreibung | Gibt alle beteiligten Benutzer am Prozess zurück. |
Signaturen | Guid[] allParticipants() |
Parameter | Keine. |
Ergebnis | Die Funktion allParticipants gibt eine Liste mit den Guids aller beteiligten Benutzer am Prozess zurück. Ein Benutzer gilt als Beteiligter, wenn dieser eine mit dem Prozess verknüpfte Aufgabe besitzt. Der Status der Aufgabe spielt dabei keine Rolle. Hat der Prozess keine beteiligten Benutzer, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Wird die Funktion allParticipants in einer Aktivitätsdefinition verwendet, die nicht mit einer Prozessdefinition verknüpft ist, bricht die Auswertung mit einem Fehler ab. |
Beispiele | Der Ausdruck size(allParticipants()) gibt die Anzahl aller am Prozess beteiligten Benutzer zurück.
Folgendes Skript gibt die Namen aller am Prozess beteiligten Benutzer ins Protokoll aus: var users := allParticipants(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | allWorkers, activeParticipants, currentParticipants |
Beispiel: possibleParticipants
Folgendes Beispiel aus der Aktivitätsdefinition help.possibleParticipants gibt mögliche Bearbeiter aller Aktivitätsdefinitionen einer Prozessdefinition zurück.
function create() { const PerformerType as valueSet(com.cisag.sys.workflow.PerformerType); const ProcessOwnerOrigin as valueSet(com.cisag.sys.workflow.ProcessOwnerOrigin); var users as Guid[]; var userNames as String; var pd := getByBusinessKey("REPOSITORY", CisObject(com.cisag.sys.workflow.obj.ProcessDefinition), parameters.PROCESS_DEFINITION, parameters.ORIGIN); var OQL := "SELECT FROM com.cisag.sys.workflow.obj.ActivityDefinition ad WHERE ad:processDefinition = ?"; var adList := getCisObjectList("REPOSITORY", OQL, list(pd:guid), 100); for (ad as CisObject(com.cisag.sys.workflow.obj.ActivityDefinition) : adList) { if (ad:data.performer.type = PerformerType.ROLE) { users := union(users, resolveRole(ad:data.performer.guid)); } if (ad:data.performer.type = PerformerType.USER) { users := union(users, list(ad:data.performer.guid)); } if (ad:data.performer.type = PerformerType.INITIATOR) { users := union(users, list(userGuid("process.Initiator"))); } if (ad:data.performer.type = PerformerType.OWNER) { if (pd:processData.sourceOfOwner = ProcessOwnerOrigin.PROCESS_DEFINITION) users := union(users, list(userGuid(pd:owner))); if (pd:processData.sourceOfOwner = ProcessOwnerOrigin.WORKFLOW_ROLE) users := union(users, resolveRole(pd:ownerRole)); } } for (u : users) { userNames := userNames + " " + userName(u); } result.PARTICIPANTS := trim(userNames); }
allWorkers
Name | allWorkers |
Beschreibung | Gibt alle Bearbeiter der Aktivität zurück. |
Signaturen | Guid[] activeWorkers() |
Parameter | Keine. |
Ergebnis | Die Funktion activeWorkers gibt eine Liste mit den Guids aller aktiven Bearbeiter der Aktivität zurück. Ein Benutzer gilt als Bearbeiter, wenn dieser eine mit der Aktivität verknüpfte Aufgabe besitzt. Der Status der Aufgabe spielt dabei keine Rolle. Hat die Aktivität keine Bearbeiter, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Keine. |
Beispiele | Der Ausdruck size(allWorkers()) gibt die Anzahl der Bearbeiter mit einer offenen Aufgabe zurück.
Folgendes Skript gibt die Namen aller Benutzer mit einer offenen Aufgabe ins Protokoll aus: var users := activeWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | allParticipants, activeWorkers, canceledWorkers, closedWorkers, currentWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
canceledWorkers
Name | canceledWorkers |
Beschreibung | Gibt alle Bearbeiter mit einer ohne Änderungen erledigten Aufgabe zurück. |
Signaturen | Guid[] canceledWorkers() |
Parameter | Keine. |
Ergebnis | Die Funktion canceledWorkers gibt eine Liste mit den Guids aller Benutzer zurück, die eine mit der Aktivität verknüpfte Aufgabe im Status Unbearbeitet erledigt besitzen. Hat die Aktivität keinen Bearbeiter mit einer unbearbeitet erledigten Aufgabe, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Keine. |
Beispiele | Der Ausdruck size(canceledWorkers()) gibt die Anzahl der Bearbeiter mit einer unbearbeitet erledigten Aufgabe zurück.
Der Ausdruck Folgendes Skript gibt die Namen aller Benutzer mit einer unbearbeitet erledigten Aufgabe ins Protokoll aus: var users := canceledWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | activeWorkers, allWorkers, closedWorkers, currentWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
closedWorkers
Name | closedWorkers |
Beschreibung | Gibt alle Bearbeiter mit einer gesperrten Aufgabe zurück. |
Signaturen | Guid[] closedWorkers() |
Parameter | Keine. |
Ergebnis | Die Funktion closedWorkers gibt eine Liste mit den Guids aller Benutzer zurück, die eine mit der Aktivität verknüpfte Aufgabe im Status Gesperrt besitzen. Hat die Aktivität keinen Bearbeiter mit einer gesperrten Aufgabe, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Keine. |
Beispiele | Der Ausdruck size(closedWorkers()) gibt die Anzahl der Bearbeiter mit einer gesperrten Aufgabe zurück.
Folgendes Skript gibt die Namen aller Benutzer mit einer gesperrten Aufgabe ins Protokoll aus: var users := closedWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | activeWorkers, allWorkers, canceledWorkers, currentWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
currentParticipants
Name | currentParticipants |
Beschreibung | Gibt die zurzeit beteiligten Benutzer am Prozess zurück. |
Signaturen | Guid[] currentParticipants() |
Parameter | Keine. |
Ergebnis | Die Funktion currentParticipants gibt eine Liste mit den Guids aller zurzeit am Prozess beteiligten Benutzer zurück. Dazu zählen Benutzer, die einer Aufgabe mit einem der folgenden Status zugeordnet sind:
Ist zurzeit kein Benutzer am Prozess beteiligt, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Wird die Funktion currentParticipants in einer Aktivitätsdefinition verwendet, die nicht mit einer Prozessdefinition verknüpft ist, bricht die Auswertung mit einem Fehler ab. |
Beispiele | Der Ausdruck size(currentParticipants()) gibt die Anzahl der zurzeit beteiligten Benutzer zurück.
Folgendes Skript gibt die Namen aller zurzeit beteiligten Benutzer ins Protokoll aus: var users := currentParticipants(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | currentWorkers, activeParticipants, allParticipants |
currentWorkers
Name | currentWorkers |
Beschreibung | Gibt alle Bearbeiter mit einer offenen Aufgabe zurück. |
Signaturen | Guid[] currentWorkers() |
Parameter | Keine. |
Ergebnis | Die Funktion currentWorkers gibt eine Liste mit den Guids aller Benutzer zurück, die eine mit der Aktivität verknüpfte Aufgabe in einem der folgenden Status besitzen:
Hat die Aktivität keinen Bearbeiter mit einer offenen Aufgabe, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Keine. |
Beispiele | Der Ausdruck size(currentWorkers()) gibt die Anzahl der Bearbeiter mit einer offenen Aufgabe zurück.
Der Ausdruck Folgendes Skript gibt die Namen aller Benutzer mit einer offenen Aufgabe ins Protokoll aus: var users := currentWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | currentParticipants, activeWorkers, allWorkers, canceledWorkers, closedWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
doneWorkers
Name | doneWorkers |
Beschreibung | Gibt alle Bearbeiter mit einer erledigten Aufgabe zurück. |
Signaturen | Guid[] doneWorkers() |
Parameter | Keine. |
Ergebnis | Die Funktion doneWorkers gibt eine Liste mit den Guids aller Benutzer zurück, die eine mit der Aktivität verknüpfte Aufgabe im Status Erledigt besitzen. Hat die Aktivität keinen Bearbeiter mit einer erledigten Aufgabe, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Keine. |
Beispiele | Der Ausdruck size(doneWorkers()) gibt die Anzahl der Bearbeiter mit einer erledigten Aufgabe zurück.
Der Ausdruck Folgendes Skript gibt die Namen aller Benutzer mit einer erledigten Aufgabe ins Protokoll aus: var users := doneWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | activeWorkers, allWorkers, canceledWorkers, closedWorkers, currentWorkers, forwardedWorkers, overdueWorkers |
forwardedWorkers
Name | forwardedWorkers |
Beschreibung | Gibt alle Bearbeiter mit einer weitergeleiteten Aufgabe zurück. |
Signaturen | Guid[] forwardedWorkers() |
Parameter | Keine. |
Ergebnis | Die Funktion forwardedWorkers gibt eine Liste mit den Guids aller Benutzer zurück, die eine mit der Aktivität verknüpfte Aufgabe im Status Weitergeleitet besitzen. Hat die Aktivität keinen Bearbeiter mit einer weitergeleiteten Aufgabe, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Keine. |
Beispiele | Der Ausdruck size(forwardWorkers()) gibt die Anzahl der Bearbeiter mit einer weitergeleiteten Aufgabe zurück.
Folgendes Skript gibt die Namen aller Benutzer mit einer weitergelieteten Aufgabe ins Protokoll aus: var users := forwardedWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | activeWorkers, allWorkers, canceledWorkers, closedWorkers, currentWorkers, doneWorkers, overdueWorkers |
overdueWorkers
Name | overdueWorkers |
Beschreibung | Gibt alle Bearbeiter mit einer verspäteten Aufgabe zurück. |
Signaturen | Guid[] overdueWorkers() |
Parameter | Keine. |
Ergebnis | Die Funktion overdueWorkers gibt eine Liste mit den Guids aller Benutzer zurück, die eine mit der Aktivität verknüpfte Aufgabe im Status Verspätet besitzen. Hat die Aktivität keinen Bearbeiter mit einer verspäteten Aufgabe, wird eine leere Liste zurückgegeben. |
Fehlerquellen | Keine. |
Beispiele | Der Ausdruck size(overdueWorkers()) gibt die Anzahl der Bearbeiter mit einer verspäteten Aufgabe zurück.
Folgendes Skript gibt die Namen aller Benutzer mit einer verspäteten Aufgabe ins Protokoll aus: var users := overdueWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | activeWorkers, allWorkers, canceledWorkers, closedWorkers, currentWorkers, doneWorkers, forwardedWorkers |
Funktionen für Aktivitätsergebnisse (Activity results functions)
Die Funktionen für Aktivitätsergebnisse initialisieren die Elemente der Dialoge Aktivitätsergebnisse eingeben und Prozessparameter eingeben:
formatEntityField
Name | formatEntityField |
Beschreibung | Initialisiert ein Entityfeld in den Aktivitätsergebnissen. |
Signaturen | formatEntityField(String name, String ldtPath)
|
Parameter | name ist der Name des Entityfeldes.
|
Ergebnis | Der Befehl formatEntityField initialisiert das Ergebnisfeld name des Feldtyps Business Entityfeld oder Business Entity-Verknüpfungsfeld im Dialog Aktivitätsergebnisse eingeben bzw. Prozessparameter eingeben.
Die Hash-Tabelle |
Fehlerquellen | Stimmen der logische Datentyp des Ergebnisfelds und der logische Datentyp ldtPath nicht überein, entsteht ein Laufzeitfehler.
Ein Laufzeitfehler entsteht auch dann, wenn die Vorgabewerte für die Wertehilfe nicht gesetzt werden können. |
Beispiele | formatEntityField("partner", "com.cisag.app.general:Partner.lt") initialisiert das Entityfeld partner gemäß dem logischen Datentyp com.cisag.app.general.Partner .
formatEntityField("partner", "com.cisag.app.sales:SalesOrderNumber.lt", hashMap(customerNumber := "10010", status:=2) initialisiert das Entityfeld partner gemäß dem logischen Datentyp |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Die Funktion erwartet den logischen Datentypen mit einem Doppelpunkt (:) vom Pfad getrennt und mit dem Suffix .lt. Beispielsweise wird der logische Datentyp com.cisag.app.sales.SalesOrderNumber als die Zeichenkette com.cisag.app.sales:SalesOrderNumber.lt an die Funktion übergeben.
Ein passender logischer Datentyp für das Entityfeld lässt sich meist über den Business Key des Business Entitys finden. Beispielsweise besteht der Business Key des Vertriebsauftrags aus den beiden Attributen Das Attribut Nur die im Suchdialog angezeigten Selektionsfelder können vorbelegt werden. Ist in der Spalte Suchmerkmalsposition keine Reihenfolge hinterlegt, dann kann das Attribut in der Regel auch nicht vorbelegt werden. Auch können Selektionsfelder bestimmter Datentypen nicht vorbelegt werden. Um das Selektionsfeld für die Vertriebsauftragsart vorzubelegen ist es z. B. besser, das Attribut Auch wenn die Wertehilfe durch eine Vorbelegung der Selektionsfelder eingeschränkt werden kann, können nicht in der Wertehilfe angebotene Business Entitys durch Kopieren und Einfügen eingegeben werden. Die Vorbelegung der Selektionsfelder ersetzt somit nicht die Prüfung mithilfe der Funktion |
Siehe auch | formatSelectionField |
formatSelectionField
Name | formatSelectionField |
Beschreibung | Initialisiert ein dynamisches Auswahlfeld in den Aktivitätsergebnissen. |
Signaturen | formatSelectionField(String name, HashMap values) |
Parameter | name ist der Name des Auswahlfeldes.
|
Ergebnis | Der Befehl formatSelectionField initialisiert das Ergebnisfeld name im Dialog Aktivitätsergebnisse eingeben bzw. Prozessparameter eingeben.
Der Befehl kann nur in der Funktion |
Fehlerquellen | Das Ergebnisfeld name muss als Dynamisches Auswahlfeld oder Dynamisches Mehrfach-Auswahlfeld definiert sein. |
Beispiele | formatSelectionField("approvalStatus", hashMap(APPROVED:="Yes", REJECTED:="No")) legt die zwei Auswahlwerte APPROVED und REJECTED für das dynamische Auswahlfeld approvalStatus fest. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | In den Funktionen validate und close kann das Ergebnis mithilfe der Variablen results.approvalStatus abgefragt werden. |
Siehe auch | formatEntityField |
Beispiel: Benutzeraktion für ein Dependent
Ein Ereignis des Typs Benutzeraktion ist nur für Business Entitys möglich. Um einen Prozess auch für ein Dependent wie z. B. eine Vertriebsauftragsposition zu starten, wird das dynamische Auswahlfeld details mit der Nummer und Artikelbezeichnung der Vertriebsauftragspositionen initialisiert.
function applyDefaults() { /* initialize dynamic result field with line items */ var hm := new(HashMap); var details := getCisObjectList("SELECT FROM com.cisag.app.sales.obj.SalesOrderDetail o WHERE o:header = ? ORDER BY o:number", list(parameters.object:guid), 100); for (detail as CisObject(com.cisag.app.sales.obj.SalesOrderDetail) : details) { hm[format(detail:number, "0")] := cast(String, detail:number) + " " + detail->Item:number + " " + detail->Item:description; } formatSelectionField("details", hm); }
Folgende Übergangsbedingung deaktiviert die Benutzeraktion im Kontextmenü, wenn der Vertriebsauftrag keine Position besitzt:
parameters.object:detailCount > 0
setResultFieldEditable
Name | setResultFieldEditable |
Beschreibung | Legt die Editierbarkeit eines Ergebnisfeldes fest. |
Signaturen | setResultFieldEditable(String name, Boolean editable) |
Parameter | name ist der Name des Ergebnisfeldes.
|
Ergebnis | Der Befehl setResultFieldEditable legt die Editierbarkeit des Ergebnisfeldes name im Dialog Aktivitätsergebnisse eingeben bzw. Prozessparameter eingeben fest.
Der Befehl kann nur in der Funktion |
Fehlerquellen | Keine. |
Beispiele | setResultFieldEditable("approvalStatus", false) legt fest, dass das Ergebnisfeld approvalStatus nicht editierbar ist. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setResultFieldVisible |
setResultFieldVisible
Name | setResultFieldVisible |
Beschreibung | Legt die Sichtbarkeit eines Ergebnisfeldes fest. |
Signaturen | setResultFieldVisible(String name, Boolean editable) |
Parameter | name ist der Name des Ergebnisfeldes.
|
Ergebnis | Der Befehl setResultFieldVisible legt die Sichtbarkeit des Ergebnisfeldes name im Dialog Aktivitätsergebnisse eingeben bzw. Prozessparameter eingeben fest.
Der Befehl kann nur in der Funktion |
Fehlerquellen | Keine. |
Beispiele | setResultFieldVisible("approvalStatus", false) legt fest, dass das Ergebnisfeld approvalStatus nicht angezeigt wird. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setResultFieldEditable |
Funktionen für E-Mail-Nachrichten und E-Mail-Knoten (E-Mail functions)
Mithilfe der Funktionen für E-Mail-Nachrichten und E-Mail-Knoten können Sie den E-Mail-Versand in diesen beiden Aktivitätstypen konfigurieren:
- addMailAttachment
- setMailLinkTarget
- setMailRecipientsBCC
- setMailRecipientsCC
- setMailRecipientsTo
- setMailReplyTo
- setMailSender
- setMailTemplate
addMailAttachment
Name | addMailAttachment |
Beschreibung | Hängt eine Datei als Anhang an die zu versendende E-Mail. |
Signaturen | addMailAttachment(String fileName, Bytes content) |
Parameter | fileName ist der Dateiname, den der Anhang in der E-Mail bekommt.
|
Ergebnis | Der Befehl addMailAttachment hängt eine Datei als Anhang an die zu versendende E-Mail. Sie können die Funktion readFile verwenden, um diesen Parameter zu berechnen. Dieser Befehl funktioniert nur in Aktivitätsdefinitionen vom Aktivitätstyp E-Mail-Nachricht oder E-Mail-Knoten. |
Fehlerquellen | Keine. |
Beispiele | addMailAttachment("MyFileName.html", readFile("kstore://" + getDatabaseName() + "/Documents/Workflow/Mailtemplate_de.html")) hängt die E-Mail-Vorlage Mailtemplate_de.html aus dem Verzeichnis Workflow im Knowledge Store an die zu versendete E-Mail und benennt den Anhang MyFileName.html. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | readFile (siehe Artikel System-Skriptsprache: Allgemeine Funktionen, Funktionen für Dateien) |
setMailLinkTarget
Name | setMailLinkTarget |
Beschreibung | Setzt den Application-Server für Links in E-Mails. |
Signaturen | setMailLinkTarget(String serverName) |
Parameter | serverName ist der Name des Application-Servers. |
Ergebnis | Der Befehl setMailLinkTarget setzt den Application-Server, dessen URL in den generierten Links der zu versendenden E-Mails verwendet wird. Der übergebene Application-Server wird ignoriert, falls die Ziel-Server für den Empfänger der E-Mail benutzerspezifisch konfiguriert wurden und falls der Application-Server für den Empfänger nicht zugeordnet wurde.
Ohne den Aufruf des Befehls |
Fehlerquellen | Keine. |
Beispiele | setMailLinkTarget(getServerName()) verwendet den Application-Server der aktuellen Laufumgebung für URLs in Links in versendeten E-Mails. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | In Systemen mit einem Application-Server ist keine weitere Konfiguration notwendig. Der Ziel-Server ist der Application-Server, auf dem die Workflow-Engine läuft.
Wenn ein System mehrere Application-Server umfasst, tragen Sie in der Anwendung Systemcockpit bei allen Application-Servern im Feld Ziel-Server für Link-Attribute einen Dialog-Application-Server ein. Dieser Server wird für alle Verknüpfungen in Workflow-E-Mails verwendet, die vom Message-Server versendet werden. Wenn der Ziel-Server abhängig von dem Benutzer ist, können Sie auch in der Anwendung Workflowrollen Workflowrollen-spezifische Ziel-Server zuordnen. |
Siehe auch | formatDescriptionHTML, serverLinkTarget (siehe Artikel System-Skriptsprache: Allgemeine Funktionen, System- und Konfigurationsfunktionen (System and Configuration functions)), setMailTemplate |
setMailRecipientsBCC
Name | setMailRecipientsBCC |
Beschreibung | Setzt den BCC-Empfänger der zu versendenden E‑Mail. |
Signaturen | setMailRecipientsBCC(String mailAddress) |
Parameter | mailAddress ist die E-Mail-Adresse des BCC-Empfängers. Mehrere E-Mail-Adressen können durch ein Komma getrennt angegeben werden. |
Ergebnis | Der Befehl setMailRecipientsBCC setzt den BCC-Empfänger (blind carbon copy) der zu versendenden E‑Mail. |
Fehlerquellen | Dieser Befehl funktioniert nur in Aktivitätsdefinitionen der Aktivitätstypen E-Mail-Nachricht und E-Mail-Knoten. |
Beispiele | setMailRecipientsBCC("workflow@comarch.com") setzt den BCC-Empfänger zu „workflow@comarch.com“. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setMailRecipientsCC, setMailRecipientsTo, setMailReplyTo, setMailSendertsetMailTemplate |
setMailRecipientsCC
Name | setMailRecipientsCC |
Beschreibung | Setzt den CC-Empfänger der zu versendenden E‑Mail. |
Signaturen | setMailRecipientsCC(String mailAddress) |
Parameter | mailAddress ist die E-Mail-Adresse des CC-Empfängers. Mehrere E-Mail-Adressen können durch ein Komma getrennt angegeben werden. |
Ergebnis | Der Befehl setMailRecipientsCC setzt den CC-Empfänger (carbon copy) der zu versendenden E‑Mail. |
Fehlerquellen | Dieser Befehl funktioniert nur in Aktivitätsdefinitionen der Aktivitätstypen E-Mail-Nachricht und E-Mail-Knoten. |
Beispiele | setMailRecipientsCC("workflow@comarch.com") setzt den CC-Empfänger zu „workflow@comarch.com“.
|
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setMailRecipientsBCC, setMailRecipientsTo, setMailReplyTo, setMailSender, setMailTemplate |
setMailRecipientsTo
Name | setMailRecipientsTo |
Beschreibung | Setzt den Empfänger der zu versendenden E‑Mail. |
Signaturen | setMailRecipientsTo(String mailAddress) |
Parameter | mailAddress ist die E-Mail-Adresse des Empfängers. Mehrere E-Mail-Adressen können durch ein Komma getrennt angegeben werden. |
Ergebnis | Der Befehl setMailRecipientsTo setzt den Empfänger der zu versendenden E‑Mail.
Ist der Bearbeiter der Aktivität nicht das System oder ein Verarbeitungsauftrag, sondern ein oder mehrere Benutzer, dann versendet die Workflow-Engine eine E-Mail an jeden dieser Benutzer. Dabei verwendet die Workflow Engine die im Systemcockpit hinterlegte E-Mail-Adresse des Benutzers. Der Befehl |
Fehlerquellen | Dieser Befehl funktioniert nur in Aktivitätsdefinitionen der Aktivitätstypen E-Mail-Nachricht und E-Mail-Knoten. |
Beispiele | setMailRecipientsTo("workflow@comarch.com") setzt den Empfänger zu „workflow@comarch.com“. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setMailRecipientsBCC, setMailRecipientsCC, setMailReplyTo, setMailSender, setMailTemplate |
setMailReplyTo
Name | setMailReplyTo |
Beschreibung | Setzt die Antwort-E-Mail-Adresse der zu versendenden E‑Mail. |
Signaturen | setMailReplyTo(String mailAddress) |
Parameter | mailAddress ist die Antwort-E-Mail-Adresse. |
Ergebnis | Der Befehl setMailReplyTo setzt die Antwort-E-Mail-Adresse der zu versendenden E‑Mail.
Die Workflow Engine verwendet die in der Anwendung E-Mail-Server hinterlegte Antwort-E-Mail-Adresse. Der Befehl |
Fehlerquellen | Dieser Befehl funktioniert nur in Aktivitätsdefinitionen der Aktivitätstypen E-Mail-Nachricht und E-Mail-Knoten.
Der eingesetzte Mail Server kann die Verwendung der mit |
Beispiele | setMailReplyTo("workflow@comarch.com") setzt die Antwort-E-Mail-Adresse zu „workflow@comarch.com“. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setMailRecipientsBCC, setMailRecipientsCC, setMailRecipientsTo, setMailSender, setMailTemplate |
setMailSender
Name | setMailSender |
Beschreibung | Setzt den Absender der zu versendenden E‑Mail. |
Signaturen | setMailSender(String mailAddress) |
Parameter | mailAddress ist die E-Mail-Adresse des Absenders. |
Ergebnis | Der Befehl setMailSender setzt den Absender der zu versendenden E‑Mail.
Die Workflow-Engine verwendet die in der Anwendung E-Mail-Server hinterlegte E-Mail-Adresse für den Absender. Der Befehl |
Fehlerquellen | Dieser Befehl funktioniert nur in Aktivitätsdefinitionen der Aktivitätstypen E-Mail-Nachricht und E-Mail-Knoten.
Der eingesetzte Mail Server kann die Verwendung der mit |
Beispiele | setMailSender("workflow@comarch.com") setzt den Absender zu „workflow@comarch.com“. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setMailRecipientsBCC, setMailRecipientsCC, setMailRecipientsTo, setMailReplyTo, setMailTemplate |
setMailTemplate
Name | setMailTemplate |
Beschreibung | Ändert die E-Mail-Vorlage der zu versendenden E‑Mail. |
Signaturen | setMailtemplate(String templateName) |
Parameter | templateName ist der Name der E-Mail-Vorlage.
Beachten Sie insbesondere, dass Sie den Namen der E-Mail-Vorlage ohne Sprachkürzel und Dateityp angeben müssen. Die Anzeigesprache des Benutzers entscheidet darüber, welche der möglichen Vorlagendateien mit dem angegebenen Namen verwendet wird. Hat z. B. |
Ergebnis | Der Befehl setMailTemplate ändert die E-Mail-Vorlage der zu versendenden E‑Mail. Damit können von der Standard-E-Mail-Vorlage abweichende E-Mail-Vorlagen verwendet werden. Der Befehl funktioniert nicht nur in Aktivitätsdefinitionen der Aktivitätstypen E-Mail-Nachricht und E-Mail-Knoten, sondern gilt in allen Aktivitätstypen für E-Mail-Benachrichtigungen durch die Workflow-Engine, z. B. bei einer Zeitüberschreitung oder einem Fehler im Prozess.
Ist Ist |
Fehlerquellen | Keine. |
Beispiele | setMailTemplate("Mailtemplate") verwendet die E-Mail-Vorlagendateien Mailtemplate_de.html, Mailtemplate_en.html, Mailtemplate_fr.html, u. s. w.
|
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Im Kapitel Anpassung der E-Mail-Vorlagen in der Dokumentation Workflow-Engine ist die Anpassung von E-Mail-Vorlagen beschrieben.
Die Standard-E-Mail-Vorlage ist in der Konstanten |
Siehe auch | setMailRecipientsBCC, setMailRecipientsCC, setMailRecipientsTo, setMailReplyTo, setMailSender |
Funktionen für Service-Knoten (Service node functions)
Die Funktionen für Service-Knoten bieten Möglichkeiten, Aktivität mit einem Verarbeitungsauftrag als Bearbeiter zu konfigurieren:
- formatBatchJobResult
- formatBatchJobOutputResult
- getJobResults
- isJobToBeScheduled
- setJobName
- setJobQueue
- setJobServer
- setJobUser
- setJobVoucherTemplateOutputOptions
- setJobWaitFinish
formatBatchJobResult
Name | formatBatchJobResult |
Beschreibung | Erzeugt einen Text für die Ergebnisse einer Hintergrundverarbeitung. |
Signaturen | formatBatchJobResult(HashMap parameters) |
Parameter | parameters sind die Ereignisparameter des Ereignisses com.cisag.pgm.services.batch.BatchJobStateChanged . |
Ergebnis | Die Hintergrundverarbeitung informiert den Benutzer optional aktiv über den erfolgreichen oder fehlerhaften Abschluss eines Verarbeitungsauftrages. In diesem Fall erscheint im Webbrowser automatisch ein Benachrichtigungs-Dialog, von dem aus mit geeigneten Parametern direkt in die Anwendung Meldungsprotokolle oder Ausgabeaufträge gewechselt werden kann. Alternativ kann die Benachrichtigung über das Workflow-Ereignis com.cisag.pgm.services.batch.BatchJobStateChanged erfolgen. Um eine Benachrichtigung mit dem gleichen bzw. einem ähnlichen Inhalt wie der Benachrichtigungs-Dialog mithilfe einer Aktivitätsdefinition zu versenden, stehen die beiden Funktionen formatBatchJobResult und formatBatchJobOutputResult zur Verfügung, welche die Ereignisparameter direkt in einen Text überführen. |
Fehlerquellen | |
Beispiele | formatBatchJobResult(parameters) formatiert aus den Parametern des Ereignisses com.cisag.pgm.services.batch.BatchJobStateChanged das Ergebnis der Hintergrundverarbeitung. |
Kontext | WF_REPOSITORY |
Hinweise | |
Siehe auch | formatBatchJobOutputResult, isJobToBeScheduled |
formatBatchJobOutputResult
Name | formatBatchJobOutputResult |
Beschreibung | Erzeugt einen Text für die Ausgabe-Ergebnisse einer Hintergrundverarbeitung. |
Signaturen | formatBatchJobOutputResult(HashMap parameters) |
Parameter | parameters sind die Ereignisparameter des Ereignisses com.cisag.pgm.services.batch.BatchJobStateChanged . |
Ergebnis | Die Hintergrundverarbeitung informiert den Benutzer optional aktiv über den erfolgreichen oder fehlerhaften Abschluss eines Verarbeitungsauftrages. In diesem Fall erscheint im Webbrowser automatisch ein Benachrichtigungs-Dialog, von dem aus mit geeigneten Parametern direkt in die Anwendung Meldungsprotokolle oder Ausgabeaufträge gewechselt werden kann. Alternativ kann die Benachrichtigung über das Workflow-Ereignis com.cisag.pgm.services.batch.BatchJobStateChanged erfolgen. Um eine Benachrichtigung mit dem gleichen bzw. einem ähnlichen Inhalt wie der Benachrichtigungs-Dialog mithilfe einer Aktivitätsdefinition zu versenden, stehen die beiden Funktionen formatBatchJobResult und formatBatchJobOutputResult zur Verfügung, welche die Parameter des Ereignisses direkt in einen Text überführen. |
Fehlerquellen | |
Beispiele | formatBatchJobOutputResult(parameters) formatiert aus den Parametern des Ereignisses com.cisag.pgm.services.batch.BatchJobStateChanged das Ausgabe-Ergebnis der Hintergrundverarbeitung. |
Kontext | WF_REPOSITORY |
Hinweise | |
Siehe auch | formatBatchJobResult, isJobToBeScheduled |
getJobResult
Name | getJobResult |
Beschreibung | Gibt das Ergebnis der verknüpften Hintergrundanwendung als eine Hash-Tabelle zurück. |
Signaturen | HashMap getJobResults() |
Parameter | Keine. |
Ergebnis | Die Funktion getJobResult gibt die im Parameter resultParmeters (Schreibweise bitte beachten!) gespeicherten Ergebnisse der Hintergrundanwendung als eine Hash-Tabelle zurück. Diese Ergebnisse sind auf dem Karteireiter Ausführung im Eigenschaften-Dialog des Verarbeitungsauftrags einzusehen.
Ist der Bearbeiter der Aktivität kein Verarbeitungsauftrag, hat der Befehl keine Auswirkung. |
Fehlerquellen | Die Funktion getJobResult liefert nur dann ein zuverlässiges Ergebnis zurück, wenn sie in der Funktion close verwendet wird und die Aktivität auf den Verarbeitungsauftrag wartet, entweder durch Verwendung den Befehl setJobWaitFinish(true) oder durch Aktivieren der Checkbox Auf Verarbeitungsauftrag warten in der Aktivitätsdefinition. |
Beispiele | getJobResult() gibt eine HashTabelle mit den Ergebnissen der Hintergrundanwendung zurück. |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | setJobWaitFinish |
Beispiel: Generierte Inventurzählisten auswerten
Die Aktion CreateCountLists (45)
der Hintergrundanwendung com.cisag.app.inventory.physical.log.PhysicalInventoryCountProcessing
(Inventur-Aktionen veranlassen) gibt eine Liste mit den GUIDs der erzeugten Inventurzähllisten zurück:
{resultParmeters:CisParameterList: {ResultNumberOfSuccessfulResults:1} {ResultPhysicalInventoryCountListGuids:[[B@5570b91]}}
In einem Service-Knoten ruft die Funktion close
die Funktion getJobResults
auf, um die generierten Inventurzähllisten auszuwerten, und gibt die Identifikation der generierten Inventurzähllisten ins Protokoll aus.
function close(state as Number) { var rp as HashMap; var clGenerated as Number; var clGuids as Guid[]; var cl as CisObject(com.cisag.app.inventory.physical.obj.PhysicalInventoryCountList); rp := cast(HashMap, getJobResult().resultParmeters); clGenerated := cast(Number, rp.ResultNumberOfSuccessfulResults); clGuids := cast(Guid[], rp.ResultPhysicalInventoryCountListGuids); echo(format(clGenerated, "0") + " count list(s) generated:"); for (g : clGuids) { cl := getByPrimaryKey(CisObject(com.cisag.app.inventory.physical.obj.PhysicalInventoryCountList), g); echo(cl->PhysicalInventory->Type:code + "-" + cl->PhysicalInventory:number + " " + cl:number); } }
isJobToBeScheduled
Name | isJobToBeScheduled |
Beschreibung | Fragt den Status einer Hintergrundverarbeitung ab. |
Signaturen | Boolean isJobToBeScheduled(Guid guid)
|
Parameter | guid ist die GUID eines Verarbeitungsauftrags.
|
Ergebnis | Die Funktion isJobToBeScheduled fragt den Status einer Hintergrundverarbeitung ab. Dabei wird das Attribut getActivityAbortMode ausgewertet. Die Funktion gibt den Wert true zurück, wenn die Hintergrundverarbeitung eingeplant ist und somit ausgeführt werden kann. |
Fehlerquellen | Keine. |
Beispiele | isJobToBeScheduled(parameters.batchJobGuid) fragt bei dem programmierten Ereignis com.cisag.pgm.services.batch.BatchJobStateChanged (Status eines Verarbeitungsauftrags wurde geändert) ab, ob die Hintergrundverarbeitung eingeplant ist. |
Kontext | WF_ACTIVITY_REPOSITORY |
Hinweise | |
Siehe auch | formatBatchJobResult, formatBatchJobOutputResult |
setJobName
Name | setJobName |
Beschreibung | Legt den Namen für den Verarbeitungsauftrag fest. |
Signaturen | setJobName(String jobName) |
Parameter | jobName ist der Name des Verarbeitungsauftrags. |
Ergebnis | Der Befehl setJobName gibt den Namen für den mit der Aktivität verknüpften Verarbeitungsauftrag an. Der Name wird in der Spalte Name der Anwendung Verarbeitungsaufträge angezeigt. Die Angabe kann somit eine Auswertung der Verarbeitungsaufträge vereinfachen. Wird kein Name festgelegt, wird in der Anwendung Verarbeitungsaufträge kein Name angezeigt.
Ist der Bearbeiter der Aktivität kein Verarbeitungsauftrag, hat der Befehl keine Auswirkung. |
Fehlerquellen | Der Befehl setJobName muss in der Funktion create , also vor der Hintergrundverarbeitung, verwendet werden. |
Beispiele | setJobName(definition:code + " " + activity:number) zeigt die Identifikation der Aktivitätsdefinition und der Aktivität als Name des Verarbeitungsauftrags an. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Der Name eines Verarbeitungsauftrags ist auf 50 Zeichen begrenzt. |
Siehe auch | setJobQueue, setJobServer, setJobUser, setJobVoucherTemplateOutputOptions, setJobWaitFinish |
setJobQueue
Name | setJobQueue |
Beschreibung | Legt die Verarbeitungs-Warteschlange für die Hintergrundverarbeitung fest. |
Signaturen | setJobQueue(String name) |
Parameter | name ist der Name der Verarbeitungs-Warteschlange. |
Ergebnis | Der Befehl setJobQueue legt fest, in welche Verarbeitungs-Warteschlange der für die Aktivität erzeugte Verarbeitungsauftrag eingereiht wird. Wird keine Verarbeitungs-Warteschlange festgelegt, dann wird die in der Customizing-Funktion Workflow-Management hinterlegte Verarbeitungs-Warteschlange verwendet.
Ist der Bearbeiter der Aktivität kein Verarbeitungsauftrag, hat der Befehl keine Auswirkung. |
Fehlerquellen | Der Befehl setJobQueue muss in der Funktion create , also vor der Hintergrundverarbeitung, verwendet werden.
Der Benutzer, der die Hintergrundanwendung ausführt, muss berechtigt sein, die Verarbeitungs-Warteschlange zu verwenden. |
Beispiele | setJobQueue("JOBQUEUE01") legt fast, dass der Verarbeitungsauftrag in die Verarbeitungs-Warteschlange JOQUEUE01 eingereiht wird. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setJobName, setJobServer, setJobUser, setJobVoucherTemplateOutputOptions, setJobWaitFinish |
setJobServer
Name | setJobServer |
Beschreibung | Legt den Application-Server für die Hintergrundverarbeitung fest. |
Signaturen | setJobServer(String serverName) |
Parameter | serverName ist der Name des Application-Servers. |
Ergebnis | Der Befehl setJobServer legt fest, auf welchem Application-Server die mit der Aktivitätsdefinition verknüpfte Hintergrundanwendung ausgeführt wird. Wird keine Verarbeitungs-Warteschlange festgelegt, dann wird der Application-Server der aktuellen Laufzeitumgebung verwendet. In der Regel ist dies der Application-Server, auf dem das Ereignis ausgelöst wurde.
Ist der Bearbeiter der Aktivität kein Verarbeitungsauftrag, hat der Befehl keine Auswirkung. |
Fehlerquellen | Der Befehl setJobServer muss in der Funktion create , also vor der Hintergrundverarbeitung, verwendet werden.
Der Application-Server muss zur Verarbeitungs-Warteschlange passen. |
Beispiele | setJobServer("ADV620") legt fest, dass die Hintergrundanwendung auf dem Application-Server ADV620 ausgeführt wird. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setJobName, setJobQueue, setJobUser, setJobVoucherTemplateOutputOptions, setJobWaitFinish |
setJobUser
Name | setJobUser |
Beschreibung | Legt den Benutzer für für die Hintergrundverarbeitung fest. |
Signaturen | setJobUser(String userName)
|
Parameter | userName ist der Name eines Benutzers.
|
Ergebnis | Der Befehl setJobUser legt den Benutzer fest, der die Hintergrundanwendung ausführen soll. Wird kein Benutzer festgelegt, dann wird der in der Customizing-Funktion Workflow-Management hinterlegte Benutzer für Verarbeitungsaufträge verwendet.
Ist der Bearbeiter der Aktivität kein Verarbeitungsauftrag, hat der Befehl keine Auswirkung. |
Fehlerquellen | Der Befehl setJobUser muss in der Funktion create , also vor der Hintergrundverarbeitung, verwendet werden.
Der Benutzer, der die Hintergrundanwendung ausführt, muss berechtigt sein, sowohl die Hintergrundanwendung auszuführen, als auch die Verarbeitungs-Warteschlange zu verwenden. |
Beispiele | setJobUser("ADMINISTRATOR") führt die Hintergrundanwendung für den Administrator aus.
|
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch | setJobName, setJobQueue, setJobServer, setJobVoucherTemplateOutputOptions, setJobWaitFinish |
setJobVoucherTemplateOutputOptions
Name | setJobVoucherTemplateOutputOptions |
Beschreibung | Verwendet die Standard-Belegdokumentvorlage bei einer Belegerzeugung. |
Signaturen | setJobVoucherTemplateOutputOptions (Boolean voucherTemplateOutputOptions) |
Parameter | voucherTemplateOutputOptions legt fest, ob die Standard-Belegdokumentvorlage für die Belegerzeugung verwendet wird. |
Ergebnis | Hat voucherTemplateOutputOptions den Wert true , wird die Standard-Belegdokumentvorlage für die Belegerzeugung verwendet. Beim Wert false wird sie nicht verwendet. Die Standard-Belegdokumentvorlage ist die gleiche Belegdokumentvorlage, die vorgeschlagen wird, wenn der Beleg interaktiv erzeugt wird.
Ist die mit der Aktivität verknüpfte Hintergrundanwendung keine Belegerzeugung, hat der Befehl keine Auswirkung. |
Fehlerquellen | Der Befehl setJobVoucherTemplateOutputOptions muss in der Funktion create , also vor der Hintergrundverarbeitung, verwendet werden.
Hat |
Beispiele | setJobVoucherTemplateOutputOptions(true) legt fest, dass die Standard-Belegdokumentvorlage bei der Belegerzeugung verwendet wird. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | |
Siehe auch |
setJobWaitFinish
Name | setJobWaitFinish |
Beschreibung | Wartet auf das Erledigen des verknüpften Verarbeitungsauftrags. |
Signaturen | setJobWaitFinish(Boolean waitFinish) |
Parameter | waitFinish gibt an, ob die Aktivität erst nach dem Erledigen des mit der Aktivität verknüpften Verarbeitungsauftrags (true ) oder sofort (false ) erledigt wird. |
Ergebnis | Hat wait den Wert true , dann wird die Aktivität erst nach dem Erledigen des mit der Aktivität verknüpften Verarbeitungsauftrags erledigt. Somit können die Ergebnisse der Hintergrundverarbeitung in der Funktion close ausgewertet werden. Wurde der Verarbeitungsauftrag erfolgreich beendet, dann hat der Parameter state in der Funktion close den Wert 40 (DONE ), andernfalls den Wert 50 (CANCELED ).
Der Befehl Ist der Bearbeiter der Aktivität kein Verarbeitungsauftrag, hat der Befehl keine Auswirkung. |
Fehlerquellen | Der Befehl setJobWaitFinish muss in der Funktion create , also vor der Hintergrundverarbeitung, verwendet werden. |
Beispiele | setJobWaitFinish(true) bewirkt, dass die Aktivität erst nach dem Erledigen des verknüpften Verarbeitungsauftrags erledigt wird.
|
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Die Ergebnisse der Hintergrundanwendung können mithilfe der Funktion getJobResults ausgewertet werden. |
Siehe auch | getJobResults |
Funktionen für Webservice-Knoten
Ein Webservice-Knoten bietet die Funktionalität für den Aufruf eines Webservices und für die Auswertung der Ergebnisse. Der Aufruf erfolgt durch die fest verknüpfte Hintergrundanwendung ServiceClient com.cisag.sys.workflow.webservices.log.ServiceClient
.
Die Funktionen für Webservice-Knoten bieten Möglichkeiten, Aktivitäten des Typs Webservivce-Knoten zu konfigurieren:
getServiceResponse
Name | getServiceResponse |
Beschreibung | Gibt bei einer Aktivität des Typs Webservice-Knoten den Ergebnisparameter responseBody zurück. |
Signaturen | String getServiceResponse() |
Parameter | Keine. |
Ergebnis | Die Funktion gibt den Ergebnisparameter responseBody der Hintergrundanwendung com.cisag.sys.workflow.webservices.log.ServiceClient als eine Zeichenkette zurück.
Die Funktion entspricht dem Ausdruck |
Fehlerquellen | Keine. |
Beispiele | getServiceResponse() gibt das Ergebnis einer Aktivität des Typs Webservice-Knoten zurück. |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | Das Ergebnis kann nur in der Funktion close ausgewertet werden. Das Ergebnis steht nur dann zur Verfügung, wenn die Checkbox Auf Verarbeitungsauftrag warten in der Aktivitätsdefinition aktiviert ist bzw. der Befehl setJobWaitFinish(true) in der Funktion create in den Deklarationen ausgeführt wurde. |
Siehe auch | parseJson, parseXml |
Folgendes Beispiel aus einer Aktivitätsdefinition vom Typ Webservice-Knoten fragt das Ergebnis promise aus dem Webservice ab. Beim Starten eines Workflow-Prozesses per Webservice besteht das promise aus der Guid der gestarteten Prozess-Instanz. Der Wert kann später verwendet werden, um den Status des Prozesses und das Ergebnis abzufragen.
function close(state as Number) { var response := parseJson(getServiceResponse()); if (size(response.errors) = 0) { process.promise := response.promise; } }
parseJson
Name | parseJson |
Beschreibung | Erzeugt eine Hash-Tabelle aus einer Zeichenkette in JavaScript Object Notation (JSON). |
Signaturen | HashMap parseJson(String body) |
Parameter | body ist eine Zeichenkette in JavaScript Object Notation (JSON). |
Ergebnis | Die Funktion parseJson gibt eine Hash-Tabelle mit einem Element für jeden Parameter in body zurück. |
Fehlerquellen | Ist die Zeichenkette nicht in JavaScript Object Notation (JSON) verfasst oder kann nicht geparst werden, wird der Wert null zurückgegeben. |
Beispiele | echo(parseJson("{'a':'hello', 'b':'world'}") gibt ‘{a=[S=hello], b=[S=world]}’ auf der Konsole aus.
|
Kontext | ALL |
Hinweise | Sie können die Funktion parseJson auch in einer Aktivitätsdefinition des Typs Funktionsaufruf verwenden, um komplexe Daten als eine Zeichenkette an die Aktivitätsdefinition zu übergeben. |
Siehe auch | getServiceResponse, parseXml |
Folgendes Beispiel aus der Aktivitätsdefinition help.parseJson erzeugt eine Hash-Tabelle aus einer Zeichenkette in JavaScript Object Notation (JSON) und gibt die Hash-Tabelle auf der Konsole aus:
function create() { var p_text := parameters.TEXT; var r_parsedText := parseJson(p_text); echo(r_parsedText); }
parseXml
Name | parseXml |
Beschreibung | Erzeugt eine Hash-Tabelle aus einer Zeichenkette im XML-Format (Extensible Markup Language). |
Signaturen | HashMap parseXml(String body)
|
Parameter | body ist eine Zeichenkette im XML-Format (Extensible Markup Language), die geparst werden soll.
|
Ergebnis | Die Funktion parseXml gibt eine Hash-Tabelle mit jedem XML-Element als eine Liste und jedem XML-Tag als ein Listenelement zurück. |
Fehlerquellen | Ist die Zeichenkette nicht in Extensible Markup Language (XML) erfasst oder kann nicht geparst werden, wird der Wert null zurückgegeben. |
Beispiele | echo(parseXml("<rss version='2.0'><channel><title>RSS Title</title></channel></rss>")) gibt „{#document=[L=[[H={rss=[L=[[H={channel=[L=[[H={title=[S=RSS Title]}]]]}]]]}]]]}“ auf der Konsole aus.
|
Kontext | ALL |
Hinweise | |
Siehe auch | getServiceResponse, parseJson |
Folgendes Beispiel aus der Aktivitätsdefinition help.parseXml gibt das Ergebnis der Funktion parseXml auf der Konsole aus:
function create() { var p_text := parameters.TEXT; var p_pathExpression := parameters.PATH_EXPRESSION; var r_parsedText := new(HashMap); if (p_pathExpression = "") r_parsedText := parseXml(p_text); else var r_parsedText := parseXml(p_text, p_pathExpression); echo(r_parsedText); }
Im nächsten Beispiel wird eine Exportdatei im XML-Format für den Partner JOB geparst:
<?xml version="1.0" encoding="UTF-8"?> <semiramis xmlns="com.cisag.app.general.obj.Partner" xsi:schemaLocation="com.cisag.app.general.obj.Partner Partner.xsd" created="2020-07-09T17:18:43.616Z" locale="en-US-XMLSchemaCompliant" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" nlsMode="SINGLE_LANGUAGE" dateTimeMode="COMPACT"> <Partner xmlns="com.cisag.app.general.obj.Partner"> <number>JOB</number> <type>INTERNAL</type> <person> <givenName>Max</givenName> <middleNames>Headroom</middleNames> <surname>JOB</surname> <Salutation> <name>200</name> </Salutation> </person> <human>true</human> </Partner> </semiramis>
Wenn die Variable partner die Exportdatei enthält, dann gibt der Ausdruck parseXML(partner, "/semiramis/Partner/person/surname"}
die Hash-Tabelle „{/semiramis/Partner/person/surname=[S=JOB]}“ zurück.
Befehle für dynamische Indikatoren (Dynamic indicator commands)
Ein Indikator repräsentiert eine technische oder eine betriebswirtschaftliche Kennzahl, deren Wert überwacht werden soll. Die System-Engine stellt bereits eine Reihe von Indikatoren zur Verfügung. Weitere dynamische Indikatoren können vom Benutzer selbst erfasst werden. Dynamische Indikatoren können von einem der folgenden Typen sein:
- Aggregationsindikator
- Zählerindikator
- Zahlindikator
- Statusindikator
Für Zähler- und Aggregationsindikatoren wird keine Aktivitätsdefinition beim Indikator angegeben. Jede beliebige Aktivitätsdefinition kann jedoch ein Ereignis für einen Zähler- oder Aggregationsindikator auslösen, wenn ein bestimmtes z. B. betriebswirtschaftliches Ereignis eintritt. Normalerweise hat diese Aktivitätsdefinition nur die Aufgabe, das Ereignis für den Indikator auszulösen. Vom Benutzer wird jedoch keine weitere Reaktion benötigt.
Mithilfe der beiden Befehle für dynamische Indikatoren können Sie Aggregations- und Zählerindikatoren auslösen:
Weitere Informationen zu den Indikatoren finden Sie in den Dokumentationen Einführung: Indikatoren und Dynamische Indikatoren.
fireAggregatorIndicator
Name | fireAggregatorIndicator |
Beschreibung | Löst einen Aggregationsindikator aus. |
Signaturen | fireAggregatorIndicator(String dynamicIndicatorName, Number value) |
Parameter | dynamicIndicatorName ist der Name des Aggregationsindikators.
|
Ergebnis | Der Befehl fireAggregatorIndicator löst den Aggregationsindikator dynamicIndicatorName mit dem Wert value aus. |
Fehlerquellen | Der Aggregationsindikator dynamicIndicatorName muss vorher als dynamischer Indikator erzeugt worden sein. |
Beispiele | fireAggregatorIndicator("invoicedAmount", 100) erhöht den Aggregationsindikator invoicedAmount um 100.
|
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Sie können den Zustand von Aggregations- und Zählerindikatoren in der Anwendung Dashboard visualisieren. |
Siehe auch | fireCounterIndicator |
fireCounterIndicator
Name | fireCounterIndicator |
Beschreibung | Erhöht den Wert eines Zählerindikators um die Zahl 1. |
Signaturen | fireCounterIndicator(String dynamicIndicatorName) |
Parameter | dynamicIndicatorName ist der Name des Zählerindikators. |
Ergebnis | Der Befehl fireAggregatorIndicator erhöht den Zählerindikator dynamicIndicatorName um die Zahl 1. |
Fehlerquellen | Der Zählerindikator dynamicIndicatorName muss vorher als dynamischer Indikator erzeugt worden sein. |
Beispiele | fireCounterIndicator("custeromerReturns") zählt den Aggregationsindikator customerReturns um den Wert 1 hoch, z. B. beim Erfassen einer Kundenrücksendung oder beim Buchen eines Wareneingangs aus einer Kundenrücksendung. |
Kontext | WF_REPOSITORY , WF_OLTP |
Hinweise | Sie können den Zustand von Aggregations- und Zählindikatoren in der Anwendung Dashboard visualisieren. |
Siehe auch | fireAggregatorIndicator |
Funktionsaufrufe für Zahl- und Statusindikatoren
Dynamische Indikatoren können von einem der folgenden Typen sein:
- Aggregationsindikator
- Zählerindikator
- Zahlindikator
- Statusindikator
Aggregationsindikatoren und Zählerindikatoren werden von den beiden Skript-Funktionen fireAggregatorIndicator
und fireCounterIndicator
ausgelöst. Eine Aktivität, die durch ein bestimmtes Ereignis erzeugt wird, erhöht den Wert des dynamischen Indikators, d. h. sie funktionieren nach dem Push-Prinzip.
Zahlindikatoren und Statusindikatoren funktionieren dagegen nach dem Pull-Prinzip. Bei Bedarf ruft der auf dem Dashboard angezeigte dynamische Indikator die mit dem Indikator verknüpfte Aktivitätsdefinition des Typs Funktionsaufruf auf. Die Aktivitätsdefinition berechnet den Wert bzw. den Status und gibt ihn mithilfe eines Ergebnisparameters zurück. Bei einem Zahlindikator muss der Ergebnisparameter den Namen VALUE besitzen und vom Datentyp Zahl sein.
Eine Aktivitätsdefinition für einen Zahlindikator muss einen Ergebnisparameter des Datentyps Zeichenkette mit den Namen STATUS besitzen. Eine Aktivitätsdefinition für einen Statusindikator muss zwei Ergebnisparameter des Datentyps Zeichenkette besitzen. Der erste Ergebnisparameter übergibt den Status und muss den Namen STATE haben. Der zweite Ergebnisparameter übergibt eine Beschreibung des Statuswerts und muss den Namen DESCRIPTION haben.
Beispiel: Anzahl der heute gebuchten Wareneingänge
Folgende Deklarationen ermitteln die Anzahl der heute gebuchten Wareneingänge und gibt das Ergebnis über die Ergebnisvariable VALUE an den dynamischen Indikator zurück.
const OrderStatus as valueSet(com.cisag.app.general.OrderStatus); function create() { /* Get time particles for OQL query */ var fromDate := today(); var fromYear := format(year(fromDate), "0000"); var fromMonth := format(month(fromDate), "00"); var fromDay := format(day(fromDate), "00"); /* Use default time zone ID of the system */ var timeZoneId := timeZoneId(fromDate); /* create OQL statement */ var OQL := "SELECT COUNT(*) FROM com.cisag.app.purchasing.obj.ReceiptOfGoods o " + "WHERE o:date >= toTimestamp('" + timeZoneId + "'" + ", " + fromYear + ", " + fromMonth + ", " + fromDay + ", 00, 00, 00, 0000) AND o:status = 3"; /* query the database */ var receiptsOfGoodsPostedToday := cast(Number, getResultList(OQL, list(), 1)[0][0]); /* return the result */ result.VALUE := receiptsOfGoodsPostedToday; }
Funktionen für Cockpit-Anwendungen (Cockpit functions)
Mithilfe der Funktion createFilter können Selektionsfelder einer Cockpit-Anwendung vorbelegt werden.
createFilter
Name | createFilter |
Beschreibung | Erzeugt einen Filter für die Vorbelegung eines Selektionsfelds einer Cockpit-Anwendung. |
Signaturen | String createFilter(String filterType, Unknown filterValue)
|
Parameter | filterType ist der Datentyp des Filters.
|
Ergebnis | Die Funktion createFilter erzeugt einen Filter für die Vorbelegung eines Selektionsfelds einer Cockpit-Anwendung. Somit können auch solche Selektionsfelder durch die Aktivität vorbelegt werden, die einer benutzerspezifischen bzw. sprachabhängigen Formatierung bedürfen, wie z. B. heute oder today für eine Zeitdauer oder 2021-01-01 oder 01.01.2021 für ein Datum. |
Fehlerquellen | |
Beispiele | createFilter("bin[54]", loadPartner("10010")) belegt ein Selektionsfeld in einer Cockpit-Anwendung mit einer Verknüpfung zum Partner 10010. |
Kontext | WF_ACTIVITY_REPOSITORY , WF_ACTIVITY_OLTP |
Hinweise | |
Siehe auch | fireAggregatorIndicator |
Folgende Tabelle gibt einige der für Selektionsfelder in Cockpit-Anwendungen am häufigsten verwendeten Datentypen wider:
Filtertyp | Beschreibung |
Filter[str(x)] | Zeichenkette der Länge x |
Filter[str(x,ml)] | Mehrsprachige Zeichenkette der Länge x |
ValueSetFilter[vset] | Auswahlfeld |
Filter[guid] | GUID, z. B. eine Benutzer-GUID |
Filter[stmp] | Zeitstempel mit Zeitzonen-GUID |
Filter[objStmp] | Zeitstempel mit Zeitzone über das business Object |
Filter[bool] | Boolean |
Filter[int] | Ganzzahl |
Filter[long] | Lange Ganzzahl |
Filter[dec(7,4)] | Dezimalzahl |
Filter[byte] | Byte-Wert |
Filter[part(PointInTime)] | Termin mit Genauigkeit und Kalender |
Filter[part(Duration)] | Dauer |
Filter[part(Quantity)] | Menge mit Einheiten-GUID |
Filter[part(ForeignAmount)] | Betrag mit Währungs-GUID |
Filter[part(DomesticAmount)] | Betrag in den drei Hauswährungen |
Filter[part(OrganizationalUnit)] | Organisationseinheit |
Filter[part(Person)] | Person |
Filter[bin(54)] | Business Object-Verknüpfung |
Weitere Informationen zu den einzelnen Datentypen entnehmen sie der Dokumentation Datentypen.