Tuesday, May 8, 2012

ADF: Programmatic View Criteria


To define view criteria programmatically:
  • VO must contain the attributes which are to be added in where clause.
  • The following method is added in AMImpl java class & method is exposed via client interface.
import oracle.jbo.ViewCriteria;
import oracle.jbo.ViewCriteriaItem;
import oracle.jbo.ViewCriteriaRow;
import oracle.jbo.domain.Number;
...
...

public void filterEmployees(){
   ViewObjectImpl empVOImpl = getEmployeesView1();            
   ViewCriteria vc = empVOImpl.createViewCriteria();
   ViewCriteriaRow vcr = vc.createViewCriteriaRow();            
    
   //criteria for employee id
   ViewCriteriaItem vci1 = vcr.ensureCriteriaItem("JobId");
   vci1.setValue("SH_CLERK");

   //criteria for showing employees whose salary are more than 10000
   ViewCriteriaItem vci2 = vcr.ensureCriteriaItem("Salary");
   vci2.setOperator(">");
   vci2.setValue(new Number(2500));

   //criteria for department
   int[] deptIds = {50,100};
   ViewCriteriaItem vci3 = vcr.ensureCriteriaItem("DepartmentId");
   vci3.setOperator("IN");
   int i = 0;
   for(int deptId: deptIds){
     vci3.setValue(i++, new Number(deptId));
   }

   vc.addElement(vcr);
   empVOImpl.applyViewCriteria(vc);
   System.out.println("Query: " + empVOImpl.getQuery());
   empVOImpl.executeQuery();
}

Above implementation is showing three conditions:
  • Equal (JobId = "SH_CLERK")
  • Greater than (Salary > 2500)
  • IN (DepartmentId in (50,100))

6 comments:

  1. hi great article.
    Please let me know how to add between and operator

    ReplyDelete
  2. Hi, Nice Article. If I want to check <= 500 condition. How do I achieve that?

    vci.setOperator("<=")
    vci.setValue("500");

    or
    vci.setOperator("<");
    vci.setOperator("=");
    vci.setValue(500")

    Kindly help.

    Thanks.


    ReplyDelete
    Replies
    1. vci.setOperator("<=") should work. Please test & let me know as well. Thanks.

      Delete
  3. Hi, Thanks for that sample.
    How can I put condition like:
    JOB_ID IS NULL OR JOB_ID <> 'CLERK'

    Please suggest.

    ReplyDelete
  4. Any idea how do we check for NULL or EMPTY values using this

    ReplyDelete
    Replies
    1. ViewCriteriaItem vci1 = vcr.ensureCriteriaItem("JobId");
      vci1.setValue("");

      May work, let me know too..

      Delete