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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top