update_and_get()

Combines update() and get() into a single call: updates an existing object and immediately returns the fully server-populated model instance.

ECM Model reference — for a full description of all system properties available on the returned instance and how change tracking works.

get() is always executed — even if update() detected no changes and skipped the server call.

1. Signature

  • Sync

  • Async

ecm.dms.update_and_get(
    model: T,
    files: list[JobRequestFile] | None = None,
    replace_files: bool = True,
    force: bool = False,
    *,
    check_mandatory: bool = True,
    rights: bool = False,
    base_params: bool = False,
    file_properties: bool = False,
    variants: bool = False,
    use_result_list: bool = False,
    fields: list[str | ECMField] | None = None,
) -> T
await ecm.dms.update_and_get(
    model: T,
    files: list[JobRequestFile] | None = None,
    replace_files: bool = True,
    force: bool = False,
    *,
    check_mandatory: bool = True,
    rights: bool = False,
    base_params: bool = False,
    file_properties: bool = False,
    variants: bool = False,
    use_result_list: bool = False,
    fields: list[str | ECMField] | None = None,
) -> T

2. Parameters

2.1. Update parameters

Name Type Description

model

ECMFolderModel | ECMRegisterModel | ECMDocumentModel

The model instance to update. Must have been loaded from the server so that model.system.id is set.

files

list[JobRequestFile] | None

Optional list of files for the document. Only allowed for ECMDocumentModel — raises TypeError for folder or register models. Default: None.

replace_files

bool

When True (default) and files are provided, the new files replace the existing document files (REPLACEFILES=1). When False, files are appended to the existing ones.

force

bool

When True, the update call is always executed even when no changes are detected. Default: False.

check_mandatory

bool

When True (default), validates client-side that all mandatory fields are set. When False, both client-side and server-side obligation checks are disabled (CHECKOBLIGATION=0).

2.2. Get parameters

The following parameters are forwarded unchanged to get(). See the get() reference for full details and behaviour.

Name Type Summary

rights

bool

Fetch access rights (obj.system.rights). Default: False.

base_params

bool

Fetch administrative metadata (obj.system.base_params). Default: False.

file_properties

bool

Fetch file metadata (obj.system.file_properties, documents only). Default: False.

variants

bool

Fetch W-module version branches (obj.system.variants). Default: False.

use_result_list

bool

Switch retrieval mode (enables folder_id/register_id in result). Default: False.

fields

list[str | ECMField] | None

Restrict returned fields. Only effective with use_result_list=True. Default: None.

3. Return value

A typed model instance populated with all server-side field values (ID, system fields, index fields).

4. Exceptions

ValueError

model.system.id is None or check_mandatory=True and a required field is not set.

TypeError

files was provided for a folder or register model.

5. Examples

5.1. Simple field update

  • Sync

  • Async

folder = ecm.dms.get(InvoiceFolder, 12345)
folder.Title = "Invoice 2024 (updated)"
folder = ecm.dms.update_and_get(folder)
print(folder.system.id, folder.Title)
folder = await ecm.dms.get(InvoiceFolder, 12345)
folder.Title = "Invoice 2024 (updated)"
folder = await ecm.dms.update_and_get(folder)
print(folder.system.id, folder.Title)

5.2. Replace document file

  • Sync

  • Async

from ecmind_blue_client.rpc import JobRequestFileFromPath

doc = ecm.dms.get(InvoiceDocument, 42)
doc.Title = "Invoice No. 42 (corrected)"
doc = ecm.dms.update_and_get(
    doc,
    files=[JobRequestFileFromPath("/tmp/invoice_v2.pdf")],
)
from ecmind_blue_client.rpc import JobRequestFileFromPath

doc = await ecm.dms.get(InvoiceDocument, 42)
doc.Title = "Invoice No. 42 (corrected)"
doc = await ecm.dms.update_and_get(
    doc,
    files=[JobRequestFileFromPath("/tmp/invoice_v2.pdf")],
)

5.3. With metadata from get()

The rights, base_params, and file_properties parameters behave identically to get():

  • Sync

  • Async

doc = ecm.dms.get(InvoiceDocument, 42)
doc.Title = "Invoice No. 42 (corrected)"
doc = ecm.dms.update_and_get(
    doc,
    files=[JobRequestFileFromPath("/tmp/invoice_v2.pdf")],
    rights=True,
    base_params=True,
    file_properties=True,
)
print(doc.system.rights.edit_metadata)
print(doc.system.base_params.creator)
print(doc.system.file_properties.extension)
doc = await ecm.dms.get(InvoiceDocument, 42)
doc.Title = "Invoice No. 42 (corrected)"
doc = await ecm.dms.update_and_get(
    doc,
    files=[JobRequestFileFromPath("/tmp/invoice_v2.pdf")],
    rights=True,
    base_params=True,
    file_properties=True,
)
print(doc.system.rights.edit_metadata)
print(doc.system.base_params.creator)
print(doc.system.file_properties.extension)

5.4. Read filing location from result (use_result_list)

folder_id and register_id in the result are only available with use_result_list=True — see Retrieval modes in get():

  • Sync

  • Async

doc = ecm.dms.get(InvoiceDocument, 42)
doc.Title = "Invoice No. 42 (updated)"
doc = ecm.dms.update_and_get(doc, use_result_list=True)
print(doc.system.folder_id)
print(doc.system.register_id)
doc = await ecm.dms.get(InvoiceDocument, 42)
doc.Title = "Invoice No. 42 (updated)"
doc = await ecm.dms.update_and_get(doc, use_result_list=True)
print(doc.system.folder_id)
print(doc.system.register_id)

6. See also

  • update() — updates an object without returning it

  • insert_and_get() — equivalent pattern for creating new objects

  • get() — loads a single object from the server