Workflows in APEX mit Camunda

Workflows in APEX mit Camunda Maximilian Stahl MT AG Ratingen Schlüsselworte Oracle Applicaton Expres, APEX, Workflow, Arbeitsprozess, Open Source Wor...
79 downloads 1 Views 1MB Size
Workflows in APEX mit Camunda Maximilian Stahl MT AG Ratingen Schlüsselworte Oracle Applicaton Expres, APEX, Workflow, Arbeitsprozess, Open Source Workflow Engine, Camunda, BPMN Einleitung Vom Urlaubsantrag über das Einstellungsverfahren bis hin zu höchst komplexen Arbeitsprozessen, wie sie in Versicherungen zu finden sind, überall können Workflows vielseitig eingesetzt werden. Es gibt bereits Implementierungen von grafischen Workflows in verschiedenen Programmiersprachen wie Java und anderen, jedoch keine in PL/SQL. Das Ziel ist es, Workflows durch APEX auszuführen, um damit ein PL/SQL-Web-Interface für Workflows zu haben. Im Folgenden wird darauf eingegangen, wie grafische Workflows in APEX implementiert werden können. Auch wird erklärt, wie sich ein Prozess aus der Anwendung starten, verwalten und überwachen lässt. Als Workflow Engine hinter APEX wird dafür die deutsche Open-Source Lösung Camunda verwendet. Die folgende Ausarbeitung basiert auf eigenen Erkenntnissen und Erfahrungen. Workflows Oracle Application Express (kurz APEX) bietet viele Möglichkeiten, jedoch gibt es keine integrierte Workflow Option bisher und es ist auch noch keine Integrierung geplant (stand 30.09.2016). Der erste Gedanke der den Meisten in den Sinn kommt ist den Workflow in PL/SQL Hard codiert zu hinterlegen. Da dieser Option sehr adynamisch ist und unflexibel für Änderungen ist, sollte davon abgesehen werden. Es gibt auch andere Möglichkeiten Workflows durch APEX auszuführen. Eine Möglichkeit wäre es die Workflow Definitionen in Tabellen zu hinterlegen. Hierfür gibt es verschiedene Tools wie zum Beispiel PL/Flow von Yeb Havinga oder Flow Control von Jürgen Sieben. Auch wenn beide Tools Open Source sind, unterstützen Sie keine BPMN (Business Process Model and Notation) Definitionen (ein Standard durch OMG) und sind somit nicht standardisiert. Auch fehlt in den Tools eine grafische Oberfläche um den Workflow zu pflegen. Vorteil der Anwendungen ist, dass sie zu 100 % in PL/SQL geschrieben sind, jedoch sind Aktualisierungen von einem einzigen Entwickler abhängig. Dies führt dazu, dass PL/Flow 2004 zum letzten Mal aktualisiert wurde. Flow Control wurde Anfang des Jahres 2016 zuletzt aktualisiert. Eine andere Möglichkeit ist es, die Workflow Definitionen in BPMN 2.0 zu fassen und damit einem Workflow Standard zu folgen. BPMN ist seit 2006 durch die OMG (Object Management Group) ein Workflows Standard auf Basis von XML. Seit 2011 ist BPMN in der zweiten Version und ein weitere Versionen ist bisher nicht geplant. Wenn BMPN verwendet wird, können bereits existierende, OpenSource Workflow Anwendungen zum Einsatz kommen, welche zudem meist auch mit Support in Form einer Enterprise Version oder ähnlichem angeboten werden.

Workflow Engine BPMN kann mit verschiedenen Workflow Engines ausführt werden, hierzu gilt auch Camunda, eine in Java programmierte Engine, welche BPMN sowie auch CMMN und DMN ausführt. Camunda entstand aus Activiti und wird von deutschen Entwicklern instandgehalten und aktualisiert. Der Vorteil gegenüber der PL/SQL Tools sind regelmäßige Updates, ein großes Entwicklungsteam und es gibt auch eine Enterprise Edition. Zur Kommunikation mit APEX bietet Camunda eine gut dokumentierte REST-Schnittstelle1, über die Befehle im json Format mitgeteilt werden können. Auch die Integration der Engine in die Server Landschaft bedarf keiner Umstände. Die Engine wird im Java Application Server deployed und als Datenbank kann die Oracle Datenbank verwendet werden (Abb. 1). Die zusätzlichen Camunda Applikationen können mit installiert werden, dienen in unserem Fall jedoch nur zur Erweiterten Überwachung und helfen dem Entwickler sich nach der Erstinstallation zurechtzufinden (Abb. 2).

Abb. 1: Server Landschaft / Architektur

Abb. 2: Camunda Cockpit, erweiterte Überwachung eines gestarteten Workflows 1

https://docs.camunda.org/manual/7.5/reference/rest/

