2016-09-02 2 views
0

Ich habe ein benutzerdefiniertes WorkItem mit einigen Parametern erstellt, die ich in WorkDefinitions.wid-Datei registriert habe. Dann erzeuge ich im Geschäftsprozess auch Variablendefinitionen für den gesamten Prozess und referenziere diese von WD.wid meines benutzerdefinierten WorkItems auf diejenigen, die in BP erstellt wurden.Wie Parameter im WorkItem gesetzt werden, um innerhalb von BPMN erreicht zu werden Prozess in jbpm-WorkBench

WorkItem führt den Code aus, der diese Parameter nach dem Start des Prozesses aus dem Formular übernimmt. Zu diesem Zweck benutze ich getParameter() - Methode; Es sieht wie folgt aus:

public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { 

String payload = workItem.getParameter("id") + ... ; 
... 
manager.completeWorkItem(workItem.getId(), null); 
} 

Alles sieht aus und funktioniert ok, weil WorkItem erfolgreich ausgeführt wird, und ich bekomme das Ergebnis (auf der Serverseite nach workItem in BP Ausführung); Aber jetzt muss ich Response nach Ausführen der POST-Methode mit den eingegebenen Parametern erhalten. Im Code habe ich eine neue Variable erstellt, die Parameter aus Response-Body holt und ich kann das Ergebnis in der IDE-Konsole sehen, wenn ich reinen Code (ohne BPMN-Prozess) ausführe, aber ich muss diese Variable auch in WorkItem registrieren es weiter für die nächste Aufgabe in meinem BProcess.

SO Meine Frage ist: Gibt es etwas ähnlich zu getParameter() - Methode, aber etwas wie setParameter()? Wie könnte ich es in WorkItem registrieren und wie bekomme/erreiche ich diese Parameter/Variable in BProcess in jbpm (etwas wie globale Variable glaube ich).

Vielen Dank!

Antwort

1

Betrachten Sie die Javadoc WorkItemManager und sehen Sie die Parameter der completeWorkItem Methode. Sie können Ihre Ergebnisse in einer Karte übergeben. Sie erhalten dann diese Werte als Ausgabeparameter der auszuführenden Aufgabe und können sie einigen Prozessvariablen zuordnen, so dass die nächste Aufgabe sie verwenden kann.

+0

Ja, ich habe es auch heute versucht, HashMap anstelle von null als zweiten Parameter von compleWorkItem() zu setzen, aber wie kann ich diese Variable innerhalb des BP-Modells erreichen? Soll ich den HashMap-Schlüssel in der .wid-Datei wie alle anderen Parameter bei meinem WorkItem registrieren?Soll ich eine neue Variable für diesen Parameter in Variablendefinitionen des gesamten BProcess anlegen und dann im WorkItem-Knoten als Output Parameter darauf verweisen? Könnten Sie bitte diesen Vorgang beschreiben, denn nach der Ausführung meines Prozesses ist diese Variable noch leer. – user3467471

+1

Wenn Sie eine Arbeitselementdefinition in KIE Workbench erstellen, können Sie sehen, dass es automatisch Code mit ** Result ** Variable ('java.util.Map') im Abschnitt ** results ** generiert. Ich glaube, dass Sie Ihre Ausgangsparameter davon erhalten können (obwohl ich es nicht versucht habe). Sie müssen diese Variable nur einer Prozessvariablen zuordnen und dann später in einer Task darauf zugreifen. – livthomas

+0

In der Tat wird es nichts automatisch generiert, aber mit den Ergebnissen war es richtig Punkt !!! – user3467471

0

Ich weiß nicht, welche Version Sie verwenden, aber für jBPM 6.3 habe ich dasselbe gemacht, indem ich ein benutzerdefiniertes Java-Workitem mit einer anderen Execute-Methodendefinition definiert habe. Für mich sieht es wie folgt aus:

public Map<String, Object> execute(WorkItem workItem) throws Exception { 
    Map<String, Object> result = new HashMap<String, Object>(); 
    result.put("outputparam", "hello world"); 
    return result; 
} 

diese verwenden, kann ich die „outputparam“ als Datenausgangszuordnung im Workflow-Prozess für meinen benutzerdefinierten Dienstknoten verweisen.

+0

Tut mir leid, kann es jetzt nicht überprüfen: ist diese Methode Verweise auf die Methode der Klassenimplementierung (execute()) oder es ist nur eine selbst erstellte Methode. Wenn es ein selbst erstelltes ist, sollte ich es als static in executeWorkItem verwenden? Weil ich heute etwas Ähnliches ausprobiert habe, meine ich HashMap, aber anstatt es als separate Rückgabemethode zu verwenden, habe ich HashMap innerhalb von executeWorkItem (..) hinzugefügt und dann anstelle von null zu completeWorkItem (..) as hinzugefügt folgt: Karte params = new HashMap <>(); params.put (..); manager.completeWorkItem (workItem.getId(), params); – user3467471

+0

Dann versuchte ich, es innerhalb meines BProcess zu erreichen, ich habe auch den Schlüssel-Namen von HashMap durch mein CustomWorkItem in .wid-Datei registriert. Aber ich bekomme kein Ergebnis für diese Variable, auch nachdem ich sie auf workItem - task gesetzt habe (ich meine in BP-Model) und auf die erzeugte Variable special für dieses Feld in Variable Definitions referenziere. Und ich benutze 6.4.-Version – user3467471

+0

Ah ok, 6.4 ist anders. Die 6.3 benötigt eine execute (...) Methode anstelle von executeWorkitem (...) und sie gab die Map zurück, anstatt sie an das completeWorkItem zu übergeben. Die Verwendung der zurückgegebenen Werte auf der Prozessdefinitionsseite ist dieselbe, glaube ich. – mikereem

Verwandte Themen