Verschieben von Objekten (nicht dokumentierte Funktion der Server-API)

Ich denke es könnte auch für andere interessant sein. Der enaio-Client verwendet für das Verschieben von Objekten eine nicht dokumentierte Funktion. „dms.MoveObject“

    result = enaio_client.execute(
        Job(
            jobname='dms.MoveObject', 
            Flags=0, 
            FolderID=folder_id_register, #ID des Folder-Ziels
            ObjectID=objekt[SystemFields.OBJECT_ID.name], #ID des zu verschiebenden Objekts
            ObjectType=int(objekt['OBJECT_TYPE_ID']), #Type des zu verschiebenden Objekts
            RegisterID=ziel_id, #ID des Register-Ziels
            UserIdent=0,
        )
    )

Der Parameter „UserIdent“ scheint egal zu sein. Ich hatte ihn bisher immer auf 0 gelassen.

Zu Beachten: Ich habe den Befehl noch nicht getestet mit Dokumenten mit mehreren Standorten. Hier scheint der Client nämlich ein UPDATE der sdrel-Tabelle durchzuführen.

1 „Gefällt mir“

Hallo @danielstraub, hast Du damit Vorteile gegenüber der Verwendung von DMS.XMLMove, z. B. beim Tempo? (Abgesehen davon, dass man sich das Aufbauen des XMLs sparen kann, was nett ist.)

Hallo @rk ,
ich habe keine Performance unterschiede wahrgenommen. Der große Vorteil ist hierbei glaube tatsächlich die einfache Handhabung.
Vielleicht hat die Funktion noch einen Vorteil - aus irgendeinem Grund wird die Funktion vermutlich vom enaio Client verwendet anstatt „DMS.XMLMove“.

Notiz zur XML-Variante (nur, weil ich es selbst hier immer wieder suche):

def move_object(document_id, document_object_name, folder_object_name target_folder_id, target_register_id, target_register_type_id):
    logging.info("Moving DocumentId %s to RegisterId %s.", document_id, target_register_id)

    job = Job(
        jobname=Jobs.DMS_XMLMOVE,
        Flags=0,
        XML=XmlElement.from_object("DMSData", {
            "Archive": {
                "@internal_name": folder_object_name,
                "ObjectType": {
                    "@type": "DOCUMENT",
                    "@internal_name": document_object_name,
                    "Object": {
                        "@object_id": document_id,
                        "@folder_id": target_folder_id,
                        "@register_id": target_register_id,
                        "@register_type": target_register_type_id,
                    }
                }
            }
        })
    )
    result = enaio.execute(job)
    if not result:
        raise RuntimeError(result.error_message)

Wie man hier an der Signatur der Methode sehen kann, ist die Nutzung echt mühsam, vgl. die Vermutung von @danielstraub. Weiterhin reagiert dies jetzt bisher nicht auf Dokumente, welche nicht in ein Register geschoben werden sollen.

Ich frage mich trotzdem, ob ich das mal allgemeiner in den ecmind_blue_client.Client übernehmen soll.