start_process()

Erzeugt eine Workflow-Prozessinstanz und startet sie in einem Aufruf. Intern werden wfm.CreateProcessInstance (liefert die ProcessId) und anschließend wfm.StartProcess ausgeführt. Rückgabe ist die ID des neuen Prozesses.

1. Signatur

  • Sync

  • Async

ecm.workflow.start_process(
    user: ECMOrganisationObjectIdLike,
    workflow: str | ECMWorkflow,
    client_type: str | ECMClientType,
    organisation: str | ECMOrganisation | None = None,
    *,
    variables: Mapping[str, str | RawWorkflowVariable] | None = None,
    documents: Iterable[ECMWorkspaceDocument] | None = None,
) -> str
await ecm.workflow.start_process(
    user: ECMOrganisationObjectIdLike,
    workflow: str | ECMWorkflow,
    client_type: str | ECMClientType,
    organisation: str | ECMOrganisation | None = None,
    *,
    variables: Mapping[str, str | RawWorkflowVariable] | None = None,
    documents: Iterable[ECMWorkspaceDocument] | None = None,
) -> str

2. Parameter

Parameter Typ Standard Beschreibung

user

str | ECMOrganisationObject | ECMOrganisationObjectRef

Der Workflow-Organisations-Benutzer — nicht die Security-Benutzer-GUID. Lookup via ecm.workflow.organisation_objects().

workflow

str | ECMWorkflow

Der zu startende Workflow: ein ECMWorkflow, eine Family-GUID oder ein Workflow-Modellname. Ein roher String, der wie eine GUID aussieht (32 Hex-Zeichen), wird als Family-ID interpretiert, sonst als Modellname (Auflösung via workflow_by_name()).

client_type

str | ECMClientType

Client-Typ als ECMClientType, GUID oder Name. Pflichtparameter — der Server weist einen leeren Client-Typ ab; es gibt keinen „alle Clients"-Wert.

organisation

str | ECMOrganisation | None

None

Bei None wird die aktive Organisation verwendet (auch für eine interne Namensauflösung).

variables

Mapping[str, str | RawWorkflowVariable] | ECMWorkflowModel | None

None

Workflow-Eingangsvariablen — entweder ein Mapping (String-Werte als <WFVar><String>…</String></WFVar>; für nicht-String-Variablen RawWorkflowVariable mit vorserialisiertem XML, siehe Wertformate unten) oder eine typisierte Modellinstanz aus workflow_model_by_name() (empfohlen — übernimmt die Serialisierung selbst).

documents

Iterable[ECMWorkspaceDocument] | None

None

Dokumente, die in den Workspace der Workflow-Akte gelegt werden.

2.1. ECMWorkspaceDocument

  • id (int) — Dokument-ID

  • type (int) — Objekttyp-ID des Dokuments

  • location (int, Standard 1) — 1 = SDREL, 2 = Systemarchiv

  • moveable (bool, Standard True) — Verschieben zwischen Infobereich und Workspace erlaubt

  • deleteable (bool, Standard False) — Löschen aus der Akte erlaubt

  • in_workspace (bool, Standard True) — True = im Workspace (Workflow-Standard), False = im Infobereich

3. Rückgabewert

Die ProcessId (str) des neu gestarteten Prozesses.

4. Fehler

  • ECMMissingArgumentException — kein Client-Typ angegeben

  • ECMNotFoundException — ein als Name übergebener Workflow oder Client-Typ existiert nicht

  • ECMWrongStateException — ein als Name übergebener Workflow oder Client-Typ ist mehrdeutig

5. Beispiele

5.1. Kürzester Weg: per Modellname, aktive Organisation

process_id = ecm.workflow.start_process(
    user=user,
    workflow="test",                 # Workflow-Modellname
    client_type="#OSECM_Client#",    # Client-Typ-Name
)
print(process_id)

5.2. Mit Eingangsvariablen und einem Dokument

from ecmind_blue_client.ecm import ECMWorkspaceDocument, RawWorkflowVariable

process_id = ecm.workflow.start_process(
    user=user,
    workflow="test",
    client_type="#OSECM_Client#",
    variables={
        "StringVar": "Hallo",
        # Skalare (auch Zahlen/Datum/Zeit) gehen als <String> — der Server konvertiert
        "IntegerVar": RawWorkflowVariable("<WFVar><String>42</String></WFVar>"),
    },
    documents=[ECMWorkspaceDocument(id=4711, type=131073)],
)

5.3. Vollständiger Discover-→-Start-Ablauf

client_type = next(
    ct for ct in ecm.workflow.client_types() if ct.name == "#OSECM_Client#"
)
wf = ecm.workflow.workflow_by_name("test", user, client_type)
process_id = ecm.workflow.start_process(user=user, workflow=wf, client_type=client_type)

6. Variablen-Wertformate

Gegen den enaio®-Server verifizierte Formate für RawWorkflowVariable:

  • Skalare (String, Integer, Float, Date, Time) werden als <WFVar><String>WERT</String></WFVar> gesendet — der Server konvertiert. Typisierte Tags wie <Integer> werden abgewiesen.

  • Datetime erwartet einen Unix-Epoch-Timestamp im <String>.

  • Listen werden nicht in <WFVar> gekapselt: <List><ListItem Id="GUID" Selection="0"><STRING>WERT</STRING></ListItem></List> (Member-Tag in Großschreibung: <STRING>).

  • Records verwenden <Record><Member Name="…​">…​</Member></Record> und müssen jedes vom Record-Typ deklarierte Member setzen.

7. Hinweise zur Server-Antwort

  • ClientTypeId ist serverseitig zwingend genau eine GUID. Ein leerer Wert wird mit GUID 'ClientTypeId' is not set abgewiesen, eine Mehrfachliste als ungültige GUID — es gibt keinen „alle Clients"-Wert (empirisch gegen den enaio®-Testserver verifiziert).

  • wfm.StartProcess legt übergebene Dokumente immer in den Workspace der Workflow-Akte.

8. Siehe auch