Создадим View Object для следующего запроса
select empno, ename, job, mgr, hiredate, sal, comm, deptno from scott.emp t where t.deptno = 10; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7782 CLARK MANAGER 7839 09.06.1981 2450.00 10 7839 KING PRESIDENT 17.11.1981 5000.00 10 7934 MILLER CLERK 7782 23.01.1982 1300.00 10
Номер департамента будем передавать в качестве параметра. VO будет только для просмотра данных, т.е. Entity Object создавать не будем.
Создание VO
1) Создаем новый проект или открываем существующий (Создание OAF проекта в JDeveloper)
2) Создаем новый VO через меню «File -> New»
Step 1 of 7:Name
Package: xx.oracle.apps.fnd.framework.appsoracle.server — путь к VO
Все VO должны находиться в конечном каталоге server.
Name: xxEmpVO — имя VO
Read-only Access: CHECK
Step 2 of 7:SQL Statement
Вставляем текст запроса, добавив bind-переменную в условие.
Добавляем условие сортировки
Пролистываем до шага 7
Step 7 of 7:Java
Generate Java File: CHECK
Именнованых переменных у нас в запросе нет, поэтому галка Bind Variable Accessors нам не нужна.
Нажимаем готово
3) Добавляем созданный VO в проект
Заполнение bind-переменной
Открываем созданный класс xxEmpVOImpl
Добавляем новую функцию, которая будет инициализировать bind-переменную
package xx.oracle.apps.fnd.framework.appsoracle.server; import oracle.apps.fnd.framework.server.OAViewObjectImpl; public class xxEmpVOImpl extends OAViewObjectImpl { /**This is the default constructor (do not remove) */ public xxEmpVOImpl() { } public void initQuery(String s) { setWhereClause(null); setWhereClauseParams(null); setWhereClauseParam(0, s); executeQuery(); } }
View Object создан.
А не напишите, как работать с VO, заполняемыми программно? Нужно обновить данные в VO по нажатию на клавишу с типом submitButton, но столкнулся с проблемой передачи параметра из контроллера в VOImpl класс, чтобы определить на какую клавишу было нажатие и обновить VO соответствующими данными
@Sand
Общими словами:
1) Расширяем стандартный контроллер со страницы.
2) В методе processFormRequest перехватываем нажатие на кнопку pageContext.getParameter
3) Вызываем нужный метод из VOImpl для инициализации параметров или указываем bind значения напрямую.
4) При необходимости выполняем executeQuery()
Подскажите, как передать параметр в View object в часть с SELECT а не WHERE…
vo.setWhereClauseParam(0, значение параметра); — в данном случае не подойдет?
@profik777
Подойдет. Bind переменная может быть как в условии (where), так и в параметрах выборки (select).