我创建了两个“Hello World”进程,为子进程节点提供了一个旋转。我无法将subProcess的输出返回到主进程。我希望有人可以告诉我我做错了什么,因为我找不到任何文件或例子来说明为什么我的工作不起作用。
在我的主要过程中,我有以下内容(请注意,我已经剪断了页眉,页脚以及位置x,y,高度,宽度属性):
... 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...
这是简单的subhello
SubProcess,它只接受输入并将其打印出来,然后获取输入长度以将其返回:
... 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...
这是根据我对文档和示例的解释。所需变量在主进程和子进程上声明,然后只使用subProcess in / out映射元素来设置from和to属性。
问题是......当name
没有问题地传递给子进程时,试图让length
回到主进程失败。 subProcess中的length
已成功修改。但退出时,主进程中的length
没有改变。
我做错了什么?指针和解释非常感谢。感谢。
答案 0 :(得分:2)
问题是您的操作不会更改长度变量。它只是改变你动作中的局部变量长度。要更改变量的值,请使用kcontext.setVariable(“length”,name.length());
您还应该更新到最新的Drools 5.1 M1版本,因为它包含了在子进程完全同步的情况下解决out映射问题的修复(如您的示例中所示)。
Kris Verlaenen