0

subProcess ノードに回転を与えるために、2 つの「Hello World」プロセスを作成しました。サブプロセスからメイン プロセスに出力を戻すのに問題があります。私がうまくいかない理由を明らかにするドキュメントや例が見つからないので、誰かが私が間違っていることを教えてくれることを願っています。

私の主なプロセスには、次のものがあります (ヘッダー、フッター、および位置 x、y、高さ、幅の属性を省略していることに注意してください)。

... をちょきちょきと切る...

 <ヘッダー>
   <変数>
     <変数名="名前" >
      <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
       <value>ワールド</value>
     </変数>
     <変数名="長さ" >
       <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
       <値>0</値>
     </変数>
   </変数>
 </header>

 ... をちょきちょきと切る...

 <subProcess id="4" name="SubHello"
             processId="subhello" waitForCompletion="true" >
 <mapping type="in" from="name" to="name" />
 <mapping type="out" from="length" to="length" />
</サブプロセス>

 ... をちょきちょきと切る...

そしてsubhello、これは単純な SubProcess です。単純に入力を取得して出力し、入力の長さを取得してそれを返します。

... をちょきちょきと切る...

 <ヘッダー>
   <変数>
     <変数名="名前" >
      <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
       <値></値>
     </変数>
     <変数名="長さ" >
       <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
       <値></値>
     </変数>
   </変数>
 </header>

 <ノード>
   <start id="1" name="開始" />
   <end id="2" name="終了" />
   <actionNode id="3" name="アクション" >
       <action type="式" 方言="mvel" >
System.out.println(名前 + "、" + 長さ + "、サブプロセス内、前");
長さ = name.length;
System.out.println(長さ + "、サブプロセス内、後");
       </アクション>
   </actionNode>
 </ノード>

 ... をちょきちょきと切る...

これは、ドキュメントと例をどのように解釈したかによるものです。必要な変数はメイン プロセスとサブプロセスの両方で宣言され、サブプロセスの in/out マッピング要素を使用して from 属性と to 属性を設定します。

問題は....問題nameなくサブプロセスに渡されたがlength、メインプロセスに戻ろうとして失敗したことです。サブプロセスのlengthが正常に変更されました。しかし、終了時lengthに、メイン プロセスは変更されませんでした。

私は何を間違っていますか?ポインタと説明は大歓迎です。ありがとう。

4

1 に答える 1

2

問題は、アクションが長さ変数を変更しないことです。アクション内のローカル変数の長さを変更するだけです。変数の値を変更するには、kcontext.setVariable( "length"、name.length());を使用します。

また、最新のDrools 5.1 M1リリースに更新する必要があります。これには、サブプロセスが完全に同期している場合のマッピングがない問題の修正が含まれています(例の場合のように)。

Kris Verlaenen

于 2009-10-03T10:27:27.720 に答える