Frage

Ich habe zwei "Hello World" -Prozesse erstellt, um den Subprozessknoten einen Wirbel zu geben. Ich habe Probleme, die Ausgabe vom Subprozess zurück zum Hauptprozess zu erhalten. Ich hoffe, jemand kann mich auf das, was ich falsch mache, aufklären kann, da ich keine Dokumentation oder Beispiele finden kann, die Licht darüber werfen, warum meine nicht funktioniert.

In meinem Hauptprozess habe ich Folgendes (beachten Sie, dass ich Header, Fußzeilen und die Position X, Y, Höhe, Breite, Breite Attribute) ausgeschnitten habe:

 ... snip...

 <header>
   <variables>
     <variable name="name" >
      <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
       <value>World</value>
     </variable>
     <variable name="length" >
       <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
       <value>0</value>
     </variable>
   </variables>
 </header>

 ... snip...

 <subProcess id="4" name="SubHello"
             processId="subhello" waitForCompletion="true" >
 <mapping type="in" from="name" to="name" />
 <mapping type="out" from="length" to="length" />
</subProcess>

 ... snip...

Und hier ist das einfache subhello Subprozess, der einfach die Eingabe nimmt und sie ausdruckt und dann die Eingangslänge erhält, um sie zurückzugeben:

 ... snip...

 <header>
   <variables>
     <variable name="name" >
      <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
       <value></value>
     </variable>
     <variable name="length" >
       <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
       <value></value>
     </variable>
   </variables>
 </header>

 <nodes>
   <start id="1" name="Start" />
   <end id="2" name="End" />
   <actionNode id="3" name="Action" >
       <action type="expression" dialect="mvel" >
System.out.println(name + ", " + length + ", in SubProcess, before");
length = name.length;
System.out.println(length + ", in SubProcess, after");
       </action>
   </actionNode>
 </nodes>

 ... snip...

Dies gilt wie ich das DOC und die Beispiele interpretierte. Die erforderlichen Variablen werden sowohl im Hauptprozess als auch im Subprozess deklariert. Verwenden Sie dann einfach den Subprozess in/Out -Mapping -Elemente, um die aus und auf Attribute zu setzen.

Das Problem ist ... während name wurde ohne Probleme in den Unterprozess übergeben und versuchte zu bekommen length Zurück zum Hauptprozess ist fehlgeschlagen. Das length im Subprozess wurde erfolgreich geändert. Aber beim Ausgang, length Im Hauptprozess änderte sich nicht.

Was mache ich falsch? Zeiger und Erklärungen werden sehr geschätzt. Vielen Dank.

War es hilfreich?

Lösung

Das Problem ist, dass Ihre Aktion die Längenvariable nicht ändert. Es ändert lediglich die lokale variable Länge innerhalb Ihrer Aktion. Um den Wert der Variablen zu ändern, verwenden Sie kcontext.setVariable ("Länge", name.length ());

Sie sollten auch die neueste Veröffentlichung von Drools 5.1 M1 aktualisieren, da dies ein Problem für ein Problem ohne Zuordnungen enthält, falls der Subprozess vollständig synchron ist (wie in Ihrem Beispiel der Fall).

Kris Verlaenen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top