model_by_name()

Gibt eine zur Laufzeit erzeugte Modellklasse (Subklasse von ECMFolderModel, ECMRegisterModel oder ECMDocumentModel) zurück, gebunden an den übergebenen internen Namen. Der Maintype wird über ecm.system.definition() (gecacht) aufgelöst, und die passende Factory (make_folder_model / make_register_model / make_document_model) wird intern aufgerufen.

Verwendung, wenn nur der interne Name bekannt ist — aus einer Konfiguration, einem generischen Tool oder einem Skript — und der Maintype (Ordner, Register, Dokument) nicht vorab feststeht.

1. Signatur

  • Sync

  • Async

ecm.dms.model_by_name(internal_name: str) -> type[_ECMModelBase]
ecm.dms.model_by_name(internal_name: str, base: type[ModelT]) -> type[ModelT]
await ecm.dms.model_by_name(internal_name: str) -> type[_ECMModelBase]
await ecm.dms.model_by_name(internal_name: str, base: type[ModelT]) -> type[ModelT]

2. Parameter

Parameter Typ Beschreibung

internal_name

str

Interner Name des Objekttyps (internal_name).

base

type[ECMFolderModel] | type[ECMRegisterModel] | type[ECMDocumentModel]

Optional. Erwartete Modellart. Verengt den statischen Rückgabetyp auf diese Klasse und wird zur Laufzeit gegen den tatsächlichen Maintype geprüft.

3. Rückgabewert

Eine Subklasse von ECMFolderModel, ECMRegisterModel oder ECMDocumentModel, gebunden an internal_name. Die Klasse hat keine typisierten Feld-Deskriptoren — Felder werden über Model["Feldname"] (für where/order_by) bzw. extra_fields (beim Instanziieren) adressiert.

4. Ausnahmen

Ausnahme Bedingung

KeyError

Kein Objekttyp mit internal_name in der Serverdefinition vorhanden.

TypeError

base wurde übergeben und der Objekttyp ist von anderer Art.

5. Hinweise

  • ecm.system.definition() wird intern aufgerufen und ist nach dem ersten Zugriff gecacht. Der Helper hat damit ab dem zweiten Aufruf keine zusätzlichen Server-Roundtrips.

  • Jeder Aufruf erzeugt eine neue Klasse (konsistent mit den Factories make_folder_model etc.). Für wiederholte Queries auf denselben Typ sollte die Rückgabe in einer Variable zwischengespeichert werden.

  • Dokumenttypen umfassen alle Maintypes 1–8 (DOC_GRAYSCALE, DOC_BW, DOC_COLOR, DOC_WINDOWS, DOC_MULTIMEDIA, DOC_MAIL, DOC_XML, DOC_CONTAINER).

  • Ohne base ist der Rückgabetyp die gemeinsame Basisklasse. Die nach Modellart überladenen Methoden insert(), insert_and_get(), update() und update_and_get() akzeptieren diese nicht, ein Schreibaufruf scheitert dann in der Typprüfung. Für lesende Verwendung wie select() oder delete() genügt der Aufruf ohne base.

6. Beispiele

6.1. Dynamisch aufgelöste Modellklasse mit select() kombinieren

  • Sync

  • Async

Model = ecm.dms.model_by_name("Rechnung")
results = ecm.dms.select(Model).where(
    Model["Belegnummer"] == "R-2026-001",
).execute()
Model = await ecm.dms.model_by_name("Rechnung")
results = await ecm.dms.select(Model).where(
    Model["Belegnummer"] == "R-2026-001",
).execute()

6.2. Generisches Skript über mehrere Typen

  • Sync

  • Async

for name in ["Rechnung", "Vertrag", "Ordner_Kunde"]:
    Model = ecm.dms.model_by_name(name)
    for obj in ecm.dms.select(Model).limit(5).execute():
        print(name, obj.system.id)
for name in ["Rechnung", "Vertrag", "Ordner_Kunde"]:
    Model = await ecm.dms.model_by_name(name)
    for obj in await ecm.dms.select(Model).limit(5).execute():
        print(name, obj.system.id)

6.3. Schreibend arbeiten: erwartete Art angeben

  • Sync

  • Async

Doc = ecm.dms.model_by_name("Rechnung", ECMDocumentModel)   # type[ECMDocumentModel]
doc = ecm.dms.get(Doc, 4711)
ecm.dms.update(doc, files=[JobRequestFileFromPath("rechnung.pdf")], replace_files=True)
Doc = await ecm.dms.model_by_name("Rechnung", ECMDocumentModel)
doc = await ecm.dms.get(Doc, 4711)
await ecm.dms.update(doc, files=[JobRequestFileFromPath("rechnung.pdf")], replace_files=True)

Ist Rechnung in Wahrheit ein Ordner, wird bereits hier ein TypeError ausgelöst und nicht erst beim Schreibaufruf.

7. Siehe auch

  • select() — HOL-Query-Builder, nimmt die zurückgegebene Klasse direkt entgegen

  • select_lol() — LOL-Query-Builder mit derselben Eingabe

  • definition() — gecachte Objekttypdefinitionen

  • Modell-Referenz — make_folder_model / make_register_model / make_document_model