Gerade habe ich im Rahmen eines Projekts diesen Code produziert. Hier werden Workflow-Rollen zu den aktiven Organisationen aus dem enaio ausgelesen und für später in ein dict gespeichert.
from ecmind_blue_client import Job
from ecmind_blue_client.tcp_client import TcpClient as Client
from XmlElement import XmlElement
client = Client(...)
result_get_organisations = client.execute(Job(jobname='wfm.GetOrganisations'))
if not result_get_organisations.return_code == 0:
raise RuntimeError(result_get_organisations.error_message)
listify = lambda e: e if isinstance(e, list) else [ e ]
organisations = listify(
XmlElement.from_string(
result_get_organisations.values['Organisations']
).to_dict()['Organisation']
)
active_organisations = { o['@Id']: o['@Name'] for o in organisations if o['@Active'] == 1 }
for org_id in active_organisations:
result_get_organisations_objects = client.execute(Job(
jobname='wfm.GetOrganisationObjects',
OrganisationId=org_id,
RequestType=4,
ObjectIds='',
ObjectName='',
ClassIds='',
ClassName='Rolle',
AttributeId='',
AttributeValue='',
RequestData=1
))
if not result_get_organisations_objects.return_code == 0:
raise RuntimeError(result_get_organisations_objects.error_message)
roles = {r['@Id']: r['@Name'] for r in listify(
XmlElement.from_string(
result_get_organisations_objects.values['Objects']
).to_dict()['Object']
) }
print(roles)
Bei solchen Gelegenheiten frage ich mich immer, wie wir mit solchen Fragmenten umgehen sollen.
In den ecmind_blue_client integrieren.
In ein Sammel-Helper-Modul auslagern, welches parallel zu ecmind_blue_client existiert.
Thematisch sortierte einzelne Helper-Module produzieren, z. B. „Workflow“, „Conversion“ etc.
Snippets verwalten und jeweils in Code-Form in die laufenden Projekte übernehmen.
Mit dem OS_ServerAPI-Handbuch jeweils ad hoc schreiben - die Suche nach Code-Konserven dauert länger.
0Teilnehmer
Die naheliegende (weil arbeitsarme) Variante 1 - in den ecmind_blue_client integrieren - birgt natürlich das Risiko, dass dieser immer mehr Abhängigkeiten bekommt und übersichtlicher wird. Dafür müsste man nicht lange überlegen, wo eine Funktion zu finden ist. Was meint Ihr? Fehlt eine Option oder habt Ihr eine Idee?
Ich habe hier im Rahmen eines anderen Projekts einige Metrics für enaio ausgelesen. Z.B. Anzahl liste aller Sessions, CPB Queues, Dokumentengrösse. Diese basieren auch auf ebenfalls auf enaio Server-API Befehlen und könnten daher auch in diese Helper übergehen.
Ich denke eine gewisse thematische Sortierung macht das Ganze etwas übersichtlicher. Ich müsste nächste Woche auch mal schauen was wir schon an Snippets vorliegen haben. Eventuell kann davon etwas verwendet werden.
Hallo zusammen, ich habe einen MVP erstellt, um diesen mit Euch zu diskutieren. Es gäbe jetzt folgende neue Strukturen:
Repo für das erste Zusatzmodul „Workflow“
PyPI-Projekt für das erste Zusatzmodul „Workflow“
Also könnt Ihr das bereits testen, wenn Ihr mögt:
pip install ecmind_blue_client_workflow
Beispielhafte Nutzung
Im MVP gibt es bisher genau eine Funktion im Modul workflow. Ich hätte jetzt hier keine Classes erwartet, deshalb müssen wir der Helper-Funktion workflow.get_organisations() unser Client-Objekt übergeben:
from ecmind_blue_client.tcp_client import TcpClient as Client
from ecmind_blue_client_workflow import workflow
client = Client(hostname='enaio-rk-2021', port=4000, appname='unittest', username='root', password='optimal')
print(workflow.get_organisations(client, only_active=True))
Was meint Ihr zur Benennung, zur Struktur, zum Vorgehen usw.?
Diese Methode liefert einem die Liste aller laufenden Prozesse eines Workflows zurück.
Interessant ist diese insbesondere zur Überwachung abgebrochener Workflows.
Ein Code Beispiel ist in der README.md hinzugefügt.
admin_get_workflow_list()
Diese Methode liefert einem die Liste aktiven Workflow-Modelle und deren Anzahl an laufenden Prozessen zurück. Diese Methode kann zum Beispiel für die Statistik von Monitoring Systemen relevant. Ein Code Beispiel ist in der README.md hinzugefügt.
Diese Methoden entsprechen den Listen aus dem Workflow-Administrator.
Die neue Methode get_sessions liefert einem alle laufenden Sessions auf dem verbundenen Server zurück. Dies kann auch für Monitoring Zwecke interessant sein. Ein Beispiel-Code habe ich in die README.md hinzugefügt.
Hallo zusammen, nachdem das jetzt so eigentlich ganz aufgeräumt ist, würde ich beliebt machen, dass wir praktisch alle Helper-Funktionen aus dem heutigen client.py rausräumen.
Ich würde mir einen ecmind_blue_client_dms-Modul vorstellen, welches diese Funktionen übernimmt:
get_object_type_by_id
store_in_cache
store_in_cache_by_id
xml_import
get_object_details
lol_query
Würde Euch dieser Umbau noch passen, würde uns das unglücklich machen, ist es überhaupt eine gute Idee oder ist das die „Kernkompetenz“ der Bibliothek?