Wednesday, June 27, 2018

In Memory Filtering Without Affecting Default Row Set

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




visit link download