2010年4月27日星期二

ADF_087:Task Flow使用指南之四:获取Task Flow返回值(3)

和TaskFlow传入参数一样,TaskFlow的传出参数也是定义在TaskFlow定义中的。

1. 打开TaskFlow定义,定义Return Value Definitions。


说明:这里定义了一个返回参数LocationId,其值来自于pageFlowScope.locationId。
那么,谁给pageFlowScope.locationId赋值呢?

重要说明:在TaskFlow中定义的返回参数LocationId,会自动放到pageFlowScope中!
相关的文档说明我没有找到,是我自己试验发现的:增加新的变量后,所有的EL编辑框下拉列表pageFlowScope节点下都会出现这个变量。



2. 打开TaskFlow,在某个页面中,在command component上设置setActionListener或setPropertyListener把当前页面的某个组件的值传入到pageFlowScope中

<af:commandButton text="OK" id="cb1" action="goReturn">
<af:setPropertyListener type="action" from="#{bindings.LocationId.inputValue}" to="#{pageFlowScope.locationId}"/>
</af:commandButton>

说明:原来pageFlowScope.locationId是在这里赋值的。
3. 拖放TaskFlow到父一级TaskFlow中,定义Task Flow Call Activity上的Return Values

说明:可以把TaskFlow以popup dialog的形式展现,并且设置Dialog Return Value。
注意:这里返回参数LocationId并没有定义Value,因为它通过Dialog Return Value来获取该值了。
如果不通过Dialog Return Value,则必须要设置该值。(有待验证)
我建议为了一致性,还是设置为每个返回参数设置对应的返回值,与步骤1保持一致。(有待验证)

思考:如果在第1步定义多个返回参数,在这里Dialog Return Value只能返回一个参数,那该怎么办?
我的回答:如果有多个返回参数,就不能在Dialog Return Value中全部返回了。此时,可以考虑
(1)使用一个大对象包含所有的对象。
(2)分别使用每个返回参数,因为它们都是在pageFlowScope中的。(有待验证)
4. 在父一级的页面中,在command component上设置returnListener,获取返回值。
<af:commandButton ...... useWindow="true" " action="goPopup" returnListener="#{backingBeanScope.backing_Departments.confirmChoice}" partialSubmit="true"/>
对应的MBean中的方法参数为ReturnEvent,使用returnEvent.getReturnValue(); 可以获取popup dialog的返回值,也即TaskFlow的返回值。

参考文献:
1.http://oracleseeker.com/2009/12/30/adf_dialog_inlinepopup_11g/

没有评论: