Workflow-Aufgabe: Pre- und Postconditions bearbeiten
Überschreibt die Pre- und Postconditons basierend auf der bereitgestellten JSON-Definition
Bezeichnung
- Name
- mc.WorkflowTaskModifyConditions
- Aliase
- WorkflowModifyTaskConditions
Konfiguration
- Optionen
- Test-Modus (
test-mode) - Aktiviert einen Simulationsmodus
- Eingabemodus (
conditions-input-mode) - Legt fest, ob die Bedingungen über eine JSON-Datei oder als JSON-Text übergeben werden
Mögliche Werte
Datei (file), Freitext (text)
- Datei (
conditions-file) - Datei mit der JSON-Definition
- Freitext (
conditions-text) - Freitext mit den JSON-Definition
- Aufgabe (
task) - Name der Workflow-Aufgabe
- Aufgaben-Nummer (
task-no) - Laufende Nummer der Workflow-Aufgabe
Beschreibung
Mit diesem Modul lassen sich die Pre- und Postconditions von Aufgaben in Workflows bearbeiten. Die Eingabe erfolgt als JSON-Datei oder als Freitext.
Das JSON enthält zwei Listen:
preconditions: werden vor dem Start der Aufgabe geprüftpostconditions: werden nach dem Ende der Aufgabe geprüft
Für beide Listen gilt:
| Angabe | Wirkung |
|---|---|
null | Die bestehenden Einträge bleiben unverändert |
[] (leere Liste) | Die bestehenden Einträge werden gelöscht |
| Liste mit Einträgen | Die bestehenden Einträge werden durch die neuen ersetzt |
Einschränkungen im Text-Modus
Der Text-Modus (--conditions-input-mode text) ist für kurze Definitionen und Tests gedacht und funktioniert nur in der grafischen Oberfläche zuverlässig.
Beim Start über die Kommandozeile kann es zu Problemen kommen, z. B. durch Sonderzeichen, Leerzeichen oder sehr lange Eingaben. Verwende dort den Datei-Modus:
--conditions-input-mode file --conditions-file <Pfad zur JSON-Datei>
Aufbau eines Eintrags
Jeder Eintrag ist entweder eine Bedingung oder eine Aktion.
{
"type": "UserDefinedCondition",
"active": true,
"once": false,
"params": { "value1": "&ENV#", "operator": "=", "value2": "PROD" },
"ifTrue": [],
"ifFalse": []
}
| Feld | Beschreibung |
|---|---|
type | Name der Bedingung oder Aktion (siehe Verfügbare Bedingungen und Aktionen) |
active | true: Eintrag ist aktiv, false: Eintrag ist deaktiviert |
once | true: Eintrag wird nur einmal ausgeführt |
params | Einstellungen des Eintrags (siehe Einstellungen je Eintrag) |
ifTrue | Einträge, die ausgeführt werden, wenn die Bedingung zutrifft (nur bei Bedingungen) |
ifFalse | Einträge, die ausgeführt werden, wenn die Bedingung nicht zutrifft (nur bei Bedingungen) |
Verschachtelung mit ifTrue und ifFalse
In ifTrue und ifFalse können sowohl Aktionen als auch weitere Bedingungen stehen. So lassen sich beliebig tiefe Wenn-Dann-Sonst-Abläufe bauen (siehe Beispiele).
Pre- oder Postcondition
Nicht jede Bedingung oder Aktion ist in beiden Bereichen erlaubt. Welche wo zulässig ist, steht in der Tabelle Verfügbare Bedingungen und Aktionen. Wird ein Eintrag im falschen Bereich verwendet, gibt das Modul eine Fehlermeldung aus.
Fehlerbehandlung
Kann eine Einstellung in params nicht übernommen werden, gibt das Modul eine Fehlermeldung aus. Sie enthält alle Einstellungen, die für diesen Eintrag möglich sind. Häufige Ursachen:
- Der Name der Einstellung ist falsch geschrieben. Beispiel:
valueOnestattvalue1 - Der Wert hat die falsche Form. Beispiel:
1900stattENDED_OK - Der Wert ist nicht erlaubt. Beispiel: ein Operator, der nicht in der Liste steht
Verfügbare Bedingungen und Aktionen
Diese Namen können als type verwendet werden:
| Bedingungen | Prüft … | Pre | Post |
|---|---|---|---|
CheckActivitiesCondition | Anzahl laufender Aktivitäten eines Objekts | ✓ | ✓ |
CheckConnectionCondition | ob eine Verbindung erreichbar ist | ✓ | ✓ |
CheckFileCondition | ob eine Datei existiert | ✓ | ✓ |
CheckHistoryCondition | ob ein Objekt mit einem Status beendet wurde | ✓ | ✓ |
CheckProcessCondition | ob ein Prozess läuft | ✓ | ✓ |
CurrentQueueCondition | in welcher Queue die Aufgabe läuft | ✓ | ✓ |
CurrentTimeCondition | die aktuelle Uhrzeit | ✓ | ✓ |
ReturnCodeCondition | den Return Code der Aufgabe | – | ✓ |
StatusCondition | den Endstatus der Aufgabe | – | ✓ |
TimeSinceActivationCondition | die Zeit seit dem Start der Aufgabe | ✓ | ✓ |
UserDefinedCondition | zwei frei wählbare Werte, z. B. Variablen | ✓ | ✓ |
| Aktionen | Bewirkt … | Pre | Post |
|---|---|---|---|
AbortAction | Aufgabe abbrechen | – | ✓ |
BlockAction | Workflow blockieren | ✓ | ✓ |
CancelProcessFlowAction | Workflow abbrechen | ✓ | ✓ |
ChangeQueueAction | Queue der Aufgabe ändern | ✓ | – |
ClearVariableAction | Einträge eines Variablen-Objekts löschen | ✓ | ✓ |
ExecuteObjectAction | anderes Objekt starten | ✓ | ✓ |
ModifyStateAction | Endstatus der Aufgabe ändern | – | ✓ |
PublishValueAction | Wert im Workflow bereitstellen | ✓ | ✓ |
ReEvaluateAtAction | zu einem Zeitpunkt erneut prüfen | ✓ | – |
ReEvaluateInAction | nach einer Wartezeit erneut prüfen | ✓ | – |
RestartTaskAction | Aufgabe neu starten | – | ✓ |
RollbackAction | Rollback ausführen | – | ✓ |
RunTaskAction | Aufgabe starten | ✓ | – |
SetValueAction | Wert einer Variable setzen | ✓ | ✓ |
SetVariableAction | Wert in ein Variablen-Objekt schreiben | ✓ | ✓ |
SkipTaskAction | Aufgabe überspringen | ✓ | – |
Einstellungen je Eintrag
Wertarten
In den Tabellen unten steht bei jeder Einstellung, welche Art von Wert erwartet wird:
| Wertart | So angeben | Beispiel |
|---|---|---|
| Text | in Anführungszeichen | "&ENV#" |
| Zahl | ganze Zahl, mit oder ohne Anführungszeichen | 0 oder "0" |
| Boolean | true oder false | true |
| Objektname | Name des Objekts als Text | "JOBS.WIN.TEST" |
| Agent | Name des Agenten als Text | "WIN01" |
| Alias | Alias als Text | "MEIN_ALIAS" |
| Uhrzeit | Text im Format HH:MM, HH:MM:SS oder HHMM | "06:30" |
| Status | Statuswert, exakt in Großbuchstaben (siehe Statuswerte) | "ENDED_OK" |
| Auswahl | einer der genannten Werte, Groß-/Kleinschreibung egal | "BEFORE" |
| Parameterliste | Paare aus Name und Wert, Werte als Text | { "&PARAM#": "1" } |
Wichtig:
- Text immer in Anführungszeichen angeben.
- Statuswerte exakt in Großbuchstaben schreiben. Eine falsche Schreibweise (z. B.
"ended_ok") wird nicht als Fehler gemeldet, sondern unverändert übernommen und funktioniert dann nicht wie erwartet. - Der Wert
nullleert eine Einstellung. Bei Zahl und Boolean istnullnicht erlaubt. - Erlaubte Vergleichsoperatoren:
=,<>,<,<=,>,>=
Bedingungen
CheckActivitiesCondition
Prüft, wie viele Aktivitäten eines Objekts einen bestimmten Status haben.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
name | Objektname | Objekt, dessen Aktivitäten geprüft werden |
operator | Text | Vergleichsoperator |
count | Zahl | Anzahl, mit der verglichen wird |
status | Status | Status der Aktivitäten |
CheckConnectionCondition
Prüft, ob eine Verbindung erreichbar ist.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
agent | Agent | Agent, von dem aus geprüft wird |
connection | Objektname | Verbindungs-Objekt |
Die Option „eigener Agent“ kann über dieses Modul nicht gesetzt werden.
CheckFileCondition
Prüft, ob eine Datei existiert oder nicht existiert.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
agent | Agent | Agent, auf dem die Datei geprüft wird |
file | Text | Pfad und Name der Datei |
exists | Ja/Nein | true: Datei muss existieren, false: darf nicht |
login | Objektname | Login-Objekt für den Zugriff |
Die Optionen „eigener Agent“ und „eigenes Login“ können über dieses Modul nicht gesetzt werden.
CheckHistoryCondition
Prüft, ob ein Objekt in einem Zeitraum mit einem bestimmten Status beendet wurde.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
name | Objektname | Objekt, das geprüft wird |
status | Status | Gesuchter Endstatus |
dayOffset | Zahl | Anzahl Tage zurück |
timeOffset | Uhrzeit | Uhrzeit, ab der geprüft wird |
CheckProcessCondition
Prüft, ob ein Prozess auf einem Agenten läuft.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
agent | Agent | Agent, auf dem geprüft wird |
login | Objektname | Login-Objekt |
processName | Text | Name des Prozesses |
status | Auswahl | RUNNING, NOT_RUNNING |
CurrentQueueCondition
Prüft, ob die Aufgabe in einer bestimmten Queue läuft.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
queueName | Objektname | Queue |
CurrentTimeCondition
Prüft, ob die aktuelle Uhrzeit vor oder nach einer Uhrzeit liegt.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
when | Auswahl | BEFORE, AFTER |
time | Uhrzeit | Vergleichsuhrzeit |
ReturnCodeCondition
Prüft den Return Code der Aufgabe. Nur als Postcondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
operator | Text | Vergleichsoperator |
returnCode | Zahl | Return Code zum Vergleich |
StatusCondition
Prüft den Endstatus der Aufgabe. Nur als Postcondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
status | Status | Endstatus |
TimeSinceActivationCondition
Prüft, wie lange die Aufgabe schon aktiv ist.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
operator | Auswahl | MORE_THAN (mehr als), LESS_THAN (weniger als) |
time | Uhrzeit | Zeitspanne, z. B. "01:30" für 1,5 Stunden |
Hinweis: Hier wird kein Vergleichszeichen wie > verwendet, sondern MORE_THAN oder LESS_THAN.
UserDefinedCondition
Vergleicht zwei frei wählbare Werte, z. B. Variablen.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
value1 | Text | Erster Wert |
operator | Text | Vergleichsoperator |
value2 | Text | Zweiter Wert |
Aktionen
AbortAction
Bricht die Aufgabe ab. Nur als Postcondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
text | Text | Begründung, maximal 32 Zeichen |
BlockAction
Blockiert den Workflow.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
text | Text | Begründung, maximal 32 Zeichen |
CancelProcessFlowAction
Bricht einen Workflow ab.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
scope | Auswahl | OWN (eigener), PARENT (übergeordneter), TOP (oberster) |
recursive | Ja/Nein | true: auch untergeordnete Aufgaben abbrechen |
ChangeQueueAction
Ändert die Queue der Aufgabe. Nur als Precondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
queue | Objektname | Neue Queue |
ClearVariableAction
Löscht einen Eintrag oder alle Einträge eines Variablen-Objekts (VARA).
| Einstellung | Wertart | Beschreibung |
|---|---|---|
variableName | Objektname | Variablen-Objekt |
key | Text | Zu löschender Eintrag |
ExecuteObjectAction
Startet ein anderes Objekt.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
name | Objektname | Objekt, das gestartet wird |
wait | Ja/Nein | true: auf das Ende des Objekts warten |
parameter | Parameterliste | Parameter als Schlüssel-Wert-Paare (z.B. {"&PARAM1#": "Wert"}) |
alias | Alias | Alias für den Start |
ModifyStateAction
Ändert den Endstatus der Aufgabe. Nur als Postcondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
retCode | Zahl | Neuer Return Code |
text | Text | Begründung |
PublishValueAction
Stellt einen Wert als Variable im Workflow bereit.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
value | Text | Wert |
publishName | Text | Name der Variable |
ReEvaluateAtAction
Prüft die Bedingungen zu einem bestimmten Zeitpunkt erneut. Nur als Precondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
days | Zahl | Tage in der Zukunft, 0 bis 99 |
time | Uhrzeit | Uhrzeit |
ReEvaluateInAction
Prüft die Bedingungen nach einer Wartezeit erneut. Nur als Precondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
minutes | Zahl | Wartezeit in Minuten |
RestartTaskAction
Startet die Aufgabe nach einer Wartezeit neu. Nur als Postcondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
minutes | Zahl | Wartezeit in Minuten |
RollbackAction
Führt einen Rollback aus. Nur als Postcondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
task | Auswahl | THIS (diese Aufgabe), PARENT (übergeordnet), TOP (oberste) |
Hinweis: Den Wert immer exakt in Großbuchstaben angeben. Andere Schreibweisen werden unter Umständen unverändert übernommen und funktionieren dann nicht.
RunTaskAction
Startet die Aufgabe. Nur als Precondition. Hat keine Einstellungen, params wird weggelassen.
SetValueAction
Setzt den Wert einer Script-Variable.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
name | Text | Name der Variable. Ein & am Anfang wird entfernt. Darf nicht leer sein und nicht mit $ beginnen |
value | Text | Wert |
scope | Auswahl | TASK (Aufgabe), PROCESS_FLOW (Workflow), PARENT_PROCESS_FLOW (übergeordneter Workflow) |
SetVariableAction
Schreibt einen Wert in ein Variablen-Objekt (VARA).
| Einstellung | Wertart | Beschreibung |
|---|---|---|
variableName | Objektname | Variablen-Objekt |
key | Text | Eintrag |
valueColumn | Zahl | Wertespalte, 1 bis 5 |
value | Text | Wert |
SkipTaskAction
Überspringt die Aufgabe. Nur als Precondition.
| Einstellung | Wertart | Beschreibung |
|---|---|---|
text | Text | Begründung |
Statuswerte
Zulässige Werte für alle Einstellungen der Wertart „Status“:
| Gruppe | Werte |
|---|---|
ANY_* | ANY_ABEND, ANY_ABEND_EXCEPT_FAULT, ANY_ACTIVE, ANY_BLOCKED, ANY_BLOCKED_OR_STOPPED, ANY_EXCEPT_FAULT, ANY_OK, ANY_OK_OR_UNBLOCKED, ANY_SKIPPED, ANY_STOPPED, ANY_WAITING |
ENDED_* | ENDED_CANCEL, ENDED_EMPTY, ENDED_ESCALATED, ENDED_INACTIVE, ENDED_INACTIVE_MANUAL, ENDED_NOT_OK, ENDED_NOT_OK_SYNC, ENDED_OK, ENDED_OK_OR_EMPTY, ENDED_OK_OR_INACTIVE, ENDED_OK_OR_UNBLOCKED, ENDED_SKIPPED, ENDED_SKIPPED_CONDITIONS, ENDED_SKIPPED_SYNC, ENDED_TIMEOUT, ENDED_TRUNCATE, ENDED_UNDEFINED, ENDED_VANISHED |
FAULT_* | FAULT_ALREADY_RUNNING, FAULT_NO_HOST, FAULT_OTHER |
USER_* | USER_100_200, USER_147, USER_201_299, USER_300, USER_510, USER_690 |
WAITING_* | WAITING_AGENT, WAITING_AGENT_OR_AGENTGROUP, WAITING_AGENTGROUP, WAITING_EXTERNAL, WAITING_GROUP, WAITING_QUEUE, WAITING_SYNC |
Beispiele
Precondition: Datei prüfen
Existiert die Datei, wird die Aufgabe gestartet. Sonst wird nach 10 Minuten erneut geprüft.
{
"preconditions": [
{
"type": "CheckFileCondition",
"params": { "agent": "WIN01", "file": "C:\\data\\import.csv", "exists": true },
"ifTrue": [
{ "type": "RunTaskAction" }
],
"ifFalse": [
{ "type": "ReEvaluateInAction", "params": { "minutes": 10 } }
]
}
],
"postconditions": null
}
Postcondition: Return Code und Status auswerten
Bei Return Code 0 wird ein Eintrag in ein Variablen-Objekt geschrieben. Sonst wird bei ENDED_NOT_OK die Aufgabe nach 5 Minuten neu gestartet, bei jedem anderen Status abgebrochen.
{
"preconditions": null,
"postconditions": [
{
"type": "ReturnCodeCondition",
"params": { "operator": "=", "returnCode": 0 },
"ifTrue": [
{
"type": "SetVariableAction",
"params": { "variableName": "VARA.STATUS", "key": "LAST_RUN", "valueColumn": 1, "value": "OK" }
}
],
"ifFalse": [
{
"type": "StatusCondition",
"once": true,
"params": { "status": "ENDED_NOT_OK" },
"ifTrue": [
{ "type": "RestartTaskAction", "params": { "minutes": 5 } }
],
"ifFalse": [
{ "type": "AbortAction", "params": { "text": "Unerwarteter Status" } }
]
}
]
}
]
}
Pre- und Postconditions kombiniert
Vor dem Start wird geprüft, ob das Objekt bereits läuft. Nach erfolgreichem Ende wird ein Folgeobjekt mit Übergabewerten gestartet.
{
"preconditions": [
{
"type": "CheckActivitiesCondition",
"params": { "name": "JOBS.WIN.IMPORT", "operator": ">", "count": 0, "status": "ANY_ACTIVE" },
"ifTrue": [
{ "type": "ReEvaluateInAction", "params": { "minutes": 5 } }
],
"ifFalse": [
{ "type": "RunTaskAction" }
]
}
],
"postconditions": [
{
"type": "StatusCondition",
"params": { "status": "ENDED_OK" },
"ifTrue": [
{
"type": "ExecuteObjectAction",
"params": {
"name": "JOBS.WIN.REPORT",
"wait": false,
"parameter": { "&DATE#": "&$DATE_YYYYMMDD#" }
}
}
]
}
]
}