Question

Je créé deux « Bonjour tout le monde » processus pour donner au sous-processus nœuds un tourbillon. Je vais avoir du mal à obtenir la sortie du sous-processus de retour au processus principal. J'espère que quelqu'un peut me éclairer sur ce que je fais mal que je ne peux pas trouver de la documentation ou des exemples qui mettent en lumière pourquoi le mien ne fonctionne pas.

Dans mon processus principal, je donne les résultats suivants (notez que je l'ai en-têtes, pieds de page Snipped, et les x de position, y, hauteur, largeur des attributs):

 ... 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...

Et voici simple subhello Subprocess, qui prend simplement l'entrée et il imprime, et obtient alors la longueur d'entrée pour le retourner sur:

 ... 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...

Ceci est selon la façon dont je le doc et interprété des exemples. Les variables nécessaires sont déclarées à la fois sur le processus principal et le sous-processus, puis il suffit d'utiliser le sous-processus / de sortie des éléments de mappage pour définir la provenance et à destination des attributs.

Le problème est .... alors que name suis fait passer pour le sous-processus sans problème, en essayant de length revenir au processus principal a échoué. Le length dans le sous-processus a été modifié avec succès. Mais à la sortie, length dans le processus principal n'a pas changé.

Qu'est-ce que je fais mal? Pointeurs et explications sont très appréciés. Merci.

Était-ce utile?

La solution

Le problème est que votre action ne change pas la variable de longueur. Il modifie simplement la longueur variable locale dans votre action. Pour modifier la valeur de la variable, utiliser kcontext.setVariable ( "longueur", name.length ());

Vous devez également mettre à jour à la dernière version 5.1 Drools M1, comme cela inclut un correctif pour un problème avec les correspondances out dans le cas où le sous-processus est complètement synchrone (comme cela est le cas dans votre exemple).

Kris Verlaenen

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top