Template-Pipes
Die CLI ermöglicht es, Kommandos miteinander zu verketten.
Dazu wird die Ausgabe eines Kommandos als Eingabe an ein nachfolgendes Kommando weitergeleitet.
Diese Verkettung wird als Piping bezeichnet und nutzt den Pipe-Operator (|) der Shell.
Mit Template-Pipes können Sie flexibel auf beliebige Felder der JSON-Ausgabe zugreifen und diese an nachfolgende Kommandos weitergeben.
Template-Pipes erfordern CLI Version 4.2.0 oder höher und eine aktive Verbindung zu einer Engine (pc engine login).
Grundlagen
Standard-Piping
Im Standard-Verfahren erkennt die CLI automatisch, welche IDs aus der Ausgabe eines Kommandos extrahiert werden sollen:
pc engine lsi --filter-by-state error | pc engine retry-process-instanceHierbei erkennt retry-process-instance automatisch, dass die Pipe-Eingabe vom Typ process-instances stammt, und extrahiert die processInstanceId aller Ergebnisse.
Dieses Verfahren funktioniert weiterhin und ist vollständig rückwärtskompatibel.
Template-Pipes
Template-Pipes ermöglichen den gezielten Zugriff auf beliebige Felder der JSON-Ausgabe:
{{.feldName}}Der Feldname wird mit einem Punkt (.) eingeleitet und in doppelte geschweifte Klammern eingeschlossen.
pc engine lsi --filter-by-state running | pc engine stop {{.processInstanceId}}In diesem Beispiel wird {{.processInstanceId}} durch die tatsächliche processInstanceId jedes Ergebnisses ersetzt.
Syntax im Detail
Einfacher Feldzugriff
Greifen Sie auf ein Feld der obersten Ebene zu:
{{.processInstanceId}}
{{.processModelId}}
{{.correlationId}}Verschachtelter Feldzugriff
Greifen Sie auf verschachtelte Felder zu, indem Sie die Feldnamen mit Punkten trennen:
pc engine lsi | pc engine show {{.correlation.correlationId}}Mehrere Templates in einem Argument
Kombinieren Sie mehrere Templates innerhalb eines Arguments:
pc engine lsi | echo "{{.processModelId}}/{{.processInstanceId}}"Template in Optionswerten
Templates können auch in den Werten von Optionen verwendet werden:
pc engine lsi --limit 5 | pc engine lsu --filter-by-correlation-id {{.correlationId}}Verhalten bei mehreren Ergebnissen
Wenn die Ausgabe des vorangehenden Kommandos mehrere Ergebnisse enthält, wird das Template pro Ergebnis expandiert.
Beispiel
Angenommen, pc engine lsi --filter-by-state running liefert drei Ergebnisse:
{
"result_type": "process-instances",
"result": [
{ "processInstanceId": "abc-111", "processModelId": "Bestellung" },
{ "processInstanceId": "abc-222", "processModelId": "Bestellung" },
{ "processInstanceId": "abc-333", "processModelId": "Reklamation" }
]
}Der Befehl:
pc engine lsi --filter-by-state running | pc engine stop {{.processInstanceId}}wird intern zu:
pc engine stop abc-111 abc-222 abc-333Wenn das vorangehende Kommando keine Ergebnisse liefert (leeres result-Array), wird die Template-Position entfernt.
Praxisbeispiele
Alle laufenden Instanzen stoppen
pc engine lsi --filter-by-state running | pc engine stop {{.processInstanceId}}Fehlgeschlagene Instanzen anzeigen
pc engine lsi --filter-by-state error | pc engine show {{.processInstanceId}}Fehlgeschlagene Instanzen erneut versuchen
pc engine lsi --filter-by-state error | pc engine retry {{.processInstanceId}}Deployen und direkt starten
pc engine deploy-files mein-prozess.bpmn | pc engine start {{.processModelId}}User-Tasks nach Correlation filtern
pc engine lsi --limit 1 | pc engine lsu --filter-by-correlation-id {{.correlationId}}Mehrere Modelle deployen und starten
pc engine deploy-files prozess-a.bpmn prozess-b.bpmn | pc engine start {{.processModelId}}Verfügbare Felder je Kommando
Die verfügbaren Felder hängen vom vorangehenden Kommando ab.
list-process-instances
| Feld | Typ | Beschreibung |
|---|---|---|
processInstanceId | string | Eindeutige ID der Prozessinstanz |
processModelId | string | ID des Prozessmodells |
processModelName | string | Name des Prozessmodells |
processDefinitionId | string | ID der Prozessdefinition |
correlationId | string | ID der Correlation |
state | string | Status: running, finished, error, terminated |
createdAt | string | Erstellungszeitpunkt (ISO 8601) |
finishedAt | string | Abschlusszeitpunkt (ISO 8601) |
durationInMilliseconds | number | Laufzeit in Millisekunden |
ownerId | string | ID des Besitzers |
parentProcessInstanceId | string | ID der übergeordneten Instanz (bei CallActivities) |
startEventId | string | ID des Start-Events |
endEventId | string | ID des End-Events |
hash | string | Hash der Prozessdefinition |
engineId | string | ID der Engine |
correlation.correlationId | string | Correlation-ID (verschachtelter Zugriff) |
list-process-models
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | ID des Prozessmodells |
name | string | Name des Prozessmodells |
startEventIds | array | IDs der Start-Events |
list-user-tasks
| Feld | Typ | Beschreibung |
|---|---|---|
flowNodeInstanceId | string | Eindeutige ID der FlowNode-Instanz |
flowNodeName | string | Name des User-Tasks |
state | string | Status des User-Tasks |
processModelId | string | ID des zugehörigen Prozessmodells |
processInstanceId | string | ID der zugehörigen Prozessinstanz |
correlationId | string | ID der Correlation |
deploy-files
| Feld | Typ | Beschreibung |
|---|---|---|
success | boolean | Ob das Deployment erfolgreich war |
filename | string | Dateiname der deployten BPMN-Datei |
processModelId | string | ID des deployten Prozessmodells |
start-process-model
| Feld | Typ | Beschreibung |
|---|---|---|
success | boolean | Ob der Start erfolgreich war |
processModelId | string | ID des gestarteten Prozessmodells |
startEventId | string | ID des verwendeten Start-Events |
processInstanceId | string | ID der erzeugten Prozessinstanz |
correlationId | string | ID der Correlation |
show-process-instance
Gleiche Felder wie list-process-instances, zusätzlich:
| Feld | Typ | Beschreibung |
|---|---|---|
flowNodeInstances | array | Array der FlowNode-Instanzen mit deren Verlauf |
Kurzreferenz: Aliasse und result_type
| Kommando | Alias | result_type |
|---|---|---|
list-process-instances | lsi | process-instances |
list-process-models | lsp | process-models |
list-user-tasks | lsu | user-tasks |
deploy-files | deploy | deployed-files |
start-process-model | start | process-instances |
stop-process-instance | stop | process-instances |
retry-process-instance | retry | process-instances |
show-process-instance | show | process-instances |
finish-user-task | finish | user-tasks |
remove-process-models | remove | removed-process-model-ids |
Häufige Pipe-Kombinationen
| Pipe-Kette | Beschreibung |
|---|---|
pc engine deploy ... | pc engine start {{.processModelId}} | Deployen und direkt starten |
pc engine lsi --filter-by-state running | pc engine stop {{.processInstanceId}} | Laufende Instanzen stoppen |
pc engine lsi --filter-by-state error | pc engine retry {{.processInstanceId}} | Fehlgeschlagene Instanzen wiederholen |
pc engine lsi --filter-by-state error | pc engine show {{.processInstanceId}} | Fehlgeschlagene Instanzen inspizieren |
pc engine lsi | pc engine lsu --filter-by-correlation-id {{.correlationId}} | User-Tasks zu Instanzen finden |
pc engine lsp | pc engine remove {{.id}} | Alle Modelle entfernen |
Fehlerbehandlung
Unbekanntes Feld
Wenn ein Feld im Template nicht existiert, wird ein Fehler mit allen verfügbaren Feldern angezeigt:
$ pc engine lsi | pc engine stop {{.nichtVorhanden}}Error: Feld 'nichtVorhanden' nicht gefunden. Verfügbar: correlationId, processInstanceId,
processDefinitionId, processModelId, processModelName, state, createdAt, finishedAt, ...Template ohne Pipe-Eingabe
$ pc engine stop {{.processInstanceId}}Error: Template {{.processInstanceId}} verwendet, aber keine Pipe-EingabeZusammenspiel mit dem Standard-Piping
| Schreibweise | Mechanismus | Verhalten |
|---|---|---|
pc engine lsi | pc engine stop | Standard | IDs werden automatisch anhand des result_type extrahiert |
pc engine lsi | pc engine stop {{.processInstanceId}} | Template | Das Feld wird explizit extrahiert |
Wenn ein Template verwendet wird, wird der Standard-Mechanismus für diesen Befehl deaktiviert.
Empfehlung: Verwenden Sie Template-Pipes für neue Workflows. Sie bieten mehr Flexibilität und machen die Absicht des Befehls explizit lesbar.
Shell-Escaping
In manchen Shells müssen die geschweiften Klammern in Anführungszeichen gesetzt werden:
# Empfohlen: Einfache Anführungszeichen
pc engine lsi | pc engine stop '{{.processInstanceId}}'
# Alternative: Doppelte Anführungszeichen
pc engine lsi | pc engine stop "{{.processInstanceId}}"
# In den meisten Shells auch ohne Anführungszeichen möglich
pc engine lsi | pc engine stop {{.processInstanceId}}