前言
有时候我们会遇到这样的情况,点了按钮之后,在后台运行的代码会调用数据库的程序包,提交请求或者API,导致前台的页面需要等待。但是这个时候,前台页面的按钮,输入框等是可以继续操作的。
场景:
如上图,点击提交之后,后台调用采购接收接口程序,生成采购接收事务处理。但是点击了提交之后,并不是马上能操作完成的。且在界面上输入框和按钮还能继续操作。
那么,如何避免客户重复点击提交或者进行别的操作呢?
此处我们用到了ProcessingCO:
一、创建ProcessingCO
正常情况下,一个PG一个CO PG的操作,CO相应作出相应的逻辑操作,如调用AM。
1. 先在webui同路径下新建一个CO:
2. 我们将原先CO中调用AM或处理逻辑的代码替换成
if submitbtton!=null{
//新建的CO的路径
OAProcessingPage page =
new OAProcessingPage("cux30.oracle.apps.cux.po.storage.webui.CUX30PORcvStoLinesProcessCO");
//AM的路径
page.setApplicationModuleDefName("cux30.oracle.apps.cux.po.storage.server.CUX30PORcvStorageIndexAM");
// 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);
}
运行效果如下:
参考文档: