OAF 请求等待界面

  有时候我们会遇到这样的情况,点了按钮之后,在后台运行的代码会调用数据库的程序包,提交请求或者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中的代码替换成:

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

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

public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    super.processFormRequest(pageContext, webBean);
    OAApplicationModule am = pageContext.getApplicationModule(webBean);
     Number reqId =  (Number)pageContext.getTransactionValue("reqId");
     String sreqId = reqId.toString();
 
    Serializable[] parameters = { sreqId };
  
    int concreqid = ((Integer)am.invokeMethod("submitCPRequest", parameters)).intValue(); // submitting the concurrent request
    pageContext.putSessionValue("concreqid",concreqid);
 //自己需要的页面跳转
    pageContext.forwardImmediately("OA.jsp?page=/oracle/apps/xxdm/ecrc/webui/xxMainPG",
                 null,
                 OAWebBeanConstants.KEEP_MENU_CONTEXT,
                 null,
                 null,
                 true,
                 OAWebBeanConstants.ADD_BREAD_CRUMB_YES);
   
  }

运行效果如下:

 

 

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

 

posted @ 2017-09-22 14:13  Steven·F  阅读(409)  评论(0编辑  收藏  举报