Danke für diesen hilfreichen Beitrag @rk!
Hier noch ein Beispiel für eine HOL-Query, falls man nicht alle Metadatenfelder des Ordners zurückeralten möchte, sondern nur bestimmte einzelne Felder (in diesem Beispiel wird das Feld „Year“ vom Ordner für jedes Dokument geholt, das mit der entsprechenden ID innerhalb der letzten 10 Jahre gefunden werden konnte:
def get_docs(id) -> List:
logging.info(f'get_docs({id})')
query_xml = X.from_object('DMSQuery', {
'Archive': {
'ObjectType': {
'@internal_name': 'Doc',
'@field_schema': 'DEF',
'Fields': {
'Field': {'@internal_name': 'OBJECT_ID', '@system': '1'}
},
'Conditions': {
'ConditionObject': [
{
'@internal_name': 'Folder',
'FieldGroup': {
'@operator': 'OR',
'FieldCondition': [
{'@internal_name': 'ID1', 'Value': {'#': id}},
{'@internal_name': 'ID2', 'Value': {'#': id}},
]},
'FieldCondition': [
{'@internal_name': 'Year', '@operator': '>=', 'Value': {'#': str(datetime.today().year - 10)}},
]
},
{
'@internal_name': 'Doc',
'FieldGroup': {'@operator': 'OR', 'FieldGroup': doc_types_and_titles}
}
]
},
'ParentObjects': {
'@parent_schema': 'DEF',
'ParentObjectType':{
'@internal_name': 'Folder',
'Fields': {
'Field': {'@internal_name': 'Year'}
},
}
},
}
}
})
job = Job('dms.GetResultList', Flags=0, Encoding='UTF-8', RequestType='HOL', XML=query_xml)
result = client.execute(job)
if result.return_code == 0 and result.values['TotalHits'] > 0:
result_xml = X.from_string(result.values['XML'])
type_id = int(result_xml['Archive'][0]['ObjectType'][0]['ObjectList'][0]['Object'][0]['ChildObjects'][0]['ObjectType'][0].attributes['id'])
result_list = []
for folder in result_xml['Archive'][0]['ObjectType'][0]['ObjectList']: # Loop over Steuerdossier NP folders
period = folder['Object'][0]['Fields'][0]['Field'][0].text
result_list.extend([ {'id': int(row.attributes['id']), 'type': type_id, 'year': year } for row in folder['Object'][0]['ChildObjects'][0]['ObjectType'][0]['ObjectList'][0]['Object']])
return result_list
else:
logging.error(result.error_message)
return []