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();
    vo1.executeQuery();
    JlOafTest1VORowImpl row = (JlOafTest1VORowImpl)vo1.first();
    if (row != null) {
        row.setSelectFlag("Y");
        vo1.setCurrentRow(row);
  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) {
        System.out.println("Apply");
        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");
                row2.setText1("test123456");
        JlOafTest2VOImpl vo2 = am.getJlOafTest2VO1();
        Row row = vo2.first();
        row.setAttribute("TransTest","test123");
        System.out.println("set row with num1,num2 = " + row.getAttribute("Num1") + "," + row.getAttribute("Num2"));
        System.out.println("VORow instance id " + row.)
        am.getTransaction().commit();
    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");
        vo1.setCurrentRow(row);
Thank you

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.

Similar Messages

  • Using table filters with transient VO attributes

    Hi,
    I have a the following use case and I cannot seem to find a valid solution on my own without falling into deep depression and/or psychotic delirium. Anyway, I'm sure there's a solution and that it's pretty simple, and hopefully someone here will know it.
    Let say I have a read-only VO with two attributes bound to the SQL query, namely Prefix and Suffix, as well as a transient calculated attribute named Compound formed of both the Prefix and Suffix separated with an hyphen.
    Now I want to bind that VO to an af:table supporting filters, showing only Compound column as Prefix and Suffix alone doesn't make much sense to the end user. I therefore use Compound as the sortProperty. For sorting, I was able to enforce correct logic by overriding the VO's getOrderByClause and setOrderByClause methods. For findMode, an old solution proposed by Steve involving overriding createViewCriteria with a custom class extending ViewCriteria that needs to override createViewCriteriaRow works. However, the filter capability of the table seems to use something different involving ViewCriteriaItemValue. Although I would be able to create a different instance when a criterion is created for the Compound attribute, but even if I do, I don't know how to split that value into two columns afterward. I guess I could create three linked values when the compound filter value is created, but it seems complicated. Best would be to hook the method returning the list of ViewCriteriaItemValue during the where clause creation, but then again, the data binding layer use that to detect what filters are applied and output the table accordingly so I cannot really remove the compound value at that point either. I could also override the getWhereClause I guess. Another solution, the simplest, would be to put the compound value in the SQL query, but I find that option appalling as it shouldn't be the database responsibility. If there's no other option I guess that what I'm going to do however.
    Anyone can shred any light on that issue?
    Regards,
    ~ Simon

    Hi Peter,
    Although it's not exactly what I need, I can indeed build a solution from that. Then again, it wouldn't be my first choice as it doesn't respect a correct separation of concerns (I guess I'm a purist). A listener is a view/controller layer entity and I would have preferred to hide the fact that the VO Attribute is a composition of two others to that layer. I would really have liked a pure model layer solution. That being said, I prefer the queryListener option to the Database one.
    Thanks,
    ~ Simon

  • How to set default value in transient boolean attribute in VO in ADF

    Hi ADF Experts,
    I have requirement like,I have viewObject with one transient booelan attribute,
    I want to set default value of that boolean attribute as "True"
    How can I achive that please help,
    Tried every thing but no luck.

    Hi,
    I am not sure what is the use of setting a default value for a transient attribute in a read-only VO.
    However, why not include that attribute with a default value in the query itself?
    Something like
    SELECT
         Empno, Ename, Deptno, 'true' as BooleanTransAttr
    FROM EMP
    and set the type of the attribute to Boolean?
    -Arun

  • Using populateAttribute to override transient VO attribute

    Hi,
    I want to use the 'populateAttribute' method to override a transient VO attribute but not having much luck.
    Error(61,7): method populateAttribute(<any>, java.lang.String) not found in class cas.oracle.apps.csi.installbase.webui.ChangeItemsCO
    I thought I could just put it in the controller with the following line:
    populateAttribute(Client, NewClient); --where Client is the transient attribute and NewClient is a text input value from the screen
    because I want to override only if the user presses the 'Change' button.
    Should I be putting it somewhere else? What am I missing?
    Thanks very much.

    Resolved.
    Didn't have to use populateAttribute at all. I just passed the text input fields using parameters from the controller to the AM where I was displaying the transient VO attributes and overrode the attribute there.
    Thanks.

  • Set Transient VO attribute runtime

    Hi Everyone,
    I am creating new row though create Method in Entity Object. Now the problem is I have to set Transient VO attribute in order to keep the row of advance table editable. Any help would be appreciable.
    Thanks and Regards,
    Sandip

    Hi Sandip,
    As per my understanding we can't create row in create method, it fires automatically when a row will be created.
    Transient attribute can be set when you are creating new row.
    after creating new row, set the transient attribute then insert the row and set the row status.
    I hope it will give you clue.
    Regards,
    Reetesh Sharma

  • Transient Entity Attribute as an Assoc

    Can I use a transient Entity attribute as an Assoc?
    I created an Attribute at the Entity level that is not mapped to a table. The entity is called FirstEndEntity.
    Then I created an Association between FirstEndEntity and OtherEndEntity. I used the attribute that i just created at FirstEndEntity, (so its transient) and the OtherEndEntity attribute is mapped to DB table.
    When I tested the assoc, the wizard complains, saying he cannot resolve the attribute that i just created?
    Is there a way around this?

    yes, you're right, I've tested it in 12.1.3 and error message was displayed.
    it seems it's a bug(bad bug ) in both 11.1.1.7 and 12.1.2. and now what can I do? is there any way to display the the error message?
    Regards
    Habib

  • Are Transient VO & attributes handled differently ?????????????????????????

    Hi All,
    i'm using jdev10.1.2, adf bc's and jsp's. I'm having a transient attribute problem. I can populate these values fine, but subsequently if i try and manipulate these transient attributes, their values are all null. I've handled these tranient attributes exactly as you would any regular attribute. i just cant understand why they're not behaving as i would expect.
    So my question is, are the transient attributes handled differently??? Is there a property i need to set that i'm missing? do they need to be inserted into views in a special?
    If anyone could shed any light in the subject i would be most grateful or even if anyone could point me towards a good site on the subject.....
    Thanks,
    Liz

    Liz,
    Have a look at section 28.6 of the ADF Developer's Guide for Forms/4GL Developers (version 10.1.3.1.0 - I don't have the equivalent 10.1.2 version handy. It says, in part:
    Transient view object attributes are not passivated by default. Due to their nature, they
    are usually intended to be "read only" and are very easily recreateable. So, it often
    doesn’t make sense to passivate their values as part of the XML snapshot. However,
    by checking the Passivate checkbox on the Attribute page of the View Object Editor
    for any transient attribute, you can declaratively configure it to be
    passivation-enabled.
    Hope this helps,
    John

  • XSL attribute question

    *<xsl:attribute name="xdofo:rowspancell-repeat-nextpage" xdofo:ctx="block">true</xsl:attribute>*
    Hello, can you provide me some example on how to use this code? i tried putting this code in a field in a table however it doesn't do any changes in my report, the header still don't repeat.
    i'm aware of the word functionality to repeat a header, but due to the structure of my table, that method will changes the output of my report. the reason is i have a looping condition in that header, so if i tried to repeat it, the looping also repeats.
    to summarize my table outline:
    <HEADER1>---repeating already
    <HEADER2 with looping condition>---> the one that i want to repeat
    both headers belongs to a one table
    i tried separating the header 2 to another table but it destroys my report output
    thanks in advance! :)

    Hi
    You may get help if you post your question on its forum.
    XML DB
    -Priyanka

  • Transient entity attributes and clearing cache

    I have an entity with both queriable and transient attributes. One of the transient attributes uses the persistent primary key of the entity object as well as an attributes retrieved from another entity via an association in order to execute a CallableStatement. This transient attribute uses the following code:
    public Number getReflectallow() {
    if ((Number)getAttributeInternal(REFLECTALLOW) == null) {
    return getReflectAllowFromDB();
    } else {
    return (Number)getAttributeInternal(REFLECTALLOW);
    The getReflectAllowFromDB also sets the value in entity cache using the populateAttribute method.
    My problem is that this database value can change and there are certain points in the application where I would like to clear the cache and rebuild all new values for this attribute. I have tried using both getTransaction.clearEntityCache() and the clearCache() on the view object but neither affects this field. I also cannot loop through the view and reset that attribute to null because it dirties the transaction. I'm assuming that clearing the cache does not work because the attribute is transient. How can I clear the values from cache?

    Any help with this Shay?

  • Transient vo attribute binding returning null

    i have a editable form with multiple input text components which i created by dropping a collection on page.
    now i want to add more fields which are transient and read only.
    i added two transient attributes in VO with Updatable to Never and queryable to true, i dont have the logic yet so the expression is blank. i created a label using control hint.
    now i created two attribute value bindings for these new fields.
    i created two input text fields and used these bindings for their label , value properties. i set readonly and disabled both true for these input text fields.
    if i hard code the label and value properties of input text it works, if i use binding expressions for them, it throws some error saying could not find binding for transient fileds or thery returned null.
    what stpes should i use to add a transient field to a editable form.
    jdev 11.1.1.5.0

    Put the transient attributes into the underlying eo, refresh the vo and add the attributes from the eo to the vo. Now they should work just as any other attribute.
    Timo

  • Persistant Transient VO Attributes

    I'm experiencing some problems related to persistant transient attributes in view objects under 9.0.4 on Windows (yes I understand it's a preview release, but wanted verify this problem to see if anyone as seen anything similiar).
    I have a view object based on an entity object, everything works as expected, I can create a new row add it to the VO and it persists through multiple modifications.
    When I add a transient attribute and set it as persistant the record is not stored in the ps_txn table and the following error appears in the debug log:
    oracle.jbo.PCollException: JBO-28039: Root node for collection TXN is invalid,
    Has anyone encountered this, am I doing something I shouldn't?
    Thank you.

    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.

  • LOV dropdown creation  for Transient VO attribute programatically

    Hi experts,
    One clarification,
    Can we have LOV dropdown List for the transient attribute in TRVO which is based on the only Transient attributes.??
    Also List of values based on the LOVVO which has Bind variable, so I am populating values programatically.
    As of now in AMImpl method I am able to execute the Query and get all values for LOVDropdown.But when same values i am not getting in the page, its showing empty values.
    I am not getting any errors in the log also.
    any sugestions pls..????
    Jdev version 11.1.1.3.0
    thanks
    Santosh
    Edited by: Santosh M E on Feb 12, 2012 11:31 PM
    Edited by: Santosh M E on Feb 12, 2012 11:33 PM

    hi user,
    sounds same,
    ID - description value
    sorry for late editing . link is changed check over.
    Edited by: ADF 7 on Jan 9, 2012 11:23 PM

  • Multi value attribute question

    Hello there,
    Our application would like to have a multi value attribute in DS11.1.1.7.0 on SLES platform. But here is my question..
    1. Can i have a one single attribute with value like companyCode: ABC,XYZ,QWE,RTY
    2. OR , can i have like below..
    CompayCode: ABC
    CompanyCode: XYZ
    CompanyCode: QWE
    CompanyCode: RTY
    which is the best method for LDAP server performance?
    Thanks

    Hi,
    Multi-valued attribute is supported OOTB by LDAP and it seems simpler&better (possibility to have better indexing, more efficient to add/delete values)  to use the second option, especially if you need to search for entries based on one of the attribute value. By default, LDAP attributes are multi-valued in the LDAP schema so you can store several values for companyCode.
    Note: attribute values in an LDAP attribute are unordered, so choose the primary option if you need to maintain ordering across attribute values.
    HTH
    -Sylvain

  • Creating Transient EO attribute and Mapping it to VO

    Hi all,
    Pls suggest me the best approach/solutions.
    Its to add a transient attribute to EO and update it by mapping it to a VO(using expert query) attribute.
    Regards,
    Santhosh.

    Here is what I would do.
    1. Create either a new, extended EO or modify the existing EO using the jDeveloper EO wizard and create the new, transient attributes through that wizard. This will automatically create EO setter and getter methods for the transient attributes. Since they are already in the EO they can use the other EO set and get methods to create the transient data. Since the new attribute is transient, the set method for it is probably not as important since transient attributes do not support DML as they are not attached to table attributes.
    2. Next create a new, extended VO or modify the existing VO using the jDeveloper VO wizard adding the extended EO if one was created. At the SQL pane add the EO transient attributes to the select statement which will automatically create EO - VO mapping entries for the new fields. Be aware, jDeveloper will NOT create these properly. The VO xml will have to be edited because it will not correctly identify the EO entries in the VO xml. Shut down jDeveloper and open the VO xml using an editor. Locate your added attributes and, using an properly associated VO/EO attribute as a template, modify your VO xml so that the attributes properly match to the EO.
    3. If you are using extended objects you will have to create a substitution for both the extended EO and the extended VO. At deployment you must deploy the new, extended objects and the substitution in order for everything to work properly.

  • Setting transient VO attributes defaut value does not work

    Hi,
    I try to set default values to transient attributes but it dowes not work the value retuened after the executequery() is null.
    Please help.
    Thnaks
    JO

    Transient attributes will be cleared on VO requery
    what is your requirement ?
    Thanks
    Tapash

Maybe you are looking for