代码之家  ›  专栏  ›  技术社区  ›  aberrant80

Drools子流程输出映射失败-我做错了什么?

  •  0
  • aberrant80  · 技术社区  · 15 年前

     ... 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 子流程,它只需获取输入并将其打印出来,然后获取输入长度以将其返回:

     ... 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...
    

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

    name length 返回主进程失败。这个 在主要过程中没有改变。

    我做错了什么?非常感谢您的指点和解释。谢谢

    1 回复  |  直到 15 年前
        1
  •  2
  •   Kris Verlaenen    15 年前

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

    您还应该更新到最新的Drools 5.1 M1版本,因为它包括一个在子流程完全同步的情况下(如您的示例所示)不带out映射的问题的修复。

    克里斯·韦莱恩

    推荐文章