variants()

Liest den Variantenbaum eines Dokuments (W-Modul) und gibt nur den geparsten Abschnitt <DocumentVariants> zurück. Anders als bei get() mit variants=True oder select() mit .variants() wird dafür keine typisierte oder generierte Modellklasse benötigt — eine Objekt-ID genügt.

1. Signatur

  • Sync

  • Async

ecm.dms.variants(
    document: int | ECMDocumentModel | ECMModelDocumentVariant,
    object_type_id: int | None = None,
) -> list[ECMModelDocumentVariant]
await ecm.dms.variants(
    document: int | ECMDocumentModel | ECMModelDocumentVariant,
    object_type_id: int | None = None,
) -> list[ECMModelDocumentVariant]

2. Parameter

Parameter Typ Standard Beschreibung

document

int | ECMDocumentModel | ECMModelDocumentVariant

Das Dokument: numerische ID, Modell-Instanz (deren id wird verwendet) oder ein Knoten aus einem bereits gelesenen Variantenbaum (dessen doc_id wird verwendet).

object_type_id

int | None

None

Die numerische Objekttyp-ID. Wenn None, wird sie aus der Modell-Instanz übernommen oder über get_object_type_by_id() ermittelt. Durch Angabe wird ein zusätzlicher Server-Roundtrip vermieden.

3. Rückgabewert

list[ECMModelDocumentVariant] — die Wurzelvarianten mit ihren verschachtelten children. Die Liste ist leer, wenn das Dokument keine Varianten hat; das ist bei jedem Dokument ohne aktiviertes W-Modul der Fall.

Jeder Knoten enthält doc_id, doc_ver, is_active, doc_parent, children und level (siehe ECM-Modell). walk() flacht einen Knoten samt aller Unterknoten tiefensuchend ab:

for root in ecm.dms.variants(12345):
    for variant in root.walk():
        print("  " * variant.level, variant.doc_ver, "aktiv" if variant.is_active else "")

4. Ausnahmen

Ausnahme Bedingung

ValueError

document ist eine Modell-Instanz mit id gleich None.

ECMNotFoundException

Der Server liefert kein Objekt zu dieser ID. Eine nicht existierende ID meldet der Server je nach Rechtelage auch als ECMAccessDeniedException.

5. Beispiele

5.1. Variantenbaum per ID lesen

  • Sync

  • Async

tree = ecm.dms.variants(12345)
print([variant.doc_ver for root in tree for variant in root.walk()])
tree = await ecm.dms.variants(12345)
print([variant.doc_ver for root in tree for variant in root.walk()])

5.2. Alle Varianten-IDs eines Dokuments sammeln

  • Sync

  • Async

doc = ecm.dms.get(InvoiceDocument, 12345)
ids = [variant.doc_id for root in ecm.dms.variants(doc) for variant in root.walk()]
doc = await ecm.dms.get(InvoiceDocument, 12345)
ids = [variant.doc_id for root in await ecm.dms.variants(doc) for variant in root.walk()]

6. Siehe auch