Oracle Application Framework Controller это простой java класс, являющийся подклассом oracle.apps.fnd.framework.webui.OAControllerImpl.
В контроллере можно определить:
1) реакция на действия пользователя на странице
2) инициализация или изменение свойств элементов страницы (web beans)
Пример java класса контроллера:
package xx.oracle.apps.xx.webui; //путь к java классу
// пути к используемым java классам import oracle.apps.fnd.framework.webui.OAControllerImpl; import oracle.apps.fnd.framework.webui.OAPageContext; import oracle.apps.fnd.framework.webui.beans.OAWebBean; public class XX_TestCO extends OAControllerImpl //расширение класса OAControllerImpl {
public XX_TestCO() // конструктор { }
// вызывается один раз, при инициализации страницы public void processRequest(OAPageContext oapagecontext, OAWebBean oawebbean) { // вызов основного метода super.processRequest(oapagecontext, oawebbean); // далее наш код // ... } // Вызывается при осуществлении действий на странице public void processFormRequest(OAPageContext oapagecontext, OAWebBean oawebbean) { // вызов основного метода super.processFormRequest(oapagecontext, oawebbean); // далее наш код // ... } }
Каким образом осуществляется вызов класса:
1) Браузер выполняет запрос к странице
2) Вызывается oracle.apps.fnd.framework.webui.OAPageBean (основной класс для работы с OAF страницами ).
3) OAPageBean используя название страницы определяет нужный application module.
4) Application module проверяет JDBC connection из connection pool
5) Определяется контекст транзакции
6) Проводится проверка сессии. Если сессия умерла, отображается страница ввода логина и пароля
7) Если сессия пользователя корректна, OAPageBean начинает обрабатывать параметры запроса, определяя HTTP POST или GET
GET Request
1) OAPageBean вызывает processRequest(). Метод контролерра, который связян с верхним элементом страницы (top-level pageLayout bean)
2) Спускаясь вниз по иерархии страницы вызываются все processRequest из связанных контроллеров.
3) OAPageBean строит XML структуру (UIX) для отображния данных и отправляет браузеру.
POST Request
1) OAPageBean проверяет web bean иерархию в памяти. Если не находит пытается пересоздать иерархию методом описаном выше (GET Request)
2) OAPageBean вызывает processFormData() согласно иерархии страницы.
3) Если происходит исключение, обработка останавливается и пользователю выводится сообщение об ошибке.
4) Если отсутствуют переходы на другую страницу, то страница обновляется и отправляется пользователю.
Как создать контроллер
1) Новый контроллер можно создать через контекстное меню элемента типа region. Пункт меню «Set New Controller»
2) Расширить существующий или создать новый контроллер можно через контекстное меню проекта «New Java Class»
this post is very usefull thx!
It’s not that I want to duplicate your internet site, but I really like the design. Could you tell me which theme are you using? Or was it tailor made?
@maria andros
Using theme «iNove 1.4.6 от mg12». The theme is slightly customized.
Привет!
У меня два вопроса
1. Как сделать так чтобы страница или регион (PPR) автоматически периодически обновлялась?
2. На странице есть кнопка, при нажатии на кнопку запускает некий процесс, который должен продолжаться даже после того как пользователь вышел из системы. А при следующем входе считать текущее состояние процесса и может нажать на кнопку чтобы остановить. Что это должен быть за процесс? Подскажите пожалуйста куда смотреть?
и еще. Это не должна быть параллельная программа.
@Arman
1) Обновление страницы OAF обычно реализуется по кнопке.
Но можно попробовать следущий способ через JavaScript
2) В OEBS используются именно параллельные программы. Но можно, например, использовать job.
Спасибо! Попробую
Добрый день.
Подскажите пожалуйста. Я делаю extend на штатный контроллер. Он в свою очередь является экстендом ещё одного штатного контроллера. Моя задача: если определенные поля на форме пустые, вывести сообщение об ошибке и не дать сохранить форму. С полями у меня все получилось, персонализацией подключил свой контроллер, ошибку выдаю так:
Проблема состоит в том, что несмотря на то что ошибка выводится, форма сохраняется и очевидно, продолжается выполнение контроллера на который я делаю экстенд. Подскажите как можно прервать выполнение формы в таком случае?
@Fire
Разобрался. Может кому пригодится. Метод super.processFormRequest(pageContext, webBean); вызывает выполение кода того контроллера, на который делается экстенд. Соответственно в моем случае вызов штатного контроллера нужно было выполнять только после проверки необходимых мне условий.