Drools sottoprocesso mappatura fallito - cosa faccio di sbagliato?
-
19-09-2019 - |
Domanda
Ho creato due processi "Ciao Mondo" per dare al sottoprocesso nodi un vortice. Sto avendo difficoltà a raggiungere l'uscita dal sottoprocesso torna indietro al processo principale. Sto sperando che qualcuno mi può illuminare su quello che sto facendo male come non riesco a trovare alcuna documentazione o esempi che fanno luce sul motivo per cui il mio non funziona.
Nel mio processo principale, ho il seguente (nota che ho snipped intestazioni, piè di pagina, e gli x posizionali, y, altezza, larghezza attributi):
... 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...
E qui è la semplice sottoprocesso subhello
, che prende semplicemente l'ingresso e lo stampa fuori, e poi si fa la lunghezza di ingresso per tornare di nuovo fuori:
... 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...
Questa è secondo come ho interpretato il doc ed esempi. Le variabili necessarie sono dichiarati sia il processo principale e il sottoprocesso, quindi basta usare il sottoprocesso in / out elementi di mappatura per impostare il da e per gli attributi.
Il problema è .... mentre name
ottenuto nella passata al sottoprocesso senza problemi, cercando di length
torna indietro al processo principale non è riuscito. Il length
nel sottoprocesso è stato modificato con successo. Ma all'uscita, length
nel processo principale non è cambiata.
Che cosa sto facendo di sbagliato? Puntatori e le spiegazioni sono molto apprezzati. Grazie.
Soluzione
Il problema è che la vostra azione non cambia la variabile lunghezza. Essa si limita cambia la lunghezza variabile locale all'interno della vostra azione. Per modificare il valore della variabile, utilizzare kcontext.setVariable ( "lunghezza", diverrà name.lenght ());
Si dovrebbe anche aggiornare all'ultima versione 5.1 Drools M1, come quella include una correzione per un problema con mappature fuori nel caso in cui il sottoprocesso è completamente sincrona (come è il caso nel tuo esempio).
Kris Verlaenen