Datenhandling in Camunda: So starten Sie mit DPM Json

15.12.2021

Die Arbeit mit Camunda macht uns grossen Spass. Da wir uns täglich damit beschäftigen, kennen wir auch das Erweiterungspotential der Camunda Engine. Deshalb haben wir uns entschlossen, eine Suite von Camunda-Extensions zu implementieren, die wir DPM (digitales Prozessmanagement) nennen. Mit ihrer Hilfe werden folgende Aufgaben erleichtert:

  • Data Handling
  • User Interaction
  • Integration
  • Case Management
  • Identity and Access

Über diese Module schreiben wir eine Blog-Artikel-Serie, um das Kernkonzept und die Funktionalitäten zu erklären. In diesem Artikel beschreiben wir zunächst, wie Sie dpmJson in Ihrer Camunda-Anwendung einrichten und benutzen können. Werfen Sie gerne auch einen Blick in unsere FROX News «Vereinfachte Datenverarbeitung in Camunda-Prozessen dank unserer neuesten Entwicklung: DPM Json». Darin fassen wir die Vorteile von DPM Json zusammen und Sie können sich das Video zu unserer Präsentation des Tools an der CamundaCon 2021 ansehen.

Erste Schritte: dpmJson einrichten

Der Umgang mit Daten in Camunda kann kompliziert sein, da oft mit verschiedenen Datenformaten gearbeitet wird – von HashMaps über ArrayLists bis hin zu SpinJson-Objekten. Um dies zu vereinfachen, haben wir eine Erweiterung namens DPM Json implementiert, die genau auf dieses Thema abzielt. Schauen wir uns an, wie das funktioniert.

Laden Sie sich zunächst eine Kopie von DPM Json auf GitHub herunter. Fügen Sie es anschliessend in Ihre Camunda-Anwendung ein, wie es in unserer Dokumentation im GitHub-Repository beschrieben ist. Builden Sie danach Ihre Anwendung neu, starten sie diese und erstellen Sie einen Skript-Task, der wie folgt aussieht:

println(dpmJson(["one", 2]))

 

Abbildung 1: Skript-Task, um zu testen, ob das Einrichten von DPM Json erfolgreich war.

 

Wenn Sie auf Ihrer Konsole [“one”, 2] sehen, haben Sie DPM Json korrekt aufgesetzt. Falls dies nicht funktioniert hat, versuchen Sie, Ihr Skript wie folgt zu bearbeiten:

println(dpmJson.wrap(["one", 2]))

Wenn Ihr Skript mit der Methode .wrap(…) funktioniert hat, sollten Sie diese von nun an zu jedem Aufruf von DPM Json in Ihrer Anwendung hinzufügen.

Die Einrichtung ist nun abgeschlossen. Sehen wir uns jetzt ein Beispiel an.

Newsroom DPM Json FROX AG

Datentypen kombinieren mit DPM Json

Schauen wir uns an, wie wir verschiedene Datentypen mit dpmJson einfach kombinieren können. Dafür gehen wir zum GitHub-Repository und holen uns das erste Beispiel im Ordner examples mit dem Namen dpmJson-attributes-learning-process.bpmn. Dort haben wir auch die Lösung mit allen hier präsentierten Ansätzen abgelegt.

Jetzt geben wir im ersten Task dreimal dasselbe Datenobjekt mit dem Vornamen «Tom», dem Nachnamen «Example» und dem Job «Coding» ein, wie wir dies auf den Output-Variablen des ersten Tasks sehen können. Der einzige Unterschied ist der Datentyp, in den die Camunda Engine das Objekt serialisieren wird:

  • mySpinObj wird in ein Spin-JSON-Objekt serialisiert
  • myJsonString wird in eine Zeichenkette (String) serialisiert
  • myMap wird in eine LinkedHashMap serialisiert
Abbildung 2: Output-Variablen des ersten Tasks.

 

Wie Sie sich vorstellen können, war die Arbeit mit allen drei Objekten zusammen in der Vergangenheit ziemlich mühsam, da für alle drei Datentypen entweder eine Deserialisierung oder eine individuelle Vorgehensweise implementiert werden musste. An dieser Stelle kommt DPM Json ins Spiel, denn es vereinheitlicht den Ansatz komplett für alle gängigen Camunda-Datentypen.

Wir starten nun diesen Prozess und schauen uns an, wie das Camunda-Cockpit jetzt aussieht:

Abbildung 3: Prozessvariablen im Camunda-Cockpit.

 

In den folgenden 3 Tasks lösen wir drei Aufgaben. In der ersten Aufgabe (TASK 1) sehen Sie einen Code-Abschnitt, der eine Zeile mit folgendem Inhalt enthält: // Ihr Code beginnt hier

Unterhalb dieser Zeile lösen wir die im Aufgabentitel beschriebene Aufgabe. Dazu weisen wir unsere Ergebnisvariable der Variable mit dem Namen «result» zu. Um mit den drei verschiedenen Datenformaten umzugehen, wrappen wir sie einfach mit dpmJson ein und weisen sie neuen Variablen zu – und schon sind wir fertig. Das dpmJson-Universum steht uns von nun an offen.

