1 Reply Latest reply on Aug 29, 2013 1:40 PM by User437258

    Transient VO Attributes Question?


      Can anyone please explain to me why there appears to be two, and not one, VORowImpl instances for one detailVO record?  Please let me explain.


      I have two EO's with one AO between them.  Two VO's and a VL between them.  An AM containing the two VO's with the detail VO via the VL(on num1) from the master the the detail.  The detail VO contains a transient attribute.


      Here are the tables.


      create table jl_oaf_test1(num1 number, text1 varchar2(30));

      create table jl_oaf_test2(num1 number, num2 number, text1 varchar2(30));


      I have a simple test page containing an advanced table with an inner advanced table in the outer's detail.  I also have another advanced table bound to the same detail VO instance found in the AM.  The controller code below will produce a page that displays the same database record with two different transient attribute values.  While the non transient text1 attribute is the same in both records displayed in the page.  So I am confused.  It appears like there could be multiple VORowImpl instances for the same database record based upon how the transient attribute appears but the single update to the non transient attribute makes it appear like there is only one as I would expect.  Can someone please explain what I am missing about transient VO attributes?


      The developer's guide mentions a view object row cache.  Could that be what I am missing here?

        "6. The SuppliersVORowImpl get<AttributeName> method in turn calls the corresponding SupplierEOImpl get<AttributeName> method to retrieve the value. For the "calculated" OnHoldDisplay attribute, the view object row retrieves the value from its own cache."


      Controller code.


      package oracle.apps.xxmap.JlOafTest.webui;


      import oracle.apps.fnd.common.VersionInfo;

      import oracle.apps.fnd.framework.webui.OAControllerImpl;

      import oracle.apps.fnd.framework.webui.OAPageContext;

      import oracle.apps.fnd.framework.webui.beans.OAWebBean;

      import oracle.apps.xxmap.JlOafTest.server.JlOafTest1VOImpl;

      import oracle.apps.xxmap.JlOafTest.server.JlOafTest1VORowImpl;

      import oracle.apps.xxmap.JlOafTest.server.JlOafTest2VOImpl;

      import oracle.apps.xxmap.JlOafTest.server.JlOafTest2VORowImpl;

      import oracle.apps.xxmap.JlOafTest.server.JlOafTestAMImpl;


      import oracle.jbo.Row;

      import oracle.jbo.RowIterator;


      public class JlOafTestCO extends OAControllerImpl


        public static final String RCS_ID="$Header$";

        public static final boolean RCS_ID_RECORDED =

              VersionInfo.recordClassVersion(RCS_ID, "%packagename%");



         * Layout and page setup logic for a region.

         * @param pageContext the current OA page context

         * @param webBean the web bean corresponding to the region


        public void processRequest(OAPageContext pageContext, OAWebBean webBean)


          super.processRequest(pageContext, webBean);

          JlOafTestAMImpl am = (JlOafTestAMImpl)pageContext.getApplicationModule(webBean);

          JlOafTest1VOImpl vo1 = am.getJlOafTest1VO1();


          JlOafTest1VORowImpl row = (JlOafTest1VORowImpl)vo1.first();

          if (row != null) {






        public void processFormData(oracle.apps.fnd.framework.webui.OAPageContext p1, oracle.apps.fnd.framework.webui.beans.OAWebBean p2) {

          super.processFormData(p1, p2);




         * 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);

          System.out.println("PFR 1");

          String event = pageContext.getParameter("event");

          if (pageContext.getParameter("Apply") != null) {


              JlOafTestAMImpl am = (JlOafTestAMImpl)pageContext.getApplicationModule(webBean);

              JlOafTest1VOImpl vo1 = am.getJlOafTest1VO1();

              JlOafTest1VORowImpl row1 = (JlOafTest1VORowImpl)vo1.first();

              row1.setTransTest("test master transient update in PFR");

              System.out.println("row1.getNum1 is " + row1.getNum1());

              System.out.println("PFR 2");

              if (row1 != null) {

                  System.out.println("PFR 3");

                  RowIterator iterator2 = row1.getJlOafTest2VO();

                  JlOafTest2VORowImpl row2;

                  if ((row2 = (JlOafTest2VORowImpl)iterator2.first()) != null) {

                      System.out.println("PFR 4");

                      System.out.println("found row2 from iterator, num1,num2 = " + row2.getNum1() + "," + row2.getNum2());

                      row2.setTransTest("test detail transient update in PFR");




              JlOafTest2VOImpl vo2 = am.getJlOafTest2VO1();

              Row row = vo2.first();


              System.out.println("set row with num1,num2 = " + row.getAttribute("Num1") + "," + row.getAttribute("Num2"));

              System.out.println("VORow instance id " + row.)



          else if ("Select".equals(event)) {

              System.out.println("PFR Select event");

              JlOafTestAMImpl am = (JlOafTestAMImpl)pageContext.getApplicationModule(webBean);

              JlOafTest1VOImpl vo1 = am.getJlOafTest1VO1();

              Row row = vo1.getFirstFilteredRow("SelectFlag", "Y");







      Thank you

        • 1. Re: Transient VO Attributes Question?

          By adding the TransTest transient attribute to the underlying EO object and using this new EO attribute in the VO the update via the master VO's detail accessor now results in the page rendering the new value for each display of the detail VO record.


          I would still like to know why the VO transient attribute behaves the way I describe above.