move()
Moves a document or register to a new folder/register location using dms.XMLMove.
Moving a register also moves all its contained child objects recursively.
When wf_to_user_tray=True, the document is moved from the workflow tray to
the user tray. In that case no location parameters should be provided.
1. Signature
-
Sync
-
Async
ecm.dms.move(
model: ECMDocumentModel | ECMRegisterModel | int,
object_type: int | str | None = None,
*,
folder_id: int | ECMFolderModel | None = None,
register_id: int | ECMRegisterModel | None = None,
register_type: int | None = None,
wf_to_user_tray: bool = False,
) -> None
await ecm.dms.move(
model: ECMDocumentModel | ECMRegisterModel | int,
object_type: int | str | None = None,
*,
folder_id: int | ECMFolderModel | None = None,
register_id: int | ECMRegisterModel | None = None,
register_type: int | None = None,
wf_to_user_tray: bool = False,
) -> None
2. Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
|
|
— |
The object to move. Either a model instance (must have |
|
|
|
Only required when |
|
|
|
Target folder — a numeric ID or an |
|
|
|
Target register — a numeric ID or an |
|
|
|
Type ID of the target register. Optional, but passing it is faster: the server identifies the target register by the pair of ID and type, so a missing type is resolved automatically. That resolution costs one extra |
|
|
|
When |
3. Exceptions
| Exception | Condition |
|---|---|
|
|
|
|
4. Examples
4.1. Move a document to a different folder
-
Sync
-
Async
doc = ecm.dms.select(InvoiceDocument).where(InvoiceDocument.Title == "Draft").execute()[0]
target_folder = ecm.dms.select(InvoiceFolder).where(InvoiceFolder.Year == 2024).execute()[0]
ecm.dms.move(doc, folder_id=target_folder, register_id=-1)
doc = (await ecm.dms.select(InvoiceDocument).where(InvoiceDocument.Title == "Draft").execute())[0]
target_folder = (await ecm.dms.select(InvoiceFolder).where(InvoiceFolder.Year == 2024).execute())[0]
await ecm.dms.move(doc, folder_id=target_folder, register_id=-1)
4.2. Move using plain object ID and type name
-
Sync
-
Async
ecm.dms.move(
42,
"InvoiceDocument",
folder_id=100,
register_id=-1,
)
await ecm.dms.move(
42,
"InvoiceDocument",
folder_id=100,
register_id=-1,
)
4.3. Move a document into an existing register
-
Sync
-
Async
register = ecm.dms.select(ContractRegister).where(ContractRegister.Name == "Contracts").execute()[0]
ecm.dms.move(doc, folder_id=target_folder, register_id=register)
register = (await ecm.dms.select(ContractRegister).where(ContractRegister.Name == "Contracts").execute())[0]
await ecm.dms.move(doc, folder_id=target_folder, register_id=register)
4.4. Pass the register type (faster)
The server identifies the target register by the pair register_id + register_type.
When register_type is missing the client resolves it: from the ECMRegisterModel
instance if one was passed, otherwise with an extra dms.GetObjectTypeByID call. That
round trip happens on every move(). When filing many objects into the same register,
resolve the type once and pass it along, saving one server call per document.
register = ecm.dms.select(ContractRegister).where(ContractRegister.Name == "Contracts").execute()[0]
register_type = register.system.type_id # or: ecm.dms.get_object_type_by_id(register_id)
for doc in documents:
ecm.dms.move(
doc.system.id,
object_type=ContractDocument._internal_name_,
folder_id=target_folder_id,
register_id=register.system.id,
register_type=register_type,
)