经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库运维 » Oracle » 查看文章
OAF 请求等待节目
来源:cnblogs  作者:俩马仨告  时间:2018/9/25 20:04:17  对本文有异议

  有时候我们会遇到这样的情况,点了按钮之后,在后台运行的代码会调用数据库的程序包,提交请求或者API,导致前台的页面需要等待。但是这个时候,前台页面的按钮,输入框等是可以继续操作的。

如上图,点击提交之后,后台调用采购接收接口程序,生成采购接收事务处理。但是点击了提交之后,并不是马上能操作完成的。

  那么,如何避免客户重复点击提交或者进行别的操作呢?

此处我们用到了ProcessingCO:

  参考文档:https://community.oracle.com/message/13563102?tstart=0

  正常情况下,一个PG一个CO  PG的操作,CO相应作出相应的逻辑操作,如调用AM。

  先为需要的页面PG多建立一个CO

  create a new  controller oracle.apps.xxdm.ecrc.webui.xxProcessCO for ProcessingPG      xxProcessCO:

  我们将原先CO中的代码替换成:

  1. if submitbtton!=null{
  2. //新建的CO的路径
  3. OAProcessingPage page =
  4. new OAProcessingPage("oracle.apps.xxdm.ecrc.webui.xxProcessCO");
  5. //AM的路径
  6. page.setApplicationModuleDefName("xxx.oracle.apps.xxdm.ecrc.server.xxMainAM");
  7. // page.setRetainAMValue(false);
  8. page.setConciseMessage("This Will Submit Invoice Program");
  9. page.setDetailedMessage("This Will Submit Concurrent Program to create Invoice in Oracle for the selected Request");
  10. page.setProcessName("Concurrent Program is Runing! please do not close this window");
  11. pageContext.putTransactionValue("reqId", reqId); // for parameters in ProcessCO
  12. pageContext.forwardToProcessingPage(page);
  13. }

 将原先CO中的逻辑放到新的xxProcessCO中:

  1. public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
  2. {
  3. super.processFormRequest(pageContext, webBean);
  4. OAApplicationModule am = pageContext.getApplicationModule(webBean);
  5. Number reqId = (Number)pageContext.getTransactionValue("reqId");
  6. String sreqId = reqId.toString();
  7. Serializable[] parameters = { sreqId };
  8. int concreqid = ((Integer)am.invokeMethod("submitCPRequest", parameters)).intValue(); // submitting the concurrent request
  9. pageContext.putSessionValue("concreqid",concreqid);
  10. //自己需要的页面跳转
  11. pageContext.forwardImmediately("OA.jsp?page=/oracle/apps/xxdm/ecrc/webui/xxMainPG",
  12. null,
  13. OAWebBeanConstants.KEEP_MENU_CONTEXT,
  14. null,
  15. null,
  16. true,
  17. OAWebBeanConstants.ADD_BREAD_CRUMB_YES);
  18. }

运行效果如下:

 

 

 只有当xxProcessCO中的逻辑全部运行完毕,才会跳出此页面,跳转到指定的页面。如果程序没有运行完毕,那么会一直在这个页面上等待。所以可以在xxProcessCO中先把调用AM的逻辑注释掉测试

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号