Filter transient view object based SOC

i have a SOC in a popup which is built on a Transient VO in a page on which popup is displayed.
i need to filter contents of this SOC based on value selected in another SOC.
both SOCs are based on same transient VO which is denormalized from a relationship point of view.
transient vo rows are populated programatically.
what is the best way to filter a transient view object whose rows will be displayed in UI as SOC.
VO does not have any EO or SQL query defined. only attributes which are populated programatically.

Hi!
I encountered the same problem, and found out that each param[] entry is itself an Object[]. So with the following code you can find the contents:
Object[] bindvar = (Object[])params[0];
String varName = (String)bindvar[0];
Object varValue = bindvar[1];Hope this helps,
Jeroen

Similar Messages

  • Transient View Object based on a RefCursor?

    Hi!
    I have a ViewObject named VO1 which is based on an EO mapped to a db table. Now I have a Transient ViewObject TVO2 which is based on a PL/SQL ref cursor. The example on Steve Muench site is a ViewObject based on an EO but overrides the viewobject framework functions to make it ref cursor based. What I am trying to do is different from the example, so I'm wondering if this is possible?
    I had a viewlink to connect VO1 and TVO2 because the viewlink attribute values from VO1 will be input parameters to the PL/SQL function in TVO2. When I tested this scenario, I get a ClassCastException inside the overriden function
    executeQueryForCollection(...) {
    ... params[0] //when this line executes I get a ClassCastException Ljava.lang.Object...
    super.executeQueryForCollection(...);
    }

    Hi!
    I encountered the same problem, and found out that each param[] entry is itself an Object[]. So with the following code you can find the contents:
    Object[] bindvar = (Object[])params[0];
    String varName = (String)bindvar[0];
    Object varValue = bindvar[1];Hope this helps,
    Jeroen

  • Filtering Transient view objects

    Guys,
    I have transient view object.
    i have populated the rows programatically.
    Based on some UI action, i need to filter the rows in the view object. Whenever i filter the rows (using view criteria), i can't get back the lost rows again.
    For eg.. i have populated the view object with 5 rows.
    Based on View criteria(VC1), i got only 2 rows.
    Now i need to apply the same view criteria(VC1) with different values for bind variables, but it applies the criteria on the remaining 2 rows. (but am expecting to apply the criteria on the actual 5 rows)
    I think transient view object is loosing rows on applying view criteria.
    How this can be solved?

    Hi,
    can you try using rowmatch
    refer following method inside viewobjectimpl
        public void matchByCustomerNumber(String custno) {
            RowMatch rm = new RowMatch("CustNumber = " + custno);
            setRowMatch(rm);
            setQueryMode(ViewObject.QUERY_MODE_SCAN_VIEW_ROWS | ViewObject.QUERY_MODE_SCAN_DATABASE_TABLES);
            setSortBy("CfMonth DESC");
            executeQuery();
        }you should also see other query modes.
    ViewObject
    look for QUERY_MODE_SCAN.. contants.
    Regards,

  • How to Use Transient View Objects to Store Session-level Global Variables

    hi
    Please consider section "40.8.5 How to Use Transient View Objects to Store Session-level Global Variables"
    at http://download.oracle.com/docs/cd/E14571_01/web.1111/b31974/bcstatemgmt.htm#ADFFD19610
    Based on this documentation I created the example application
    at http://www.consideringred.com/files/oracle/2010/ProgrammaticalViewObjectAndRollbackApp-v0.01.zip
    It behaves as show in the screencast at http://screencast.com/t/qDvSQCgpvYdd
    Its Application Module has a Transient View Object instance "MyEmployeesContextVOVI", as master for the child View Object instance "EmpInCtxJobVI".
    On rollback the Transient View Object instance keeps its row and attribute values.
    Also when passivation and activation is forced (using jbo.ampool.doampooling=false ) the Transient View Object instance seems to keep its row and attribute values.
    questions:
    - (q1) Why does the expression #{bindings.MyEmployeesContextVOVIIterator.dataControl.transactionDirty} evaluate as true when a Transient View Object instance attribute value is changed (as shown in screencast at http://screencast.com/t/qDvSQCgpvYdd )?
    - (q2) What would be a robust approach to make a Transient View Object instance more self-contained, and manage itself to have only one single row (per instance) at all times (and as such removing the dependency on the Application Module prepareSession() as documented in "5. Create an empty row in the view object when a new user begins using the application module.")?
    many thanks
    Jan Vervecken

    Thanks for your reply Frank.
    q1) Does sample 90 help ? http://blogs.oracle.com/smuenchadf/examples/
    Yes, the sample from Steve Muench does help, "90. Avoiding Dirtying the ADF Model Transaction When Transient Attributes are Set [10.1.3] "
    at http://blogs.oracle.com/smuenchadf/examples/#90
    It does point out a difference in marking transactions dirty by different layers of the framework, "... When any attribute's value is changed through an ADFM binding, the ADFM-layer transaction is marked as dirty. ...".
    This can be illustrate with a small change in the example application
    at http://www.consideringred.com/files/oracle/2010/ProgrammaticalViewObjectAndRollbackApp-v0.02.zip
    It now shows the result of both these expressions on the page ...
    #{bindings.MyEmployeesContextVOVIIterator.dataControl.transactionDirty}
    #{bindings.MyEmployeesContextVOVIIterator.dataControl.dataProvider.transaction.dirty}... where one can be true and the other false respectively.
    See also the screencast at http://screencast.com/t/k8vgNqdKgD
    Similar to the sample from Steve Muench, another modification to the example application introduces MyCustomADFBCDataControl
    at http://www.consideringred.com/files/oracle/2010/ProgrammaticalViewObjectAndRollbackApp-v0.03.zip
    public class MyCustomADFBCDataControl
      extends JUApplication
      @Override
      public void setTransactionModified()
        ApplicationModule vApplicationModule = (ApplicationModule)getDataProvider();
        Transaction vTransaction = vApplicationModule.getTransaction();
        if (vTransaction.isDirty())
          super.setTransactionModified();
    }Resulting in what seems to be more consistent/expected transaction (dirty) information,
    see also the screencast at http://screencast.com/t/756yCs1L1
    Any feedback on why the ADF Model layer is so eager to mark a transaction dirty is always welcome.
    Currently, question (q2) remains.
    regards
    Jan

  • How to retrieve the values from a Transient View Object

    Hi Experts,
    I am using Jdevelpoer11.1.1.5.0. I created one Transient view object with attributes EmpId,Salary.
    In Backing Bean i will create rows for that view object and display it in the form of <af:Table> like Empid, Salary and an Update Link.
    Now my problem is i want to update the salary of the particular EmpId. For Example if the EmpId is 100 and salary is 10000 now i want to increase the salary to 20000 and if i click on the update button; i want to retrieve the particular employee details in my backing bean. How can i acheive this?
    Thanks in advance.

    A better approach would be to programmatically populate rows in the <VO>Impl.java by overriding the executeQueryForCollection(0 as specified here -
    http://adfpractice-fedor.blogspot.in/2011/01/adf-bc-programmatically-populated-vo.html
    You can write the logic to update the salary in an AM method then on click of Update or in the getter of Salry field if logic is valid for all fields...

  • Problem with 2 View Objects based on One Entity -Probably a Bug in ADF BC

    Hi
    I am using JDeveloper 10.1.3(SU5) and adf faces and ADF BC and to explain my problem I use HR schema.
    First, I created 2 view objects based on countries table named as TestView1 and TestView2. I set TestView1 query where clause to region_id=1 and TestView2 query where clause to region_id!=1 in the view object editor and then I created 2 separated form on these 2 view objects by dragging and dropping from data control palette.
    Now when I insert a record in the form based on TestView1 with region_id set to 1 and commit the record and go to the next form I can see the record in the second form which is completely wrong since it is against the where clause statement of the second form.
    I am really confused and the situation is very wired and it seems to me something like bug in adf bc.Am I right.Is there any work around or solution for solving this problem.
    Any help would be highly appreciated.
    Best Regards,
    Navid

    Dear Frank,
    Thank you very much for your quick response.
    Reading your helpful comments now I have some questions:
    1- I have commited the record in the database so shouldn't the query of view objects be re-queried?
    2- We try to use ClearVOCaches (entity_name,false) in afterCommit of the base entity object but unfortunately it does not work correctly. after that,We got root app module and used findViewObject method to find all the view of that entity (we have found them by using name not automaticlly) and called executeQuery of all views. From my point of view it has 2 big disadvantages. First suppose that this entity is an important entity and 4 or 5 viow objects are based on it. Now, For inserting one record we should re-execute 4 or 5 view which I think makes some performance issues. Besides, If during the development one programmer add a new view object based on this entity and don't add the executeQuery in the afterCommit for this view, again we have the same problem. Isn't there at least a way that automatically refresh all related view objects however the performance issue still exists.
    3- You mentioned that this issue is handled in the developer guide. Could you kindly give me a refrence which developer guide you mean and which section I should read to overcome this problem.(I have ADF Developer's Guide for Forms/4GL Developer's Guide , however I search for clearVOCaches and surprisingly nothing was found!!!)
    4- Could you please give me some hints that from your point of view what is the best method to solve this problem with minimum performance effect.
    Any comment would be of some great help.
    Thanks in advance,
    Navid

  • How to Create an Input Form using a Transient View Object?

    I would like to use a Transient View Object to store data from input forms across a multiple-page enrollment process.
    My question is how to I create the input form using the Transient View Object on the .jspx page? Do I drag/drop an ADF creation form onto the page? Or, use a regular ADF form? Do I need to create the initial row progammatically?
    Just looking for some general directions or set of instructions? I've looked at the SRDemo example (Globals Transient View Object), but I'm not sure how they created the page at design time?
    thanks

    Well following the SRDemo example, this seems to work:
    1. Create Transient View Object
    2. Add to Application Module as a Data control
    3. Add to .jspx page as an ADF Form (not as an ADF Create Form)
    4. Add following code to Application Module containting Transient VO instance:
    protected void prepareSession(Session session) {
    super.prepareSession(session);
    insertTransientViewObjRows();
    private void insertTransientViewObjRows() {
    ViewObject transientvo = getViewObj1();
    transientvo.clearCache();
    transientvo.insertRow(transientvo.createRow());
    }

  • Separate App Module, View Object based on Select not EO: Best practice?

    Hi,
    I have a list of base tables(parameters) that are used everywhere in my application for selection components (List, Combo, Radio).
    I'm considering creating a separate app module with a view object based on query for each table.
    I have created a BaseTableAM application module for managing those tables, Entity objects and View Objects in update mode.
    Those tables are rarely changed.
    Example of table:
    ItemType
    item_type_id = primary key
    name = description
    In the BasetableAM:
    ItemTypeEO entity object
    ItemTypeVO updateable view object based on related entity object.
    Now in my project I will create combo boxes for selection of the item_type_id.
    Separate application module:
    SelectionViewAM composed of View Objects based on Select statements and not on Entity Objects.
    Example of view object ItemTypeViewVO:
    SELECT ItemType.ITEM_TYPE_ID,
    ItemType.NAME
    FROM ITEM_TYPE ItemType
    All view objects in this application module will be read-only and for selection only.
    By basing all those View Objects on select statements not based on Entity Objects I suppose there will be no locking and "value changed" management => less overhead.
    Is this a good practice?
    Being read-only I could have based those View Object on Entity Object with flag updateable set to no, what would you recommend?
    By creating a separate Application Module for those selection view objects, I know that update will not be possible.
    Thank you for your advice.
    Frederic

    See this article for View Object tuning tips:
    http://www.oracle.com/technology/products/jdev/tips/muench/voperftips/index.html
    Are you planning to use this AM as a nested AM inside other application modules?
    If you don't the "selection AM" will have its own, separate database connection/transaction.
    If you do, it will share connection, transaction with its containing "root" AM.
    It may not be relevant to your application, but just realize (which is explained in the article I point to above) that view objects that are not related to entity objects do not "see" pending changes in the current transaction. That feature depends on the VO/EO cooperation. It's fine to build VO's without an EO -- in fact we've made it easier to do this in 10.1.2 in the Design Time wizards -- but you just want to make sure you realize what features it's giving up. If you don't need those EO-related features, then by all means create an Expert Mode VO that's not related to EO's.

  • View Link w/ Transient View Objects

    I'm trying to create 2 view objects that contain only transient attributes and create a view link between them. I have a key defined in the parent and 2 keys in the child. When I create the view link I'm unable to generate the accessor in the source because the boxes are all grey'd out. The destination side works correctly.
    Is there any reason this shouldn't be possibly in BC4J? I've been scouring the documentation and so far I haven't found any mention that a view link will not work in this situation.
    This is in JDev. 9.0.4.
    Thank you

    A view link builds its corresponding where clause based on the selected attributes. On the source side, the attributes are used as parameters to the query, so transient attributes are fine. Attributes on the dest side get built into a where clause which would not work with transient attributes, so they are disabled.
    for example:
    select * from blah where (%1 == destVo.attr1) would not work if destVo.attr1 is transient.

  • Filter at View Object Level

    Hi Experts ,
    JDEV 11.1.2.1.0
    How can we add filter(Where clause) condition in a View Object?.....that is , say view object need to filter for a Comapany which loggesd in...
    Need to show the record at UI level for a particular company which logged in....
    after getting company code from session , how can we use it for bind parameter for VO?
    Thanks in advance
    PMS
    Edited by: pms on Apr 19, 2012 5:48 PM

    Check this in ADF Developer's guide:
    http://docs.oracle.com/cd/E15523_01/web.1111/b31974/bcquerying.htm#CEGDGIJH
    Thanks,
    Navaneeth

  • How to reset view criteria in transient view object

    Hi,
    I have a view object with one transient attribute:
    ViewCriteria vc = null;
    ViewCriteriaRow vcRow = null;
    ViewObject vo = am.findViewObject("TestView");
    vo.setQueryMode(ViewObject.QUERY_MODE_SCAN_VIEW_ROWS);
    Row newRow1 = vo.createRow();
    newRow1.setAttribute("TestAttr", new Number(10));
    vo.insertRow(newRow1);
    Row newRow2 = vo.createRow();
    newRow2.setAttribute("TestAttr", new Number(20));
    vo.insertRow(newRow2);
    ViewCriteria vc = null;
    ViewCriteriaRow vcRow = null;
    vc = vo.createViewCriteria();
    vc.setCriteriaMode(ViewCriteria.CRITERIA_MODE_CACHE);
    vcRow = vc.createViewCriteriaRow();
    vcRow.setAttribute("TestAttr", new Number(10));
    vc.addElement(vcRow);
    vo.applyViewCriteria(vc);
    vo.executeQuery();
    System.out.println("Rows: "+vo.getEstimatedRowCount());  // Works as expected
    vo.getViewCriteria().resetCriteria();  // This code should reset view criteria
    vc = vo.createViewCriteria();
    vc.setCriteriaMode(ViewCriteria.CRITERIA_MODE_CACHE);
    vcRow = vc.createViewCriteriaRow();
    vcRow.setAttribute("TestAttr", new Number(20));
    vc.addElement(vcRow);
    vo.applyViewCriteria(vc);
    vo.executeQuery();
    System.out.println("Rows: "+vo.getEstimatedRowCount());  // Returns 0 rows - should return 1How to reset and apply view criteria ?

    try to remove the previously view criteria. ie
    ViewObjectImpl vo = this.getSomeViewObject();
    ViewCriteria vc = vo.getViewCriteria("criteria_name");
    vo.removeViewCriteria("criteria_name");
    vc.resetCriteria();
    vo.applyViewCriteria(vc);
    see the link below
    http://adfcodebits.blogspot.com/2010/04/bit-7-reseting-view-criteria-associated.html

  • Programmatically populate ADF BC view object based on user's JAZN roles

    I currently have a ADF BC read-only view object that is based on an sql query.
    I would like to assign values to the bind variables based upon the user's JAZN
    roles. My problem is that I am uncertain how to obtain the roles the user has.
    Any help would be appreciated.
    Thanks,
    Kenrick

    I do believe this topic is discussed in detail in the 4GL Developer's Guide. Section 30.8 describes everything how to obtain user info programatically. Aside from pointing you in a direction that will get you where you need to be, I can't be of much help. I'll be crossing that hurdle in the coming months.
    Download the guide from this page:
    http://www.oracle.com/technology/documentation/jdev/b25947_01/index.html. I printed and bound it and use it as my bible.
    Good Luck,
    Jeff

  • Transient View Object emptying

    I have created a view object containing nothing but transient attributes, and populate it whilst initiating a page. I can see that information in a table on the page. As soon as I perform an action on that page (<af:commandButton to be precise) all the records vanish and I get a Row currency error.
    It doesn't run the function assigned to the actionListener, it just returns immediately with the error.
    I have specified one attribute as a key, and made sure I passivate transient values. Is there anything else I should be doing to keep these values in place?

    If anyone is interested in the answer to this, it turned out to be because Application Module Pooling had been turned off.

  • How to add row in multiple view object based on common entity object.

    Hi ,
    I have
    Jdeveloper version - 10.1.3.3.0
    Oracle Database - 11g R2
    I have a situation where i have to show data from one table in three adf tables on jsf page depending on a flag value in a column in table. For this purpose i have done the following steps
    a) Created an entity object on the database table .
    b) Created three view objects on this entity object and edited the view object's SQL and included the where clause
                       WHERE  A.USER_PERSONAL_NO = :P_USER_PERSONAL_NO AND
                           A.AUTH_TYPE = 'LF'
                       The auth_type cloumn decided in which view object the data will be shown
    Now, when i query the data from database by executing the query of these view objects the data is shown correctly in all three view objects. Till here there seems every thing ok
    Now , i have to provide the logic to add records in the adf tables for this i have provided add button in action facet of all three tables which are binded to methods in managed bean,
    when i add a record in a adf table by add button the new row which is created is shown in all three tables . I cant understand why this is happening , please help me to solve this problem.
    How can i make it possible so that the record appears only in that adf table in which the record is added.
    The method for adding record is
                Row rw = currentAM.getWfRecommAuths().createRow();
                rw.setAttribute("UserPersonalNo",this.getQuery_personal_no().getValue());
                rw.setAttribute("AuthPersonalNo","");
                rw.setAttribute("AuthType","LX");
                currentAM.getWfRecommAuths().last();
                currentAM.getWfRecommAuths().insertRow(rw);
               Please help , thanks in advance.

    Hi,
    have a look at polymorphic view objects
    http://download.oracle.com/docs/cd/E21764_01/web.1111/b31974/bcadvvo.htm#CEGDCCCB
    Frank

  • BC Archive - problem with opening view object based on entity from archive

    We have encountered a weird problem with a reusable BC library on different PCs.
    Library was imported into a project following steps in section 25.7 of the ADF guide.
    A view object was created using some of the entities from the library.
    Model tested successfully with view object (using AppModule tester).
    Page developed with no problems.
    Application copied to a different PC.
    BC JAR files set up in lib folder and removed/readded to application model project. When attempting to open view object, get the error below.
    However, the View object still tests successfully using the AppModule tester.
    The page using the View object still runs successfully.
    I believe the problem is that when the archive was originally imported, it was imported from a different location. The Containees tag in the project .jpx file references that path name. But even when I edited the path name, I still could not open the view object. Do we have to remove and redo the import of the library each time the application is copied to a different machine?
    Error when attempting to edit View Object:
    oracle.jbo.dt.objects.JboException: The following object(s) referred to objects that could not be found:
    com.guideworkstv.ibo.webstagemodel.AcctReqForReviewViewObj
    com.guideworkstv.ibo.webstagemodel.AcctReqForReviewViewObj
    Could not find the following referenced object(s):
    com.guideworkstv.ibo.model.webstage.entities.IboAccountRequest
    com.guideworkstv.ibo.model.webstage.entities.IboAccountRequest
         at oracle.jbo.dt.objects.JboException.throwException(JboException.java:81)
         at oracle.jbo.dt.objects.JboPackage.loadResolveReferencesXML(JboPackage.java:1397)
         at oracle.jbo.dt.objects.JboPackage.finishObjectsLoad(JboPackage.java:1042)
         at oracle.jbo.dt.objects.JboPackage.loadFromXMLFile(JboPackage.java:972)
         at oracle.jbo.dt.objects.JboPackage.loadFromXMLFile(JboPackage.java:951)
         at oracle.jbo.dt.objects.JboBaseObject.loadFromXMLFile(JboBaseObject.java:2615)
         at oracle.jbo.dt.objects.JboPackage.loadFromXMLFile(JboPackage.java:880)
         at oracle.jbo.dt.objects.JboPackage.checkForLoad(JboPackage.java:451)
         at oracle.jbo.dt.objects.JboPackage.findContainedObjectByName(JboPackage.java:440)
         at oracle.jbo.dt.objects.JboPackage.findObjectByName(JboPackage.java:1999)
         at oracle.jbo.dt.objects.JboApplication.findObjectByName(JboApplication.java:959)
         at oracle.jbo.dt.objects.JboUtil.fileURLToObject(JboUtil.java:510)
         at oracle.jbo.dt.jdevx.ui.JdxJboAddin$1.handleCopy(JdxJboAddin.java:997)
         at oracle.jdeveloper.compiler.CopyTranslator.handledByListeners(CopyTranslator.java:125)
         at oracle.jdeveloper.compiler.CopyTranslator.translate(CopyTranslator.java:263)
         at oracle.jdeveloper.compiler.UnifiedBuildSystem$CompileThread.buildGraph(UnifiedBuildSystem.java:300)
         at oracle.jdeveloper.compiler.UnifiedBuildSystem$CompileThread.buildProjectFiles(UnifiedBuildSystem.java:516)
         at oracle.jdeveloper.compiler.UnifiedBuildSystem$CompileThread.buildProject(UnifiedBuildSystem.java:609)
         at oracle.jdeveloper.compiler.UnifiedBuildSystem$CompileThread.buildAll(UnifiedBuildSystem.java:666)
         at oracle.jdeveloper.compiler.UnifiedBuildSystem$CompileThread.run(UnifiedBuildSystem.java:894)

    We have resolved this problem by making sure that all machines have identical paths for both the working and the lib directories. It would be nice not to have to do this though.

Maybe you are looking for