Task Flow使用指南之十:通过程序调用TaskFlow
来源:互联网 发布:装修设计软件手机版 编辑:程序博客网 时间:2024/06/04 18:29
运行环境:JDeveloper 11.1.2.3.0 + Oracle Database 11g Express Edition。
Task Flow使用指南之九中介绍了如何调用Remote TaskFlow, 但那是通过TaskFlow Call Activity调用的,如何通过程序调用一个Bounded TaskFlow呢?
首先我们必须知道TaskFlow的URL的格式,以Remote TaskFlow应用为例,其中的employee TaskFlow的URL如下:
http://127.0.0.1:7101/ADF_TaskFlow_RemoteProducer-ViewController-context-root/faces/adf.task-flow?adf.tfId=employee-btf&adf.tfDoc=/WEB-INF/employee-btf.xml&departmentId=60
其中参数adf.tfId是TaskFlow的ID,参数adf.tfDoc是TaskFlow的Document。
这两个参数对应TaskFlow Call Activity上的同名属性。
注意,我这里还带了一个参数departmentId,因为employee TaskFlow的输入参数就是departmentId。
你可以复制这个URL,直接在浏览器中访问,如果能看到departmentId=60的员工列表,就说明employee TaskFlow可以通过URL访问。
有了URL,我们就可以通过程序调用employee TaskFlow。
重要步骤说明:
1. 创建Remote TaskFlow Producer
这一步和《Task Flow使用指南之九》一样,这里不再赘述。
2. 在departments.jsf页面中,添加按钮:Invoke Employee TaskFlow
(1)页面代码如下:
<af:commandButton text="Invoke Employee TaskFlow" id="cb2" action="#{myBackingBean.invokeEmployeeTaskFlow}">
<af:setPropertyListener from="#{bindings.DepartmentId}" to="#{requestScope.departmentId}" type="action"/>
</af:commandButton>
(2)对应的Managed Bean的方法:invokeEmployeeTaskFlow
public String invokeEmployeeTaskFlow() {
FacesContext fctx = FacesContext.getCurrentInstance();
ExternalContext ectx = fctx.getExternalContext();
Map m = ectx.getRequestMap();
String tfId = "employee-btf";
String tfDoc = "/WEB-INF/employee-btf.xml";
Map parameters = new HashMap();
parameters.put("departmentId", m.get("departmentId"));
TaskFlowId taskflowId = new TaskFlowId(tfDoc, tfId);
//TaskFlowId taskflowId = TaskFlowId.parse("/WEB-INF/employee-btf.xml#employee-btf");
String taskflowUrl = ControllerContext.getInstance().getTaskFlowURL(false, taskflowId, parameters);
//String taskflowUrl = "http://127.0.0.1:7101/ADF_TaskFlow_RemoteProducer-ViewController-context-root/faces/adf.task-flow?adf.tfId=employee-btf&adf.tfDoc=/WEB-INF/employee-btf.xml&departmentId=60";
try {
ectx.redirect(taskflowUrl);
} catch (Exception e) {
e.printStackTrace();
}
return taskflowUrl;
}
Project 下载:ADF_TaskFlow_RemoteProducer.7z
参考文献:
1. http://oracleseeker.com/2009/10/28/adf_current_taskflow_id/
2. http://oracleseeker.com/2009/11/09/adf_backing_action_taskflow/
3. https://forums.oracle.com/forums/thread.jspa?threadID=1082973
4. https://blogs.oracle.com/jdevotnharvest/entry/how-to_navigate_in_bounded_task_flows
5. http://adfdeveloper.blogspot.jp/2011/07/adf-auto-redirect-while-still-passing.html
6. https://blogs.oracle.com/jdeveloperpm/entry/how-to_efficiently_redirect_to_an_adf_faces_view_using_adf_controller
Task Flow使用指南之九中介绍了如何调用Remote TaskFlow, 但那是通过TaskFlow Call Activity调用的,如何通过程序调用一个Bounded TaskFlow呢?
首先我们必须知道TaskFlow的URL的格式,以Remote TaskFlow应用为例,其中的employee TaskFlow的URL如下:
http://127.0.0.1:7101/ADF_TaskFlow_RemoteProducer-ViewController-context-root/faces/adf.task-flow?adf.tfId=employee-btf&adf.tfDoc=/WEB-INF/employee-btf.xml&departmentId=60
其中参数adf.tfId是TaskFlow的ID,参数adf.tfDoc是TaskFlow的Document。
这两个参数对应TaskFlow Call Activity上的同名属性。
注意,我这里还带了一个参数departmentId,因为employee TaskFlow的输入参数就是departmentId。
你可以复制这个URL,直接在浏览器中访问,如果能看到departmentId=60的员工列表,就说明employee TaskFlow可以通过URL访问。
有了URL,我们就可以通过程序调用employee TaskFlow。
重要步骤说明:
1. 创建Remote TaskFlow Producer
这一步和《Task Flow使用指南之九》一样,这里不再赘述。
2. 在departments.jsf页面中,添加按钮:Invoke Employee TaskFlow
(1)页面代码如下:
<af:commandButton text="Invoke Employee TaskFlow" id="cb2" action="#{myBackingBean.invokeEmployeeTaskFlow}">
<af:setPropertyListener from="#{bindings.DepartmentId}" to="#{requestScope.departmentId}" type="action"/>
</af:commandButton>
(2)对应的Managed Bean的方法:invokeEmployeeTaskFlow
public String invokeEmployeeTaskFlow() {
FacesContext fctx = FacesContext.getCurrentInstance();
ExternalContext ectx = fctx.getExternalContext();
Map m = ectx.getRequestMap();
String tfId = "employee-btf";
String tfDoc = "/WEB-INF/employee-btf.xml";
Map parameters = new HashMap();
parameters.put("departmentId", m.get("departmentId"));
TaskFlowId taskflowId = new TaskFlowId(tfDoc, tfId);
//TaskFlowId taskflowId = TaskFlowId.parse("/WEB-INF/employee-btf.xml#employee-btf");
String taskflowUrl = ControllerContext.getInstance().getTaskFlowURL(false, taskflowId, parameters);
//String taskflowUrl = "http://127.0.0.1:7101/ADF_TaskFlow_RemoteProducer-ViewController-context-root/faces/adf.task-flow?adf.tfId=employee-btf&adf.tfDoc=/WEB-INF/employee-btf.xml&departmentId=60";
try {
ectx.redirect(taskflowUrl);
} catch (Exception e) {
e.printStackTrace();
}
return taskflowUrl;
}
Project 下载:ADF_TaskFlow_RemoteProducer.7z
参考文献:
1. http://oracleseeker.com/2009/10/28/adf_current_taskflow_id/
2. http://oracleseeker.com/2009/11/09/adf_backing_action_taskflow/
3. https://forums.oracle.com/forums/thread.jspa?threadID=1082973
4. https://blogs.oracle.com/jdevotnharvest/entry/how-to_navigate_in_bounded_task_flows
5. http://adfdeveloper.blogspot.jp/2011/07/adf-auto-redirect-while-still-passing.html
6. https://blogs.oracle.com/jdeveloperpm/entry/how-to_efficiently_redirect_to_an_adf_faces_view_using_adf_controller
7. http://udayarocks.wordpress.com/2011/07/22/how-to-invoke-a-method-from-managed-bean-when-jspx-page-loads-in-adf/
文章出自:
http://maping930883.blogspot.com/2013/04/adf207task-flowtaskflow.html
0 0
- Task Flow使用指南之十:通过程序调用TaskFlow
- Task Flow使用指南之十:通过程序调用TaskFlow
- Task Flow使用指南之九:Remote TaskFlow
- Task Flow使用指南之六:Reentry
- Task Flow使用指南之六:Reentry
- dynamic region binding task flow(region 动态绑定流taskflow)
- Task Flow使用指南之二:传递参数给Task Flow(1)
- Task Flow使用指南之二:传递参数给Task Flow(2)
- Task Flow使用指南之三:以Dialog方式显示Task Flow
- Task Flow使用指南之四:获取Task Flow返回值(1)
- Task Flow使用指南之四:获取Task Flow返回值(2)
- Task Flow使用指南之四:获取Task Flow返回值(3)
- Task Flow使用指南之五:捕获异常 (1)
- Task Flow使用指南之五:捕获异常 (2)
- Task Flow使用指南之五:捕获异常 (3)
- Task Flow使用指南之七:SavePoints(1)
- Task Flow使用指南之七:SavePoints(2)
- Task Flow使用指南之七:SavePoints(3)
- Android /system 目录解析
- swift学习笔记
- 【ecos】目录结构
- 快速排序算法
- laravel5.1 数据无法正常写入mysql
- Task Flow使用指南之十:通过程序调用TaskFlow
- Python爬虫
- CSP:使用CryptoAPI获取X509证书的HASH(指纹)值
- 同质问题
- JavaScript实现计算复杂计算公式(支持括号)
- 各种测试视频序列
- C# Excel 条件格式
- 对图片处理的三种方式作为参考学习
- 学习ExtJS Window常用方法