我創建了兩個「Hello World」進程來爲子進程節點提供旋轉。我無法將子流程的輸出返回到主流程。我希望有人能夠指導我做錯了什麼,因爲我找不到任何文檔或示例說明我爲什麼不工作。Drools 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
子流程,它只是接受輸入並打印出來,然後獲取輸入長度返回它回來了:
... 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進/出映射元素來設置from和to屬性。
問題是....而name
傳入子進程沒有問題,試圖讓length
回到主進程失敗。 subProcess中的length
已成功修改。但在退出時,length
在主流程中沒有變化。
我在做什麼錯?指針和解釋非常感謝。謝謝。
感謝您的修復。我只想指出,文檔需要更清楚一點,我實際上必須在Action節點中調用context.setVariable(),才能設置流程變量的值。 Action節點doc沒有提及在length = name.length中設置一個局部變量。從SubFlow文檔中,我只是假定配置長度=長度就足夠了。但再次感謝!我正在研究事件處理。 – aberrant80 2009-10-05 03:29:44