Prozess-Variablen in Camunda-BPM

Habe ich eine einfache bpmn-Prozess
in denen bin ich mit 2 service-Aufgabe,bin ich der Ausführung meines Prozesses mit
processEngine.getRuntimeService().startProcessInstanceByKey("Process_1", variables);
wo meine Variablen ist wie folgt:

Map variables = new HashMap();
variables.put("a", 2);
variables.put("b", 5);

Service Aufgabe 1 implementiert ein Addition java-Klasse und die service-Aufgabe 2 implementiert eine Multiplication Klasse.

Nun will ich habe 3 Variablen (Konstanten) c = 5, d = 10, e = 2 so, dass ich c für service-Aufgabe 1 derart, dass in Addition kann ich diese variable verwenden, ähnlich wie ich verwenden möchten d in meinem Multiplication Klasse, und e sollte global sein, so dass ich es verwenden können, in beiden Klassen.

Kann jemand führe mich auf diesem?

InformationsquelleAutor | 2016-07-19



2 Replies
  1. 3

    Als quick-fix über ein Setup-Service Aufgabe als erste Aufgabe, den Prozess der prefills Ihre Prozess-Variablen.
    Je nachdem, wie Sie einen Prozess starten, können Sie entweder:
    Legen Sie die Variablen über die java-Objekt-api

    https://docs.camunda.org/manual/7.5/user-guide/process-engine/variables/#java-object-api

    oder, wenn ein REST-Aufruf können Sie diese mit festen Werten, die innerhalb der request-body:

    https://docs.camunda.org/manual/7.5/reference/rest/process-definition/post-start-process-instance/

    Andere einfache Lösung wäre, eine Klasse mit statischen Werten oder eine enum-holding, die die benötigten Werte.

    –edit–

    wenn Sie möchten, verwenden Sie die inputOutput-Erweiterung fügen Sie so etwas wie dies, zu Ihrem bpmn-Datei:

    <bpmn:process id="Process_1" isExecutable="false">
      <bpmn:extensionElements>
        <camunda:inputOutput>
          <camunda:inputParameter name="c">5</camunda:inputParameter>
          <camunda:inputParameter name="d">10</camunda:inputParameter>
          <camunda:inputParameter name="e">2</camunda:inputParameter>
        </camunda:inputOutput>
      </bpmn:extensionElements>

    diese nicht getan werden kann in der Diagramm-Ansicht der camunda modeler, wechseln Sie einfach auf die XML-Repräsentation des Prozesses und fügen Sie den extensionElement.

    • Vielen Dank für Ihre Informationen.Ich dachte über das anbringen einige execution-listener mit diesen service-Aufgaben.Können wir tun, indem die Ausführung listner? Eine weitere Sache, die ich Fragen will ist, wir haben einige input/output und Eigenschaften in camunda modeler,was ist das, und wie benutzt man Sie?
    • Ich wirklich zu schätzen Ihre Zeit und Mühe.Ich dachte, zu definieren, diese Variablen in meinem camunda modeler(ich.e innen-Prozess-Modell selbst) In camunda modeler mit service-Aufgabe, die wir Anhängen können einige Eingabe – /Ausgabe und in der Erweiterung können wir einige Eigenschaften auch.Meine Frage ist nun, können wir definieren unsere Prozess-Variablen gibt es,wenn nicht, dann wo und wie können wir Sie nutzen?
  2. 1

    Die Dokumentation zeigt zwei verschiedene Möglichkeiten, um den Wert zu speichern:

    Java-Objekt-api
    Typisierte Wert-api

    Ich denke, mit Java-Objekt-api muss das java-Objekt zu implementieren serializable-interface? Der folgende code würde brechen, wenn die Bestellung-Objekt nicht implementiert Serializable interface

    com.example.Order order = new com.example.Order();
    runtimeService.setVariable(execution.getId(), "order", order);
    
    com.example.Order retrievedOrder = (com.example.Order) runtimeService.getVariable(execution.getId(), "order");

    ==

    Ich würde verwenden Sie das folgende format für java-Objekt

    ObjectValue customerDataValue = Variables.objectValue(customerData)
      .serializationDataFormat(Variables.SerializationDataFormats.JAVA)
      .create();
    
    execution.setVariable("someVariable", customerDataValue);

    customerdata bezieht sich auf jedes java-Objekt. Aber wenn es member-Variablen enthält einige andere Referenzen, die Referenzen muss serializable als gut. Um dies zu vermeiden, Sie werden erklären, diese Bezüge als vorübergehende

    Weiter mehr, verwenden setVariableLocal Methode, wenn Sie nicht wollen, die Daten werden persistent in DB

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.