Description:
Creating a Dynamic table region and attaching the VO to this dynamic Table region in ProcessFormRequest method of controller.
Consider the requirement,
- If user selects “U” then it should create table region and should attach the query “select user_name from fnd_user “
- If the user selects “I,” then it should create table region and should attach the query “select invoice_num from ap_invoices_all “
Enter “I” and click the Submit button.
The result will be Invoice Information.
Enter the “U” and click the Submit button.
Result will be User information.
Note:
We cannot directly modify web bean properties in ProcessFormRequest method in controller. If you try, you will get below error.
(This developer mode error is thrown instead of being registered due to the lack of the page context object.) The OA passivation framework coding standard has been violated. Web bean properties cannot be modified in the controller processFormData or processFormRequest method. Web bean properties should be modified in the processRequest method only. An attempt to modify a web bean has been made in the following call stack: java.lang.Throwable at oracle.apps.fnd.framework.OACommonUtils.getCallStack(Unknown Source) at oracle.apps.fnd.framework.webui.OAWebBeanHelper.addIndexedChild(Unknown Source) at oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean.addIndexedChild(Unknown Source) at xxtab.oracle.apps.po.dynamictab.webui.xxtabCO.processFormRequest(xxtabCO.java:106) at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequest(Unknown Source) at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processFormRequest(Unknown Source) at oracle.apps.fnd.framework.webui.OAPageLayoutHelper.processFormRequest(Unknown Source) at oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean.processFormRequest (Unknown Source) at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequestChildren(Unknown Source) at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequest
Solution:
Please check below things if this is helpful.
Step 1: Write the code for creating the table region dynamically in the ProcessRequest method in the controller. Initially set a Flag as ‘No.’
Step 2: On clicking the Submit button, set the flag to ‘Yes’ and get the parameter value from Input Textbox in ProcessFormRequest method in controller
Step 3: Using forwardImmediatelyToCurrentPage method load the same page once again
Step 4: Based on the flag and parameter value, proceed to the dynamic table region and attach VO query logic in the ProcessRequest method in the controller.
Code Snippet – ProcessRequest and ProcessFormRequest method
public void processRequest(OAPageContext pageContext, OAWebBean webBean)
{
super.processRequest(pageContext, webBean);
String xflag = “N”;
String aparam = “”;
String voquery = “”;
if (pageContext.getTransactionValue(“xflag”) != null && !pageContext.getTransactionValue(“xflag”).equals(“”))
xflag = pageContext.getTransactionValue(“xflag”).toString();
System.out.println(“Flag=”+ xflag);
if ( xflag == “Y” )
{
if (pageContext.getTransactionValue(“param”) != null && !pageContext.getTransactionValue(“param”).equals(“”))
aparam = pageContext.getTransactionValue(“param”).toString();
System.out.println(“aparam=”+ aparam);
if (aparam == “U” || aparam.equals(“U”))
{
voquery = “select user_name from fnd_user “;
}
else if (aparam == “I” || aparam.equals(“I”))
{
voquery = “select invoice_num from ap_invoices_all “;
}
else
{
voquery = “select user_name from fnd_user “;
}
System.out.println(“voquery=”+ voquery);
AttributeDef[] attrdef = null;
OAApplicationModule oam = pageContext.getApplicationModule(webBean);
ViewObject vo = oam.findViewObject(“xxVO”);
if(vo != null)
{
vo.remove();
vo = oam.createViewObjectFromQueryStmt(“xxVO”,voquery);
}
else
{
vo = oam.createViewObjectFromQueryStmt(“xxVO”,voquery);
}
vo.executeQuery();
attrdef = vo.getAttributeDefs();
String colprompt = attrdef[0].getName();
System.out.println(“colprompt”+colprompt);
OATableBean tabbean = (OATableBean)createWebBean(pageContext,TABLE_BEAN,null,”table”);
tabbean.setID(“TableBN”);
tabbean.setNumberOfRowsDisplayed(10);
tabbean.setWidth(“50%”);
tabbean.setUserCustomizable(true);
tabbean.setViewUsageName(“xxVO”);
OAMessageStyledTextBean beans = (OAMessageStyledTextBean)createWebBean(pageContext,MESSAGE_STYLED_TEXT_BEAN,null,”beans”);
beans.setID(“col”+colprompt+”0”);
beans.setViewUsageName(“xxVO”);
beans.setViewAttributeName(colprompt);
beans.setLabel(colprompt);
beans.setUserCustomizable(true);
beans.setWrapEnabled(true);
beans.setDataType(“VARCHAR2”);
tabbean.addIndexedChild(beans);
webBean.addIndexedChild(tabbean);
}
}
/**
* Procedure to handle form submissions for form elements in
* a region.
* @param pageContext the current OA page context
* @param webBean the web bean corresponding to the region
*/
public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
super.processFormRequest(pageContext, webBean);
if(pageContext.getParameter(“item2”)!= null) // Go button
{
String param = pageContext.getParameter(“item1”);//To get text box value
pageContext.putTransactionValue(“xflag”,”Y”);
pageContext.putTransactionValue(“param”,param);
pageContext.forwardImmediatelyToCurrentPage(null,true, “Y”);
}
}
Summary:
This Post explained what the steps are should follow to create Dynamic table region in process form request
The customer in fusion application
Queries?
Do drop a note by writing us at contact@staging.doyensys.com or use the comment section below to ask your questions.