Workflow-Modell
Das Workflow-Modell ist das typisierte Gegenstück für die Eingangsvariablen eines Workflows — konzeptionell analog zum ECM-Modell für DMS-Objekte, aber als eigene, leichtgewichtige Implementierung (kein DMS-Query-/system-Verhalten).
Eine Modellklasse wird zur Laufzeit aus der Workflow-Definition erzeugt
(workflow_model_by_name()) oder als .py-Datei generiert (ecm-generate-workflow-models). Eine Instanz hält die gesetzten Variablenwerte und serialisiert sich beim Start selbst in das vom Server erwartete DataFields-Format.
|
Das Workflow-Modell ist optional — ein reiner Komfort-Layer für typisierten, entdeckbaren Zugriff. Ein Prozess lässt sich auch ganz ohne Modell starten:
Für nicht-String-Variablen (Zahlen, Datum, Listen, Records) ohne Modell siehe |
1. Modellklassen
ECMWorkflowModel-
Basisklasse eines generierten Workflow-Modells. Die Eingangsvariablen sind typisierte Attribute; eine Instanz wird mit ihnen als Keyword-Argumenten erzeugt.
ECMWorkflowRecordModel-
Basisklasse für ein verschachteltes Record-Modell. Record-Variablen werden als eigene, vollständig typisierte Subklassen abgebildet (rekursiv, inkl. Record-in-Record und Listen von Records).
from ecmind_blue_client.ecm import ECM
ecm = ECM(client)
user = ecm.workflow.organisation_user_by_login("admin")
Model = ecm.workflow.workflow_model_by_name("test", user, "#OSECM_Client#")
record = Model.record_model("TestRecordVar")(
StringField="x", IntegerField=1, StringListField=["a"],
)
instance = Model(StringVar="Hallo", IntegerVar=42, TestRecordVar=record)
Standardmäßig werden nur die Eingangsvariablen (INOUT) exponiert. include_internal=True (bei workflow_model_by_name / make_workflow_model) zeigt auch interne Felder.
2. Typ-Mapping
Jede Variable wird auf einen nativen Python-Typ abgebildet:
| Server-Typ | Python-Typ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typisierte |
Der _SAFE-Suffix ist ein enaio-Varianten-Tag und wird auf den Basistyp abgebildet. Unbekannte Basistypen fallen auf str zurück.
3. Instanzen verwenden
Model(**werte)-
Erzeugt eine Instanz mit den Eingangsvariablen als Keyword-Argumente. Unbekannte Namen lösen
TypeErroraus. - Attributzugriff
-
Werte werden als Attribute gelesen und gesetzt (
instance.StringVar = "x"). Nur deklarierte Eingangsvariablen sind setzbar. Model.record_model("<name>")-
Liefert die typisierte
ECMWorkflowRecordModel-Klasse für eine Record-Variable, mit der Record-Werte erzeugt werden. instance.to_variables()-
Serialisiert die gesetzten Werte in das
start_process(variables=…)-Mapping. Nicht gesetzte Variablen werden ausgelassen. Wird intern vonstart_process()aufgerufen, wenn eine Modellinstanz übergeben wird.
|
Gegen den enaio®-Server verifizierte Wertformate: Skalare (auch Integer/Float/Date/Time) werden als |
4. Datenmodell des Schemas
Das von workflow_model_by_name() intern geparste Schema ist auch direkt zugänglich (z. B. über Model.schema) und besteht aus eingefrorenen Dataclasses:
ECMWorkflowVariableSchema-
-
variables(tuple[ECMWorkflowVariable, …]) — alle Variablen in Dokumentreihenfolge -
inputs()— nur die Start-Eingangsvariablen (INOUT)
-
ECMWorkflowVariable-
-
name(str) — Variablenname (zugleichDataField-Id beim Start) -
type(ECMWorkflowVariableType) — Skalar-Basistyp (für Records PlatzhalterSTRING) -
is_list(bool) — Liste ihres Elementtyps -
is_record(bool) — Elementtyp ist ein Record -
record_members(tuple[ECMWorkflowRecordMember, …]) — Record-Member, wennis_record -
is_input(bool) — Start-Eingangsvariable (INOUT)
-
ECMWorkflowRecordMember-
-
name,type,is_list,is_record,record_members— wie oben; rekursiv
-
ECMWorkflowVariableType-
Enum der Skalar-Basistypen:
STRING,INTEGER,FLOAT,DATE,DATETIME,TIME(jeweils mit dem zugehörigen Python-Typ als Wert).
5. Modelle aus einem Schema bauen
make_workflow_model(schema, name="WorkflowModel", *, include_internal=False) erzeugt zur Laufzeit eine ECMWorkflowModel-Subklasse aus einem geparsten ECMWorkflowVariableSchema. workflow_model_by_name() ist der übliche Einstieg darüber; make_workflow_model ist nützlich, wenn das Schema bereits anderweitig vorliegt (z. B. aus eigenem wfm.GetWorkflow-XML über ECMWorkflowModelParser).
6. Siehe auch
-
ECM-Modell — das DMS-Pendant (Ordner-/Register-/Dokumentmodelle)
-
workflow_model_by_name() — Modell per Workflow-Modellname erzeugen
-
start_process() — Workflow mit einer Modellinstanz starten
-
ecm-generate-workflow-models — Modelle als
.py-Dateien generieren