0

我创建了两个“Hello World”进程来给 subProcess 节点一个旋转。我无法将 subProcess 的输出返回到主进程。我希望有人能告诉我我做错了什么,因为我找不到任何说明我为什么不起作用的文档或示例。

在我的主要过程中,我有以下内容(请注意,我已经剪掉了页眉、页脚和位置 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</值>
     </变量>
   </变量>
 </标题>

 ……剪……

 <subProcess id="4" name="SubHello"
             processId="subhello" waitForCompletion="true" >
 <mapping type="in" from="name" to="name" />
 <mapping type="out" from="length" to="length" />
</subProcess>

 ……剪……

这是一个简单的subhelloSubProcess,它只是简单地获取输入并将其打印出来,然后获取输入长度以将其返回:

……剪……

 <标题>
   <变量>
     <变量名称="名称" >
      <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
       <值></值>
     </变量>
     <变量名="长度" >
       <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
       <值></值>
     </变量>
   </变量>
 </标题>

 <节点>
   <start id="1" name="开始" />
   <end id="2" name="结束" />
   <actionNode id="3" name="动作" >
       <action type="expression" dialect="mvel" >
System.out.println(name + ", " + length + ", 在子进程中,之前");
长度=名称.长度;
System.out.println(length + ", in SubProcess, after");
       </行动>
   </actionNode>
 </节点>

 ……剪……

这是按照我解释文档和示例的方式。在主流程和子流程上都声明了所需的变量,然后只需使用 subProcess in/out 映射元素来设置 from 和 to 属性。

问题是....虽然name没有问题地传递给子进程,但试图length回到主进程失败了。subProcesslength中的 已成功修改。但在退出时,length主进程并没有改变。

我究竟做错了什么?非常感谢指针和解释。谢谢。

4

1 回答 1

2

问题是您的操作不会更改长度变量。它只是改变你的动作中的局部变量长度。要更改变量的值,请使用 kcontext.setVariable("length", name.length());

您还应该更新到最新的 Drools 5.1 M1 版本,因为这包括在子流程完全同步的情况下修复没有映射的问题(如您的示例中的情况)。

克里斯·维拉宁

于 2009-10-03T10:27:27.720 回答