Integration in APEX Nachdem Camunda auf dem Server installiert und auf die Oracle Datenbank eingestellt wurde, kann aus APEX heraus auf die Metadaten von Camunda zugegriffen werden. Im Rahmen dieser Integration ist dies das Hauptverfahren um die laufenden Prozesse auszulesen. Nachdem ein Workflow in Camunda beispielsweise via der REST-API hochgeladen (Abb. 4) und gestartet wurde (Abb. 5), können alle aktuell laufenden Prozesse direkt via einer SQL Abfrage in APEX angezeigt werden: select ACT_RE_PROCDEF.NAME_ as Name, ACT_RE_PROCDEF.VERSION_ as Version, ACT_APX_CAM_VARIABLE.CANDIDATE as Candidate, ACT_RU_TASK.NAME_ as Status, ACT_RU_TASK.TASK_DEF_KEY_ as Status_hidden, ACT_RU_VARIABLE_1.TEXT_ as Apex_Id, ACT_RU_TASK.ID_ as Id_Key, ACT_RU_TASK.PROC_DEF_ID_ as PROCESS_DEF_ID, ACT_APX_CAM_VARIABLE.ADDED as Added, ACT_APX_CAM_VARIABLE.CHANGED as Last_change from ACT_RE_PROCDEF, ACT_RU_TASK, ACT_RU_VARIABLE ACT_RU_VARIABLE_1, ACT_APX_CAM_VARIABLE where ACT_RE_PROCDEF.ID_ = ACT_RU_TASK.PROC_DEF_ID_ and ACT_RU_VARIABLE_1.NAME_ = 'id' and ACT_RU_VARIABLE_1.PROC_INST_ID_ = ACT_RU_TASK.PROC_INST_ID_ and ACT_APX_CAM_VARIABLE.ID = ACT_RU_VARIABLE_1.TEXT_ order by ACT_APX_CAM_VARIABLE.ADDED desc

Das Resultat dieser Abfrage sähe mit laufenden Prozessen wie folgt aus (Abb. 3).

Abb. 3: Resultat der SQL Abfrage, auslesen der Camunda Metadaten

Abb. 4: Workflow via REST deployen

Abb. 5: Workflow via REST starten

Der Vorteil die Camunda Metadaten direkt auszulesen liegt auf der Hand: Performance. Anstatt einen REST-Befehl zu senden, auf die Antwort zu warten und diese auch noch zu parsen, werden die Informationen direkt ausgelesen, da diese ja sowieso in der Oracle Datenbank liegen. Wie man der SQL Abfrage entnehmen kann wurden hier eigene Tabellen verwendet um die Variablen eines Prozesses zu speichern. Damit die Prozess Variablen welche sich in den APEX Metadaten befinden auch einem Prozess zugeordnet werden können, wird in Camunda ein key als Variable mitgeliefert, anstatt der Variablen selbst. Dies kann zum Beispiel der primary key der verwedten Variablen Tabelle sein. Der Vorteil hier, die Camunda Tabellen bleiben schlank und wir behalten alle Informationen die den Prozess betreffen in APEX, Camunda stellt somit keine Sicherheitslücke für potentiell sensible Daten dar. Nicht nur die Daten werden in APEX gespeichert, sondern auch die Prozess Logik ist in unserem Beispiel in APEX gehalten, später mehr dazu. Nachdem der Prozess gestartet wurde, teilen wir Camunda mit, wenn der Prozess Schritt erledigt ist und das nächste nun aktiv werden soll (Abb. 6).

Abb. 6: Prozess Schritt via REST komplettieren Wie in der Abbildung zu sehen wird im json body als REST Input Parameter angegeben, welcher Weg bei dem Entscheidungszweig im Workflow gegangen werden soll. Die Logik wird in APEX gespeichert, APEX entscheidet welcher Weg eingeschlagen werden soll. Dies kann Camunda über verschiedene Arten mitgeteilt werden, eine Möglichkeit wäre zum Beispiel ein String, „approve“/„disapprove“. Camunda weiß in dem Fall nur welcher Weg bei welchem Wert einzuschlagen ist.

Visualisierung Ein Workflow in APEX ist nicht nur zu archivierungszwecken interessant, sondern wir wollen natürlich visuell ablesen können, wie der Workflow aussieht und vor allem wo sich ein aktueller Prozess befindet. Für die Visualisierung geschieht via JavaScript, dazu liefert bpmn.io die nötigen Files um den in XML definierten Workflow aus der Datenbank als SVG zu visualisieren (Abb. 7). Via custom JavaScript kann der aktuelle Prozess Schritt dann auch noch gehighlited werden: //Highlight current status function markUp(temp){ var parent = document.getElementById(temp); parent.childNodes[0].childNodes[0].setAttribute("style", "stroke: #056693; stroke-width: 4; fill: #b5e6fd"); } var dlCheck = $('#P2_DL').val(); if (dlCheck != ''){ var element = $('#P2_ST').val() markUp(element,); };

Abb. 7: Visualisierung des Workflows mit highlighting des aktuellen Prozess Schrittes an Hand eines Beispiel Prozesses

Fazit APEX bietet zwar keine Integrierte Workflow Lösung, aber dank Open-Source Worklow Engines mit REST-Schnittstellen ist einfach, standardisierte Workflows in APEX zu integrieren, bzw. den Workflow aus APEX heraus zu steuern. Vorteil der Verwendung von BPMN ist das von bereits bestehenden Workflow Anwendungen leicht zur APEX-Workflow Lösung migriert werden kann oder auch andersrum. Auch ist es möglich den Workflow via bpmn.io in APEX zu modellieren und via REST zu deployen. Somit wird der komplette Workflow in APEX ausgeführt, verwaltet und überwacht, eine super Möglichkeit Workflows in bereits bestehende Anwendungen einzubinden oder eigenständige APEX Workflow Anwendungen bereitzustellen.

Für Fragen oder Anmerkungen stehe ich Ihnen gerne zur Verfügung.

Kontaktadresse: Maximilian Stahl MT AG Balcke-Dürr-Allee 9 40882 Ratingen Telefon: Fax: E-Mail Internet: LinkedIn

+49 (0) 2102 309 61-0 +49 (0) 2102 309 61-101 [email protected] mt-ag.com linkedin.com/in/maximilian-stahl