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))

ADF: Programmatically adding partial trigger/target


To refresh component programmatically:
  • Bind the component in bean. e.g.
<af:outputtext binding="#{pageFlowScope.BackingBean.outputText}" id="ot1" 
               value="outputText1">
</af:outputtext>

  • Wherever required use following API inside bean:
AdfFacesContext.getCurrentInstance().addPartialTarget(getOutputText());

Monday, May 7, 2012

ADF: Access attribute binding

import oracle.adf.model.BindingContext;
import oracle.adf.model.binding.DCBindingContainer;

import oracle.binding.AttributeBinding;
...
...
    DCBindingContainer bindings = 
        ((DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry());
    AttributeBinding attrBinding = 
        (AttributeBinding) bindings.getControlBinding("AttributeNameFromBindings");

    //get input value
    attrBinding.getInputValue();
    //get label
    attrBinding.getLabel();
Similiarly, we can cast bindings.getControlBinding("AttributeNameFromBindings") to:
  • JUCtrlListBinding: for getting value from list binding.