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 |
|---|---|---|
|
|
Die zu aktualisierende Modell-Instanz. Muss vom Server geladen worden sein, damit |
|
|
Optionale Dateiliste für das Dokument. Nur für |
|
|
Wenn |
|
|
Wenn |
|
|
Wenn |
4. Automatisches Überspringen
Wenn alle der folgenden Bedingungen zutreffen, wird der Server-Aufruf ohne Fehler übersprungen:
-
force=False(Standard) -
model.system.is_modifiedistFalse— keine Felder wurden geändert -
filesistNone
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.idistNone(Objekt wurde nicht vom Server geladen) odercheck_mandatory=Trueund ein Pflichtfeld ist nicht gesetzt. TypeError-
fileswurde 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()undget()in einem Aufruf, wenn die aktualisierte Instanz benötigt wird -
insert() — legt ein neues Objekt an
-
get() — lädt ein einzelnes Objekt vom Server