J'ai créé deux processus "Hello World" pour donner un tourbillon aux nœuds subProcess. Je n'arrive pas à renvoyer la sortie du sous-processus vers le processus principal. J'espère que quelqu'un pourra m'éclairer sur ce que je fais de mal, car je ne trouve pas de documentation ou d'exemples qui expliquent pourquoi le mien ne fonctionne pas.Echec du mappage de sous-traitance de Drools - qu'est-ce que je fais de mal?
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 le subhello
simple, le sous-processus, qui prend simplement l'entrée et il imprime, et obtient alors la longueur d'entrée pour revenir en arrière 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...
C'est aussi par 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 sur le sous-processus, puis utilisez simplement les éléments de mappage in/out de subProcess pour définir les attributs from et to.
Le problème est .... tandis que name
a été passé au sous-processus sans problème, essayant d'obtenir length
de nouveau 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? Les pointeurs et les explications sont très appréciés. Merci.
Merci pour la correction. Je voudrais juste noter que les docs doivent être plus clairs que je dois réellement appeler context.setVariable() dans un nœud d'action afin de définir la valeur d'une variable de processus. Le document Nœud Action ne mentionne pas que faire length = nom.length ne fait que définir une variable locale. Du document SubFlow, j'avais simplement supposé que la configuration de longueur = longueur aurait été suffisante. Mais merci encore! Je regarde dans le traitement d'événement suivant. – aberrant80