definition()
Returns the complete object definition of the connected ECM server as a typed
ECMDefinition object. The definition is fetched once via dms.GetObjDef and then
cached on the ecm.system namespace. Subsequent calls return the same instance.
1. Signature
-
Sync
-
Async
ecm.system.definition(*, force_reload: bool = False) -> ECMDefinition
await ecm.system.definition(*, force_reload: bool = False) -> ECMDefinition
2. Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
|
|
|
When |
3. Return value
An ECMDefinition instance. All parsing happens eagerly during construction.
3.1. ECMDefinition
| Property | Type | Description |
|---|---|---|
|
|
The system primary language. |
|
|
All active languages keyed by ISO locale code (e.g. |
|
|
All languages keyed by ISO locale code, including inactive ones. |
|
|
All cabinet definitions keyed by internal name. |
|
|
Timestamp when the definition was generated on the server. |
|
|
Server version string (e.g. |
|
|
|
|
|
Lookup by internal name across all cabinets. Raises |
|
|
Lookup by composite type ID ( |
3.2. ECMLanguageDefinition
| Field | Type | Description |
|---|---|---|
|
|
Numeric language identifier used throughout the definition XML. |
|
|
Human-readable language name (e.g. |
|
|
ISO locale code (e.g. |
|
|
|
|
|
|
3.3. ECMCabinetDefinition
| Property / Method | Type | Description |
|---|---|---|
|
|
Internal name of the cabinet. |
|
|
Display name of the cabinet. |
|
|
Numeric cabinet type ID. |
|
|
All object types in this cabinet keyed by internal name. |
|
|
Filtered view — folder types only. |
|
|
Filtered view — register types only. |
|
|
Filtered view — document types only. |
|
|
Direct access by internal name. Raises |
|
|
Membership test by internal name. |
3.4. ECMObjectDefinition
Common base for ECMFolderDefinition, ECMRegisterDefinition, and ECMDocumentDefinition.
| Property | Type | Description |
|---|---|---|
|
|
Internal (programmatic) name of the object type. |
|
|
Main type enum member (e.g. |
|
|
Numeric object type ID. |
|
|
Composite type identifier: |
|
|
Server-side GUID identifying this object type. |
|
|
Primary database table name. |
|
|
Name entry for the primary language, or |
|
|
All language-specific name entries, keyed by ISO locale code. |
|
|
Top-level fields only. Does not include fields nested inside PageControl pages. |
|
|
All fields flattened recursively across all PageControl pages. |
|
|
Shortcut for |
|
|
Full-text indexing mode: |
|
|
Decoded history tracking flags (index history, document history, versions). |
|
|
File compression mode: |
|
|
Allowed child object types and their maximum counts. |
ECMDocumentDefinition adds one additional field:
| Field | Type | Description |
|---|---|---|
|
|
|
3.4.1. ECMMainType enum
| Member | Description |
|---|---|
|
Folder object type. |
|
Register object type. |
|
Grayscale image document. |
|
Black-and-white image document. |
|
Colour image document. |
|
Windows application document. |
|
Multimedia document. |
|
E-mail document. |
|
XML document. |
|
Container document. |
3.5. ECMDescriptionEntry
Holds the language-specific label of an object type, field, or tab.
| Field | Type | Description |
|---|---|---|
|
|
Display name. |
|
|
Tooltip text shown in the UI. |
|
|
Icon image identifier. |
|
|
URL used for the default view. |
|
|
URL used when creating a new object. |
|
|
URL used when updating an object. |
|
|
URL used for checkout / request. |
|
|
URL used for the read-only view. |
3.6. ECMFieldDefinition
Represents a single field of an object type.
| Property | Type | Description |
|---|---|---|
|
|
Internal (programmatic) name of the field. |
|
|
Database column name (e.g. |
|
|
Logical data type. |
|
|
UI control type (textfield, checkbox, table, page control, etc.). |
|
|
Catalog type, or |
|
|
Label for the primary language. |
|
|
Labels for all languages, keyed by ISO locale code. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Maximum input length, or |
|
|
Validation regular expression, empty if none. |
|
|
Default / initialisation value expression, empty if none. |
|
|
|
|
|
Tabs of a PageControl field ( |
|
|
Column definitions of a TableField ( |
|
|
Inline catalog values embedded in the definition, or |
3.6.1. ECMFieldDataType enum
| Member | Description |
|---|---|
|
Text field ( |
|
Whole-number field. |
|
Boolean / checkbox field. |
|
Decimal number field. |
|
Date field. |
|
Time field. |
|
Combined date and time field. |
3.6.2. ECMControlType enum
| Member | Description |
|---|---|
|
Standard text, date, or number input. |
|
Multi-row table / grid control. |
|
Radio button. |
|
Checkbox. |
|
Image control. |
|
Group box (visual grouping, no database column). |
|
Tab / page control (contains |
|
Embedded web control. |
|
Push button. |
|
Static label (no database column). |
3.7. ECMPageDefinition
Represents a single tab inside a PageControl field.
| Field | Type | Description |
|---|---|---|
|
|
Internal name of the page. |
|
|
Zero-based display order within the PageControl. |
|
|
Label for the primary language, or |
|
|
Labels for all languages, keyed by ISO locale code. |
|
|
Fields on this page, keyed by internal name. |
3.8. ECMTableColumnDefinition
Represents a single column of a TableField.
| Field | Type | Description |
|---|---|---|
|
|
Internal name of the column. |
|
|
Database column name. |
|
|
Logical data type of the column. |
|
|
|
|
|
Zero-based display order of the column in the grid. |
|
|
Display width in grid units ( |
|
|
Label for the primary language. |
|
|
Labels for all languages, keyed by ISO locale code. |
4. Examples
4.1. Read primary language and server version
-
Sync
-
Async
definition = ecm.system.definition()
print(definition.version) # e.g. "5.20"
print(definition.primary_language.iso_code) # e.g. "de_DE"
print(definition.created)
definition = await ecm.system.definition()
print(definition.version)
print(definition.primary_language.iso_code)
print(definition.created)
4.2. List all object types in all cabinets
-
Sync
-
Async
definition = ecm.system.definition()
for cabinet in definition.cabinets.values():
print(f"Cabinet: {cabinet.name}")
for folder in cabinet.folders.values():
label = folder.description.name if folder.description else folder.internal_name
print(f" Folder: {folder.internal_name} ({label})")
for doc in cabinet.documents.values():
label = doc.description.name if doc.description else doc.internal_name
print(f" Document: {doc.internal_name} ({label})")
definition = await ecm.system.definition()
for cabinet in definition.cabinets.values():
print(f"Cabinet: {cabinet.name}")
for folder in cabinet.folders.values():
label = folder.description.name if folder.description else folder.internal_name
print(f" Folder: {folder.internal_name} ({label})")
for doc in cabinet.documents.values():
label = doc.description.name if doc.description else doc.internal_name
print(f" Document: {doc.internal_name} ({label})")
4.3. Inspect fields of an object type
-
Sync
-
Async
definition = ecm.system.definition()
obj = definition["InvoiceFolder"]
for field in obj.all_fields.values():
if field.is_static:
continue
print(
field.internal_name,
field.data_type,
"required" if field.required else "",
"readonly" if field.readonly else "",
)
definition = await ecm.system.definition()
obj = definition["InvoiceFolder"]
for field in obj.all_fields.values():
if field.is_static:
continue
print(
field.internal_name,
field.data_type,
"required" if field.required else "",
"readonly" if field.readonly else "",
)
4.4. Access fields with catalog values
-
Sync
-
Async
definition = ecm.system.definition()
obj = definition["InvoiceFolder"]
for field in obj.all_fields.values():
if field.catalog is None:
continue
print(f"{field.internal_name}: catalog={field.catalog}")
if field.list_values:
for row in field.list_values.rows:
print(f" [{row.index}] {row.value}")
definition = await ecm.system.definition()
obj = definition["InvoiceFolder"]
for field in obj.all_fields.values():
if field.catalog is None:
continue
print(f"{field.internal_name}: catalog={field.catalog}")
if field.list_values:
for row in field.list_values.rows:
print(f" [{row.index}] {row.value}")
4.5. Inspect PageControl tabs and their fields
-
Sync
-
Async
definition = ecm.system.definition()
obj = definition["InvoiceFolder"]
for field in obj.fields.values():
if field.control.value != "page_control":
continue
for page in field.pages.values():
label = page.description.name if page.description else page.internal_name
print(f"Tab: {label}")
for page_field in page.fields.values():
if not page_field.is_static:
print(f" {page_field.internal_name} ({page_field.data_type})")
definition = await ecm.system.definition()
obj = definition["InvoiceFolder"]
for field in obj.fields.values():
if field.control.value != "page_control":
continue
for page in field.pages.values():
label = page.description.name if page.description else page.internal_name
print(f"Tab: {label}")
for page_field in page.fields.values():
if not page_field.is_static:
print(f" {page_field.internal_name} ({page_field.data_type})")
4.6. Inspect table field columns
-
Sync
-
Async
definition = ecm.system.definition()
obj = definition["InvoiceFolder"]
for field in obj.all_fields.values():
if field.control.value != "tablefield":
continue
print(f"Table: {field.internal_name}")
for col in field.columns.values():
print(f" {col.internal_name} ({col.data_type})")
definition = await ecm.system.definition()
obj = definition["InvoiceFolder"]
for field in obj.all_fields.values():
if field.control.value != "tablefield":
continue
print(f"Table: {field.internal_name}")
for col in field.columns.values():
print(f" {col.internal_name} ({col.data_type})")
5. See also
-
ecm.system — Namespace overview