Im Rahmen eines Projekts habe ich folgenden Code gebaut, welcher die Metadaten eines Dokuments inklusive der Ordner- und Registermetadaten holt. Definitiv noch nicht umgesetzt ist eine Lösung, wenn der gleiche Registertyp mehrfach geschachtelt ist. Dennoch wollte ich dieses Beispiel nicht verpuffen lassen und packe es mal einfach hier rein:
from XmlElement import XmlElement
from ecmind_blue_client import Job, Jobs
from ecmind_blue_client.tcp_pool_client import TcpPoolClient as Client
enaio = Client(connection_string="localhost:4000:100", appname="test", username="root", password="optimal")
def get_metadata(internal_name:str, doc_id: int) -> dict:
query_xml = XmlElement.from_object(
"DMSQuery",
{
"Archive": {
"ObjectType": {
"@internal_name": internal_name,
"Fields": {"@field_schema": "all"},
"Conditions": {
"ConditionObject": {
"@internal_name": internal_name,
"FieldCondition": {
"@internal_name": "OBJECT_ID",
"@system": "1",
"Value": str(doc_id),
},
}
},
"ParentObjects": {"@parent_schema": "all"},
}
}
},
)
job = Job(
jobname=Jobs.DMS_GETRESULTLIST,
Flags=0,
XML=query_xml,
Encoding="UTF-8",
RequestType="HOL",
FieldSchema="ALL",
DateFormat="%Y-%m-%d",
)
job_result = enaio.execute(job)
assert job_result.return_code == 0, job_result.error_message
result_xml = XmlElement.from_string(job_result.values["XML"])
result = {}
level_name = ""
for e in result_xml.walk():
if "internal_name" in e.attributes:
if "table" in e.attributes:
result[level_name] = {}
else:
result[level_name][e.attributes["internal_name"]] = e.text
return result
Das sollten wir mal verallgemeinern und in eines der ecmind_blue_client
-Module bauen. Die Frage ist, wie weit gehen mit den HOL-Anfragen. Im Moment bin ich aber froh, dass ich das konkrete Problem so lösen konnte und hoffe, das Beispiel hilft vielleicht mal jemand anderen weiter.