Создадим 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).