process_list_by_user()

Ermittelt alle Prozesse, in denen ein Benutzer aktuell ein Work-Item im Eingangskorb hat, über wfm.AdminGetProcessListByUser.

1. Signatur

  • Sync

  • Async

ecm.workflow.process_list_by_user(
    organisation: str | ECMOrganisation,
    user: ECMOrganisationObjectIdLike,
) -> list[ECMProcess]
await ecm.workflow.process_list_by_user(
    organisation: str | ECMOrganisation,
    user: ECMOrganisationObjectIdLike,
) -> list[ECMProcess]

2. Parameter

Parameter Typ Standard Beschreibung

organisation

str | ECMOrganisation

ID der Workflow-Organisation oder eine ECMOrganisation-Instanz, wie sie ecm.workflow.organisations() liefert.

user

str | ECMOrganisationObject | ECMOrganisationObjectRef

Der Workflow-Organisations-Benutzer — nicht die Security-Benutzer-GUID aus ecm.security. Lookup via ecm.workflow.organisation_objects() gefiltert auf die User-Klasse.

3. Rückgabewert

Eine Liste von ECMProcess-Objekten. Leere Liste, wenn keine Work-Items im Eingangskorb liegen.

3.1. Datenmodell

ECMProcess
  • id (str) — GUID der Prozessinstanz

  • name (str) — Anzeigename des Prozesses

  • subject (str) — Betreff (leer, wenn nicht gesetzt)

  • state (int) — Prozess-Status: 1=INIT, 2=RUNNING, 4=SUSPENDED, 8=ACTIVE, 16=TERMINATED, 32=COMPLETED, 64=SYSSUSPENDED

  • creation (ECMProcessCreation) — Anlegungsmetadaten

  • activities (tuple[ECMProcessActivity, …​]) — Aktivitäten des Prozesses, die für den Benutzer sichtbar sind

ECMProcessCreation
  • user_id (str) — GUID des erzeugenden Benutzers

  • user_name (str) — Anzeigename

  • time (datetime \| None) — Zeitpunkt der Anlage (UTC)

ECMProcessActivity
  • id (str) — GUID der Activity-Instanz

  • name (str) — Anzeigename

  • state (int) — Activity-State-Bitmaske; siehe Hinweis unten

  • is_personalised (bool) — Komfort-Flag, äquivalent zu bool(state & 128)

  • creation_time (datetime \| None) — Anlage der Activity (UTC)

  • wi_creation_time (datetime \| None) — Anlage des Work-Items im Eingangskorb (UTC)

  • owner_time (datetime \| None) — Letzte Personalisierung; None wenn aktuell nicht personalisiert (Server liefert 0)

  • reminder_time (datetime \| None) — Erinnerungszeitpunkt; None wenn nicht gesetzt

  • owner (str) — Name des aktuellen Owners; leer, wenn der Server das Attribut nicht liefert

  • owner_id (str) — GUID des aktuellen Owners; leer, wenn der Server das Attribut nicht liefert

Activity-State-Bitmaske (empirisch beobachtet, abweichend von Process.State):

  • 128 — Activity ist personalisiert

  • 64 — Activity ist nicht personalisiert (Erstzustand oder nach Rückgabe)

Die is_personalised-Eigenschaft ist die zuverlässige Prüfung; owner_time korreliert zwar mit der Personalisierung, ist aber als alleiniger Indikator weniger explizit.

4. Beispiele

4.1. Prozessliste für die aktive Organisation und Root

  • Sync

  • Async

from ecmind_blue_client.ecm import (
    ECMOrganisationObjectRequestData,
    ECMOrganisationObjectRequestType,
)

USER_CLASS_ID = "9AB24246BB9040A29FCD6015CF4F4BD9"

active_org = ecm.workflow.active_organisation()
users = ecm.workflow.organisation_objects(
    active_org,
    request_type=ECMOrganisationObjectRequestType.BY_CLASS_IDS,
    class_ids=USER_CLASS_ID,
    request_data=ECMOrganisationObjectRequestData.INDEX_ONLY,
)
root = next(u for u in users if u.name.lower() == "root")

for process in ecm.workflow.process_list_by_user(active_org, root):
    print(f"{process.name}  Status={process.state}")
    for a in process.activities:
        flag = "personalisiert" if a.is_personalised else "offen"
        print(f"  {a.name}  [{flag}]")
from ecmind_blue_client.ecm import (
    ECMOrganisationObjectRequestData,
    ECMOrganisationObjectRequestType,
)

USER_CLASS_ID = "9AB24246BB9040A29FCD6015CF4F4BD9"

active_org = await ecm.workflow.active_organisation()
users = await ecm.workflow.organisation_objects(
    active_org,
    request_type=ECMOrganisationObjectRequestType.BY_CLASS_IDS,
    class_ids=USER_CLASS_ID,
    request_data=ECMOrganisationObjectRequestData.INDEX_ONLY,
)
root = next(u for u in users if u.name.lower() == "root")

for process in await ecm.workflow.process_list_by_user(active_org, root):
    print(f"{process.name}  Status={process.state}")
    for a in process.activities:
        flag = "personalisiert" if a.is_personalised else "offen"
        print(f"  {a.name}  [{flag}]")

4.2. Nur die nicht-personalisierten Aktivitäten filtern

processes = ecm.workflow.process_list_by_user(active_org, root)
open_items = [
    (p, a)
    for p in processes
    for a in p.activities
    if not a.is_personalised
]
print(f"{len(open_items)} offene (nicht personalisierte) Aktivitäten")

5. Hinweise zur Server-Antwort

Beobachtungen vom enaio®-Testserver, die nicht 1:1 der formalen Schemadokumentation entsprechen:

  • Die Attribute Owner und OwnerId der <Activity> werden auch bei personalisierten Aktivitäten nicht immer geliefert. Der Parser behandelt das als „leerer String", die Personalisierung wird über Activity.State & 128 erkannt.

  • OwnerTime="0" wird als „nicht personalisiert" interpretiert und zu None gemappt.

  • Activity.State verwendet eine andere Bitmaske als Process.State. Die dokumentierte Process.State-Aufzählung (1=INIT64=SYSSUSPENDED) gilt für Activities nicht.

6. Siehe auch