insert()
Legt ein neues Objekt auf dem Server an und gibt (object_id, object_type_id) zurück. Intern wird dms.XMLInsert verwendet. Die übergebene Modell-Instanz wird nicht verändert.
Wird die vollständige Instanz direkt nach dem Anlegen benötigt, ist insert_and_get() die kompaktere Alternative.
1. Signatur
-
Sync
-
Async
ecm.dms.insert(
model: T,
files: list[JobRequestFile] | None = None,
*,
folder_id: int | ECMFolderModel | None = None,
register_id: int | ECMRegisterModel | None = None,
check_mandatory: bool = True,
) -> tuple[int, int]
await ecm.dms.insert(
model: T,
files: list[JobRequestFile] | None = None,
*,
folder_id: int | ECMFolderModel | None = None,
register_id: int | ECMRegisterModel | None = None,
check_mandatory: bool = True,
) -> tuple[int, int]
2. Parameter
| Name | Typ | Beschreibung |
|---|---|---|
|
|
Die zu erstellende Modell-Instanz mit den gewünschten Feldwerten. Die Instanz wird nicht verändert. |
|
|
Optionale Dateiliste für das neue Dokument. Nur für |
|
|
Ordner, in dem das Objekt abgelegt wird — entweder eine numerische ID oder eine |
|
|
Register, in dem das Dokument abgelegt wird ( |
|
|
Wenn |
4. Schreibbare Systemfelder
Systemfelder (SystemFields-Enum) werden standardmäßig aus der dms.XMLInsert-XML herausgefiltert; der enaio-Server lehnt fast alle mit ECMAccessDeniedException ab. Über die Allowlist WRITABLE_SYSTEM_FIELDS (in ecmind_blue_client.const) sind folgende Felder schreibbar:
-
OBJECT_FOREIGNID— String-Feld; Referenz ins externe Archivsystem oder enaio-Objekt-ID für „grüner Pfeil". -
OBJECT_SYSTEMID— Int-Feld; auf Insert nur zulässig, wenn gleichzeitigOBJECT_FOREIGNIDgesetzt ist (sonst Fehler -1013). -
OBJECT_USERGUID— Owner; der Wert muss der Benutzername sein (z. B."ROOT"), nicht die GUID-Hex. Der Server löst auf und speichert die GUID.
Details und Beispiele in update().
5. Ausnahmen
ECMException-
Der Server hat den Insert abgelehnt (
ObjectID == -1). ECMMissingArgumentException-
folder_idfehlt bei einem Register- oder Dokument-Modell. Subklasse vonECMException. TypeError-
fileswurde für ein Ordner- oder Register-Modell übergeben. ValueError-
check_mandatory=Trueund ein Pflichtfeld ist nicht gesetzt, oder ein schreibgeschütztes Feld (ECMField(read_only=…)) wird geschrieben — siehe ECM-Modell.
6. Beispiele
6.1. Einfacher Ordner
-
Sync
-
Async
object_id, object_type_id = ecm.dms.insert(
InvoiceFolder(Title="Rechnung 2024", Year=2024)
)
print(object_id)
object_id, object_type_id = await ecm.dms.insert(
InvoiceFolder(Title="Rechnung 2024", Year=2024)
)
print(object_id)
6.2. Register in einem Ordner ablegen
-
Sync
-
Async
object_id, _ = ecm.dms.insert(
InvoiceRegister(Name="Eingangsrechnungen"),
folder_id=folder.system.id,
)
object_id, _ = await ecm.dms.insert(
InvoiceRegister(Name="Eingangsrechnungen"),
folder_id=folder.system.id,
)
6.3. Dokument mit Datei und Ablageort
-
Sync
-
Async
from ecmind_blue_client.rpc import JobRequestFileFromPath
object_id, _ = ecm.dms.insert(
InvoiceDocument(Title="Rechnung Nr. 42"),
files=[JobRequestFileFromPath("/tmp/rechnung.pdf")],
folder_id=folder.system.id,
register_id=register.system.id,
)
print(object_id)
from ecmind_blue_client.rpc import JobRequestFileFromPath
object_id, _ = await ecm.dms.insert(
InvoiceDocument(Title="Rechnung Nr. 42"),
files=[JobRequestFileFromPath("/tmp/rechnung.pdf")],
folder_id=folder.system.id,
register_id=register.system.id,
)
print(object_id)
6.4. Modell-Instanz als folder_id / register_id übergeben
Statt einer numerischen ID kann direkt eine Modell-Instanz übergeben werden — insert() entnimmt daraus automatisch die ID:
-
Sync
-
Async
folder = ecm.dms.insert_and_get(InvoiceFolder(Title="Rechnung 2024"))
register = ecm.dms.insert_and_get(
InvoiceRegister(Name="Eingang"),
folder_id=folder, # ECMFolderModel-Instanz statt int
)
object_id, _ = ecm.dms.insert(
InvoiceDocument(Title="Rechnung Nr. 42"),
folder_id=folder, # ECMFolderModel-Instanz
register_id=register, # ECMRegisterModel-Instanz
)
folder = await ecm.dms.insert_and_get(InvoiceFolder(Title="Rechnung 2024"))
register = await ecm.dms.insert_and_get(
InvoiceRegister(Name="Eingang"),
folder_id=folder,
)
object_id, _ = await ecm.dms.insert(
InvoiceDocument(Title="Rechnung Nr. 42"),
folder_id=folder,
register_id=register,
)
7. Siehe auch
-
insert_and_get() — kombiniert
insert()undget()in einem Aufruf, wenn die vollständige Instanz benötigt wird -
update() — aktualisiert ein bestehendes Objekt