Der Code sollte jetzt in etwa so aussehen:

def spinObj = dpmJson(mySpinObj)
def jsonString = dpmJson(myJsonString)
def map = dpmJson(myMap)

Um die Attribute dieser drei Objekte zu kombinieren, müssen wie ein leeres Objekt erstellen. Dies geschieht durch den Aufruf von dpmJson() ohne Parameter. Dadurch erhalten wir ein leeres JSON-Objekt ( {} ), das alle Funktionen von DPM Json ermöglicht.

Nun greifen wir auf die Attribute (wie Sie sie möglicherweise von JavaScript kennen) der drei Objekte zu und weisen diese dem leeren Objekt («result» genannt) frei zu. Der Code sollte in etwa so aussehen:

result = dpmJson()
result.newFirstName = spinObj.firstName
result.newLastName = jsonString.lastName
result.newJob = map.job

Das Ergebnis ist, dass die Variable «result» Attribute von allen drei Objekten enthält und im Camunda Spin-JSON-Format vorliegt. Die Variable «result» wird nun mit dem Namen «task1» in die Prozessvariablen gespeichert.

Wenn alles funktioniert hat, sollten Sie in Ihren Camunda-Logs folgendes sehen:

Abbildung 4: Resultat des Scripts in den Camunda-Logs.

 

In Ihrem Camunda-Cockpit sollte Ihre Variable namens «task 1» wie folgt aussehen:

Abbildung 5: Resultat des Scripts im Camunda-Cockpit.

 

Kommen wir nun zur zweiten Aufgabe (TASK 2). Hier müssen wir nicht die Attribute, sondern die Werte (Values) einem leeren Objekt zuweisen. Das bedeutet, dass wir nicht wie im vorherigen Task den Ergebnisvariablen dpmJson-Wrapper, sondern die eigentlichen Werte zuweisen. Mit Werten meinen wir primitive Datentypen wie strings, integers, floats, nulls, booleans etc.

Das Einzige, das wir an dieser Stelle anpassen müssen, ist, den Methodenaufruf .value() zu unseren Attributen hinzuzufügen:

result.newFirstName = spinObj.firstName.value()
result.newLastName = jsonString.lastName.value()
result.newJob = map.job.value()

Wenn wir den Prozess ausführen, werden wir feststellen, dass er sowohl in den Camunda-Logs als auch im Cockpit genauso aussieht wie in TASK 1. Das ist so gewollt, da wir das Verhalten von DPM Json gleich gestalten wollten, egal ob wir einen Wrapper oder einen primitiven Datentyp zuweisen.

Schliessen wir das Beispiel mit der dritten Aufgabe (TASK 3) ab. Hier wollen wir ein Objekt mit drei Hierarchieebenen ohne weitere Angaben erstellen. Dazu fügen wir in unserem Beispiel in der ersten Ebene einen Key «eins», in der zweiten Ebene einen Key «zwei» und in der dritten Ebene einen Key «drei» hinzu. Dann weisen wir der dritten Ebene die Zeichenkette «hallo» als Wert (Value) zu.

In anderen Entwicklungsumgebungen könnte eine solche Aufgabe das Schreiben von Schleifen, Bedingungen etc. beinhalten, aber mit dpmJson ist es so einfach wie folgt:

result = dpmJson()
result.one.two.three = “hello!”

Wie Sie sehen, haben wir durch die Verkettung von drei (zuvor nicht vorhandenen) Keys und die anschliessende Zuweisung eines Wertes bereits ein Objekt erstellt, das wie erwartet aussieht.

Abbildung 6: Resultat der dritten Aufgabe in den Camunda-Logs.

 

Mit diesem Beispiel schliessen wir die Einführung zu DPM Json ab. Wir hoffen, dass Sie so viel Spass an unserem Open-Source-Tool finden wie wir und fortan das Datenhandling in Camunda vereinfachen können. Lesen Sie im zweiten Teil mehr darüber, wie Sie komplexe Formulare und Interaktionsmöglichkeiten direkt aus einem Camunda-Prozess heraus erstellen!

Persönliche Beratung zu Camunda und DPM Json

Unsere Experten für Camunda und DPM Json nehmen sich gerne Zeit und zeigen Ihnen die Möglichkeiten für Ihr Vorhaben auf. Teilen Sie uns mit, welche Herausforderung Sie angehen wollen – ganz gleich, ob Sie sich nur informieren oder bereits voll durchstarten möchten.

Jetzt Beratung anfragen
Jonas Büchel Head of Business Process Solutions Standortleiter Winterthur FROX AG

Jonas Büchel

Head of Business Process Solutions

FROX Newsletter

Als Abonnent unseres Newsletters erhalten Sie regelmässig Informationen
zu spannenden Projekten, neuen Technologien, Events und vieles mehr.
Bleiben Sie am Puls der Zeit!

Subscription FROX AG