Пропустить навигацию.
Главная
Разработчикам Oracle Applications

Создание новой формы в Oracle Apps

В этой статье вы выучите шаги, необходимые для создания custom формы в Oracle Apps практически с нуля.

Вопрос: Зачем докучать обучением этого, если Oracle Fusion в будущем заменит Oracle Forms на среду OA Framework?
Ответ: Ну во-первых, я еще не слышал официальное заявление Oracle на этот счет, но я согласен, что скорее всего на смену OracleForms придет Fusion. Однако, более важно, что Oracle будет поддерживать текущий технический стэк бесконечное время, т.е. Release 12 будет поддерживаться в обозримом будущем, согласно лицензии Apps Unlimited. Следовательно, множество клиентов будут продолжать использовать эту технологию десятилетиями. Хотя я не хочу заморачивать голову моему ребенку изучением Oracle Forms :-). 
 
Вопрос: ОК, какие шаги нужны, чтобы создать новую форму с нуля?
Ответ: Ниже вкратце описаны эти шаги.

  1. Скопируйте файл TEMPLATE.fmb из папки $APPL_TOP\au\11.5.0\forms\RU и сохраните у себя в какой-нибудь папке.
  2. Запустите Oracle Forms Builder и откройте этот файл. Если вылетит ошибка FRM-18108, Ошибка в Oracle Forms
     то значит Forms Builder не знает, где находятся библиотеки apps, необходимые для компиляции формы. Нужно скопировать файлы с расширением *.pll из папки APPL_TOP\au\11.5.0\resource и сохраните где нибудь у себя на диске, например в папке appsdev.lib/Resource. Также для компиляции могут понадобиться некоторые формы, такие как APPSTAND.fmb , APPTREE.fmb и т.д., их тоже нужно скопировать в эту папку. А нужно прописать в реестре путь к этим файлам.  Для этого открываем реестр и находим ветку \HKEY_LOCAL_MACHINE\SOFTWARE\Oracle, Прописываем путь к файлам библиотеки Apps затем ищем строковый параметр FORMS60_PATH, он может находится в какой-то ветке HOME0, HOME1 и т.д. После того как нашли этот параметр, добавляем в него путь к нашим библиотекам. Затем опять запускаем Oracle Forms Builder и пытаемся открыть файл TEMPLATE.fmb. Если фал открылся без ошибок, значит все в порядке, сохранем его как XXHELLOAPPS.fmb и продолжаем дальше.
  3. Создайте новое окно, кликнув правой кнопкой на Окна/Создать. Создаем новое окноНазовите это окно как XXHELLOAPPS, и присвойте ему класс свойств «WINDOW» из списка значений.
  4. Создайте новую канву и озаглавьте ее XXHELLOAPPS, убедившись, что ее тип – Основная.
  5. Выберите в свойстве «Окно» канвы окно XXHELLOAPPS, и в свойствах окна «Первичная канва» окно XXHELLOAPPS.Выбираем первичную канву
  6. Теперь создайте блок и назовите его XXHELLOAPPS. Оставим ему тип «CONTROL» для простоты. Для этого нужно в свойстве «Блок Данных Базы Данных»  указать «Нет».Создаем блок
  7. Поднимитесь на уровень формы в Объектном навигаторе и укажите свойство формы «Первый Блок Данных при Перемещении» - XXHELLOAPPS. Первый Блок Данных при Перемещении
  8. Откройте триггер PRE-FORM на уровне формы и пропишете окно XXHELLOAPPS в коде (строчка должна выглядеть примерно так:
    app_window.set_window_position('XXAPPSHELLO', 'FIRST_WINDOW'); 
    Этим мы определяем, какое окно будет показано первым при открытии формы.
  9. В теле пакета APPS_CUSTOM найдите такую строчку:
    if (wnd = '<your first window>') then
        app_window.close_first_window;
    Замените <your first window> на XXAPPSHELLO.
  10. Добавьте метку и поле с наименованием «Hello_World» к этому блоку. Для этого кликаем правой кнопкой в объектном навигаторе на блоке XXHELLOAPPS и выбираем пункт меню «Редактор разметки». Открываем редактор разметки   Затем указываем какую канву мы хотим редактировать – XXAPPSHELLO. В редакторе разметки на панели инструментов нажимаем на кнопку с буквой «Т» и на канве размещаем текстовый элемент. Пусть он будет содержать традиционные слова «Hello World». Размещаем метку на канве
  11. Сгенерируйте форму на компьютере, нажав горячие клавиши Ctrl-T. Этим мы убедимся, что ничего критически важного мы не упустили.
  12. Залейте форму через FTP в папку $XXPO_TOP/forms/RU. (Для американской локали - $XXPO_TOP/forms/US). У вашей компании может быть другая папка для приложений разработчиков.
  13. Зайдите в папку $XXPO_TOP/forms/RU и сгенерируйте форму XXHELLOAPPS.fmb с помощью утилиты f60gen.
  14. В результате мы получим имполняемый файл XXHELLOAPPS.fmx.
  15. Заходим в Oracle Apps, выбираем полномочие разработчика. Открываем форму регистрации новой формы, Меню: Приложение/Форма. Регистрируем форму.
  16. Регистрируем функцию формы. Как регистрировать функцию написано в этой статье. Эта функция должна быть зарегистрирована для приложения «XX Purchаsing». (Или другого custom приложения).
  17. Теперь необходимо добавить пункт меню, чтобы эта функция была доступна для определенного тестового полномочия. Все, теперь вы можете открыть форму в своем тестовом полномочии. Созданная нами форма
     
     

Теперь несколько важных замечаний:

  • Если у вас блок основан на таблице, и если в этом блоке есть несколько описательных полей, тогда лучше не пытайтесь получить значения этих полей в POST_QUERY триггере. Вместо этого, создайте представление в схеме apps и назначьте это представление в качестве основы для этого блока. Преимущество в том, что пользователь сможет делать запрос по этим описательным полям, если потребуется. Минус – вам придется реализовать DML логику собственноручно, замещая триггеры ON_INSERT, ON-UPDATE, ON-DELETE и ON-UNLOCK.
  • Для каждого блока в форме создайте пакеты и тело пакетов на уровне формы. Ваши триггеры в блоке/элементах блока будут вызывать процедур из этих пакетов.
  • Старайтесь не городить много PL/SQL кода в форме. Выносите сложную логику на уровень пакета базы данных.
  • Старайтесь без особой необходимости не использовать глобальные переменные. Отдавайте преимущество переменным пакета формы.
  • В блоке содержащим несколько записей (который отображается в виде таблицы) всегда добавляйте поле для указателя текущей записи (Current Record Indicator).

Оригинал статьи


Warning: INSERT command denied to user 'appsdev_base'@'82.197.131.12' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '<em>INSERT command denied to user &amp;#039;appsdev_base&amp;#039;@&amp;#039;82.197.131.12&amp;#039; for table &amp;#039;accesslog&amp;#039;\nquery: INSERT INTO accesslog (title, path, url, hostname, uid, sid, timer, timestamp) values(&amp;#039;Создание новой формы в Oracle Apps&amp;#039;, &amp;#039;node/37&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;38.103.63.56&amp;#039;, 0, &amp;#039;f2767991fa9882f2e8c2efd201f37473&amp;#039;, 232, 1231301708)</em> в файле <em>/home/www/appsdev.com.ua/includes/database.mysql.inc</em> в строке <em>172</em>.', 2, '', 'http://appsdev.com.ua/create-new-custom-form-in-oracle-apps.htm in /home/www/appsdev.com.ua/includes/database.mysql.inc on line 172

Warning: INSERT command denied to user 'appsdev_base'@'82.197.131.12' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '<em>INSERT command denied to user &amp;#039;appsdev_base&amp;#039;@&amp;#039;82.197.131.12&amp;#039; for table &amp;#039;sessions&amp;#039;\nquery: INSERT INTO sessions (sid, uid, cache, hostname, session, timestamp) VALUES (&amp;#039;f2767991fa9882f2e8c2efd201f37473&amp;#039;, 0, 0, &amp;#039;38.103.63.56&amp;#039;, &amp;#039;messages|a:1:{s:5:\\&amp;quot;error\\&amp;quot;;a:1:{i:0;s:482:\\&amp;quot;user warning: INSERT command denied to user &amp;amp;#039;appsdev_base&amp;amp;#039;@&amp;amp;#039;82.197.131.12&amp;amp;#039; for table &amp;amp;#039;accesslog&amp;amp;#039;\\nquery: INSERT INTO accesslog (title, path, url, hostname, uid, sid, timer, timestamp) values(&amp;amp; in /home/www/appsdev.com.ua/includes/database.mysql.inc on line 172