update()

Aktualisiert ein bestehendes Objekt auf dem Server. Intern wird dms.XMLUpdate verwendet. Die übergebene Modell-Instanz wird nicht verändert.

ECM-Modell-Referenz — vollständige Beschreibung von system.is_modified, system.has_removed_table_rows, system.modified_fields und der Änderungsverfolgung.

Wurden keine Felder geändert und keine Dateien übergeben, wird der Server-Aufruf standardmäßig übersprungen. Mit force=True kann der Aufruf erzwungen werden.

Wird die aktualisierte Instanz direkt nach dem Speichern benötigt, ist update_and_get() die kompaktere Alternative.

1. Signatur

  • Sync

  • Async

ecm.dms.update(
    model: T,
    files: list[JobRequestFile] | None = None,
    replace_files: bool = True,
    force: bool = False,
    *,
    check_mandatory: bool = True,
) -> None
await ecm.dms.update(
    model: T,
    files: list[JobRequestFile] | None = None,
    replace_files: bool = True,
    force: bool = False,
    *,
    check_mandatory: bool = True,
) -> None

2. Parameter

Name Typ Beschreibung

model

ECMFolderModel | ECMRegisterModel | ECMDocumentModel

Die zu aktualisierende Modell-Instanz. Muss vom Server geladen worden sein, damit model.system.id gesetzt ist.

files

list[JobRequestFile] | None

Optionale Dateiliste für das Dokument. Nur für ECMDocumentModel erlaubt — bei Ordner- oder Register-Modellen wird TypeError geworfen. Standard: None.

replace_files

bool

Wenn True (Standard) und files übergeben wurden, ersetzen die neuen Dateien die vorhandenen Dokumentdateien (REPLACEFILES=1). Wenn False, werden die Dateien den bestehenden hinzugefügt. Nur wirksam für ECMDocumentModel mit files.

force

bool

Wenn True, wird der Server-Aufruf immer ausgeführt, auch wenn keine Änderungen erkannt wurden. Standard: False.

check_mandatory

bool

Wenn True (Standard), wird clientseitig geprüft, ob alle als mandatory=True deklarierten ECMField-Felder einen Wert haben. Bei False wird die client- und serverseitige Pflichtfeldprüfung deaktiviert (CHECKOBLIGATION=0).

3. Rückgabewert

None

4. Automatisches Überspringen

Wenn alle der folgenden Bedingungen zutreffen, wird der Server-Aufruf ohne Fehler übersprungen:

  • force=False (Standard)

  • model.system.is_modified ist False — keine Felder wurden geändert

  • files ist None

Das Änderungsprotokoll (is_modified, modified_fields) wird vom Modell automatisch beim Setzen von Feldwerten geführt. Entfernte Tabellenzeilen werden ebenfalls erkannt: Wurden Zeilen gelöscht, wird die Option REPLACETABLEFIELDS=1 automatisch gesetzt.

5. Ausnahmen

ValueError

model.system.id ist None (Objekt wurde nicht vom Server geladen) oder check_mandatory=True und ein Pflichtfeld ist nicht gesetzt.

TypeError

files wurde für ein Ordner- oder Register-Modell übergeben.

6. Beispiele

6.1. Einfaches Feldupdate

  • Sync

  • Async

folder = ecm.dms.get(InvoiceFolder, 12345)
folder.Title = "Rechnung 2024 (aktualisiert)"
ecm.dms.update(folder)
folder = await ecm.dms.get(InvoiceFolder, 12345)
folder.Title = "Rechnung 2024 (aktualisiert)"
await ecm.dms.update(folder)

6.2. Dokument mit Datei ersetzen

  • Sync

  • Async

from ecmind_blue_client.rpc import JobRequestFileFromPath

doc = ecm.dms.get(InvoiceDocument, 42)
doc.Title = "Rechnung Nr. 42 (korrigiert)"
ecm.dms.update(
    doc,
    files=[JobRequestFileFromPath("/tmp/rechnung_v2.pdf")],
    replace_files=True,  # vorhandene Dateien ersetzen (Standard)
)
from ecmind_blue_client.rpc import JobRequestFileFromPath

doc = await ecm.dms.get(InvoiceDocument, 42)
doc.Title = "Rechnung Nr. 42 (korrigiert)"
await ecm.dms.update(
    doc,
    files=[JobRequestFileFromPath("/tmp/rechnung_v2.pdf")],
    replace_files=True,
)

6.3. Datei anhängen statt ersetzen

  • Sync

  • Async

from ecmind_blue_client.rpc import JobRequestFileFromPath

doc = ecm.dms.get(InvoiceDocument, 42)
ecm.dms.update(
    doc,
    files=[JobRequestFileFromPath("/tmp/anhang.pdf")],
    replace_files=False,  # Datei hinzufügen, bestehende behalten
)
from ecmind_blue_client.rpc import JobRequestFileFromPath

doc = await ecm.dms.get(InvoiceDocument, 42)
await ecm.dms.update(
    doc,
    files=[JobRequestFileFromPath("/tmp/anhang.pdf")],
    replace_files=False,
)

6.4. Update erzwingen

Nützlich, wenn externe Logik eine Neuübermittlung erfordert, obwohl keine Felder geändert wurden:

  • Sync

  • Async

folder = ecm.dms.get(InvoiceFolder, 12345)
# keine Feldänderung — ohne force=True würde der Aufruf übersprungen
ecm.dms.update(folder, force=True)
folder = await ecm.dms.get(InvoiceFolder, 12345)
await ecm.dms.update(folder, force=True)

6.5. Pflichtfeldprüfung deaktivieren

  • Sync

  • Async

folder = ecm.dms.get(InvoiceFolder, 12345)
folder.Title = None  # Pflichtfeld leeren
# check_mandatory=False: kein Fehler, Pflichtfeldprüfung auch serverseitig deaktiviert
ecm.dms.update(folder, check_mandatory=False)
folder = await ecm.dms.get(InvoiceFolder, 12345)
folder.Title = None
await ecm.dms.update(folder, check_mandatory=False)

7. Siehe auch

  • update_and_get() — kombiniert update() und get() in einem Aufruf, wenn die aktualisierte Instanz benötigt wird

  • insert() — legt ein neues Objekt an

  • get() — lädt ein einzelnes Objekt vom Server