In-Memory Filtering Without Affecting Default Row Set

Noticed the following requirement (multiple times) while working with ADF developers - Find out rows in the default row set that meets specific conditions - In other words, perform in-memory filtering without affecting the primary row set.
By default, when you apply in-memory filtering  using ViewCriteria or RowMatch, they are applied on default row set.The following code snippet may help you to perform in memory filtering without affecting your default row set-
 CountriesViewImpl countriesViewImpl = (CountriesViewImpl)getCountriesView1();  
 countriesViewImpl.executeQuery();  
 //Define VC for in-memroy filtering  
 ViewCriteria vc = countriesViewImpl.createViewCriteria();  
 vc.setCriteriaMode(ViewCriteria.CRITERIA_MODE_CACHE);  
 ViewCriteriaRow vcr1 = vc.createViewCriteriaRow();  
 vcr1.setAttribute("CountryName", "LIKE A%");  
 vc.add(vcr1);  
 //Override 'protected' findByViewCriteriaForViewRowSet in CountriesViewImpl  
 //and mark it as 'public' so that client can call this API  
 RowIterator rowIter =  
      countriesViewImpl.findByViewCriteriaForViewRowSet(getCountriesView1().getDefaultRowSet(), vc, 50,  
                                                                   ViewObject.QUERY_MODE_SCAN_VIEW_ROWS, null, null);  
 while(rowIter.hasNext()){  
   Row row=rowIter.next();  
      //Work with filterered rows  
 }  


Updated on August 2013

Note: JDeveloper 12C has new feature called Row Finder, which will help you to achieve the above mentioned functionality. It is recommended to us the same if you are on 12C release http://docs.oracle.com/middleware/1212/adf/ADFFD/bcquerying.htm#BCGFFEEI


Comments

  1. For a programmatic VO, how can i handle the VC ?

    ReplyDelete
  2. Take a look at the sample attached in this post http://jobinesh.blogspot.in/2011/06/building-programmatically-managed.html

    ReplyDelete
  3. Hi, I have a question related to in-memory filtering of view rows.

    We have a programmatic View Object which gets data from 3 different rows and populate them in view rows (We have overridden standard methods like executeQueryForCollection..etc)

    The data is displayed in a ADF table.

    Now when the user filters data, normally filter works fine but the web service calls are made every time the filters are applied/removed.

    We would like to avoid making calls to web services when user filters data by setting Query Mode to "QUERY_MODE_SCAN_VIEW_ROWS".

    But what happens is first time filter is applied, the filtered rows are displayed properly but from there on the query collection refers to filtered data only and not the complete data set.

    So when the user removes filter and hits enter again only filtered rows are displayed and not all the rows fetched initially. I am not sure why the query collection looses all the rows and keeps only filtered rows??

    ReplyDelete
  4. Any work around for Srinivas's issue?

    ReplyDelete
  5. How to put these filtered rows back in UI ? like in poupup which shows the filtered rows only?

    ReplyDelete

Post a Comment