воскресенье, 26 января 2014 г.

Запуск критериев (ViewCriteria) с Java кода в JDeveloper

     В Oracle ADF существует возможность создания критериев для сформированных  нами ViewObject-ов, чтобы при необходимости выполнять запросы к базе   по определенным  полям.  В этой статье будет описано создание этих критериев и вызов их с Java кода.Для этого в приложение созданное в прошлой статье " Использование af:iteraror вместо af:table в JDeveloper "  добавим два критерия : Фильтр сотрудников по номеру отдел и фильтр по дате рождения. Приступим.
     Зайдите во VO  EmpView и перейдите во вкладку Query. Там находится три секции:
  • Query - в ней находится запрос по которому формируется VO
  • Bind Variables - в эту секцию добавляются параметры которые  будут использоваться в критериях
  • View Criteria -секция в которой создаются критерии.



      Создайте 2 View Criteria  как показано на картинках ниже:
         EmpViewCriteria (где DeptNo равно параметру deptVal с типом Integer)
         EmpViewCriteria1 (где Hiredate больше или равно параметру dateVal с типом Date)


     Мы создали критерии, теперь нужно создать методы для их вызова.Для этого  во VO EmpView зайдите в раздел Java и сгенерируйте  VO класс 

     Далее добавьте туда следующий код в появившийся файл  EmpViewImpl :


    public void DeptNoViewCriteria(Integer deptNo) {
        ensureVariableManager().setVariableValue("deptVal", deptNo);
        ViewCriteria vc = getViewCriteria("EmpViewCriteria");
        vc.resetCriteria();
        applyViewCriteria(vc);
        executeQuery();
    }

    public void DateViewCriteria(Date dateV) {
        ensureVariableManager().setVariableValue("dateVal", dateV);
        ViewCriteria vc = getViewCriteria("EmpViewCriteria1");
        vc.resetCriteria();
        applyViewCriteria(vc);
        executeQuery();
    }

     Этот  код создает два метода  которые вызывают критерии с необходимыми нам входящими параметрами. Теперь что бы эти методы были доступны в Managed Beans  необходимо создать для них Client Interface.Это делается в разделе Java во VO EmpView  как указано на рисунке:


     После этого автоматически сгенерируются два файла  EmpView.java (интерфейс методов)и EmpViewClient(для вызова метода в beans).java


     Если раскрыть EmpView1 в DataControls, то можно увидеть созданные нами методы.


     Теперь нам осталось   добавить методы в Bindings  и вызвать их. Для этого перейдите на jspx страницу созданную в прошлой статье, перейдите во вкладку Bindings и добавьте наши методы:  


     Вернитесь на вкладку Design  и создайте  два CommandButton, один InputText и один InputDate. Для InputText  и InputDate создайте биндинги(например deptNob и dateB)


     В обработку событий нажатия кнопок добавьте следующий код:


 public void filterDeptAction(ActionEvent actionEvent) {
  BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry();
  OperationBinding applyFilter =bindings.getOperationBinding("DeptNoViewCriteria");       
  applyFilter.getParamsMap().put("deptNo",Integer.parseInt((String)deptNob.getValue()));
  applyFilter.execute();
    }

 public void filterDateAction(ActionEvent actionEvent) {
   BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry();
   OperationBinding applyFilter =bindings.getOperationBinding("DateViewCriteria");       
   applyFilter.getParamsMap().put("dateV", dateB.getValue());
   applyFilter.execute();
    }

Готово : )