Hallo @globisch, vielen Dank für das Update.
Ein Hinweis nebenbei: Die Instanziierung des Jobs sollte viel kompakter möglich sein:
process_job = Job(
jobname="wfm.CreateProcessInstance",
UserId=self.constantController.WF_USER_ID,
OrganisationId=self.constantController.WF_ORG_ID,
WorkflowId=self.constantController.WF_WF_ID,
ClientTypeId=self.constantController.WF_CLIENT_TYP_ID,
)
Wir haben mit ecmind_blue_client_workflow auch schon ein paar Workflow-Helper, aber Deinen Anwendungsfall haben wir bisher nicht umgesetzt - ggf. könnten wir uns da zusammentun? Der Helper ist wiederum Open-Source und wir freuen uns über Pull-Requests oder Hilfe aller Art.
Wie ich sehe, verwendet das DataFields
-XML ![DATA...]
-Elemente. Diese werden leider von xml.etree.ElementTree
und damit auch von XmlElement
nicht unterstützt. Falls diese nicht nötig sind/wären, wäre die XML-Erzeugung viel einfacher sauber möglich:
from XmlElement import XmlElement
class TestClass():
def __init__(self):
self.appointment_date = "12.08.2024"
self.folder_osid = 12345
self.subject = "Test 1234"
self.recipient = "ROOT"
self.object_type = 232160
self.appointment_number = "12345"
def create_data_fields_xml(self) -> XmlElement:
return XmlElement.from_object("DataFields", {"DataField": [
{"@Id": "dTermin", "#": self.appointment_date},
{"@Id": "sFolderID", "#": self.folder_osid},
{"@Id": "sBetreff", "#": self.subject},
{"@Id": "sReceiver", "#": self.recipient},
{"@Id": "sType", "#": self.object_type},
{"@Id": "sTerminnummer", "#": self.appointment_number},
]})
@Globisch Ich gehe nicht davon aus, dass wir auf das CDATA
-Zeug verzichten dürfen?
Eventuell sollten wir den String dann zumindest so erzeugen:
from lxml import etree
from XmlElement import XmlElement
class TestClass():
def __init__(self):
self.appointment_date = "12.08.2024"
self.folder_osid = 12345
self.subject = "Test 1234"
self.recipient = "ROOT"
self.object_type = 232160
self.appointment_number = "12345"
def create_data_fields_xml_with_lxml(self) -> str:
data_fields = etree.Element("DataFields")
for field_id, value in [
("dTermin", self.appointment_date),
("sFolderID", self.folder_osid),
("sBetreff", self.subject),
("sReceiver", self.recipient),
("sType", self.object_type),
("sTerminnummer", self.appointment_number)
]:
data_field = etree.SubElement(data_fields, "DataField", Id=field_id)
cdata_content = etree.CDATA(f"<WFVar><String>{value}</String></WFVar>")
data_field.text = cdata_content
return etree.tostring(data_fields, pretty_print=True, encoding="unicode")