Создание приложения в Oracle Apex

  • В данной статье мы рассмотрим основные аспекты разработки приложения в Oracle Apex. Перед началом работы нам необходимо создать приложение в Oracle Apex. Для этого заходим в основной интерфейс разработки и нажимаем «Create» на главной странице.
  • Далее выбираем тип приложения. В нашем случае это будет «Desktop» версия приложения.

  • На следующем шаге указываем схему в БД, в которой будет храниться приложение, его название, номер и основную тему.

  • На этапе «Pages» уже можно создать страницы для нашего приложения, но мы рассмотрим их создание отдельным шагом.

  • Shared Components мы пропускаем, т.к. у нас нет компонентов для копирования из других приложений.

  • Производим настройку основных атрибутов приложения. Такие как язык приложения и формат даты, времени.

  • Проверяем основные настройки приложения и подтверждаем его создание.

  • Приложение создано, и мы находимся в разделе его редактирования. Данная среда является основной для дальнейшей разработки и редактирования приложения. Но уже сейчас мы можем запустить наше приложение с помощью кнопки «Run Application».

  • Наше запущенное приложение. Пока что оно пустое, но уже скоро он будет обрастать новыми страницами и компонентами.

Создание страницы в приложении Oracle Apex

  • Наше первое приложение создано, и мы находимся в основном разделе его редактирования. Как видим, в нём уже создано две страницы (домашняя и страница авторизации в приложение). Попробуем создать новую, для этого нажимаем «Create Page».

  • Выбираем тип страницы. Это может быть пустая страницы, отчет, форма, график и т.д. Сейчас создадим пустую страницы, а далее рассмотрим создание регионов на новой странице.

  • Присваиваем имя для страницы.

  • На шаге «Navigation Menu» можно привязать страницу к разделу в навигационном меню.

  • Подтверждаем создание страницы.

  • Теперь список страниц в приложении пополнился новой страницей.
  • Если выберем нашу страницу из списка выше, то попадем в основное меню создания, редактирования и обзор всех компонентов страницы. Для более наглядного редактирования компонентов на странице можно использовать «Page Designer», для этого необходимо перейти в соответствующий раздел.

  • Внешний вид раздела «Page Designer» выглядит следующим образом:


Создание графика (Chart) в Oracle Apex

  • Для создания графика в Oracle Apex на новой странице, в разделе редактирования страницы необходимо создать регион с типом «Chart». Регионом в Oracle Apex является некий контейнер содержащий набор информации (графики, отчеты, кнопки, формы и др.).

  • На следующем этапе выбираем тип отображения графика на странице (Flash/HTML), в нашем случае это будет HTML5 и тип графика – гистограмма.

  • Затем производится настройка атрибутов региона.

  • Указываем название для графика. Также на данном шаге можно выбрать отображение значений на графике, имя аксис, отображение легенды, сетки и цвет заливки графика.

  • На этапе «Source» задаем сам запрос для построения графика. На этом же этапе можно указать максимальное количество выводимых строк для построения графика и сообщение, если данных для построения графика будет не хватать.

  • После того как мы создали регион, в меню «Chart Attributes» можно задать дополнительные настройки графика, такие как размеры графика, цветовые настройки, параметры отображения элементов графика, настройки легенды, создание второй серии графика, а также Drill Down до следующего уровня графика и многое другое.

Создание интерактивного отчёта в Oracle Apex

  • На странице создаем регион с типом «Report».

  • Выбираем тип «Interactive Report», т.к. ряд возможностей работы с ним шире, чем у классического отчета.

  • Задаем название региона.

  • На этапе «Source» задается текст запроса для отчета. Его можно указать как привычным скриптом, так и построить через «Query Builder» выбрав пункт «Table».

  • На последнем этапе можно выбрать схему авторизации для данного региона (если были созданы заранее).

  • После создания отчета запустим приложение и посмотрим на результат. В отличие от классического отчета в интерактивном имеются функции сортировки и фильтрации данных, а также имеется возможность быстрого построения графиков на основе данных в отчете.

  • Для настройки дополнительных атрибутов отчета необходимо зайти в настройки региона, кликнув на его название.

Работа с оглавлением приложения

  • Для демонстрации создания и редактирования многоуровневого оглавления в приложении Oracle Apex, создадим несколько страниц, где в названии будет указан уровень в оглавлении.

  • В разделе «Shared Components» выбираем раздел «Navigation Menu».

  • На странице «List Details» необходимо добавить запись в меню навигации. Для этого в пункте «Page» выбираем страницу, на которую будет ссылаться раздел меню, а в пункте «List Entry Label» указываем название пункта меню.

  • Для добавления дочерних разделов меню, для новой страницы повторяем предыдущий шаг, но в качестве родительской страницы, в пункте «Parent List Entry», выбираем необходимый раздел.

  • По завершению работы с добавлением разделов меню, в структуре «List Details» мы видим названия разделов, родительский пункт меню и уровень в меню навигации.

  • Теперь меню навигации в нашем приложении выглядит следующим образом.

  • Как видите, разработка приложений в Oracle Apex довольно удобная и простая, что простыми действиями позволяет создавать интересные приложения. Следите за новостями на – будет еще много полезных статей.

Oracle APEX (Application Express) - средство разработки и выполнения web-приложений. Позволяет очень быстро проходить весь процесс разработки web-приложения. С помощью APEX можно создавать как небольшие приложения с ограниченным количеством пользователей, так и масштабные приложения корпоративного уровня с тысячами пользователей. Данная среда разработки сама по себе добавляет лишь 0.04 секунды к каждому запросу к HTTP-серверу; поэтому насколько хорошо будет масштабироваться приложение зависит, в большей степени, от грамотности и эффективности SQL-запросов, написанных разработчиком приложения.

Oracle Application Express состоит из двух составляющих:

  • репозиторий метаданных, который хранит описание приложений (описание страниц, элементов управления и т.д.);
  • «движок», который отражает и обрабатывает страницы.

Репозиторий метаданных располагается непосредственно в базе данных Oracle и физически состоит из набора таблиц и некоторого количества PL/SQL кода. При установке APEX создается отдельный Oracle пользователь/схема - FLOWS_<версия_apex>.

В «обязанности» движка Application Express входят следующие функции:

  • управление состоянием сессии;
  • аутентификация;
  • авторизация;
  • управление страницами;
  • обработка валидаций.

Движок Application Express реализован на PL/SQL и доступен через web-браузер. Приложения «собираются» в режиме реального времени из репозитория метаданных. Создание новых или расширение имеющихся приложений не вызывает необходимости в дополнительном коде. Вместо этого создаются новые или изменяются имеющиеся метаданные, хранимые в таблицах Oracle.

Для доступа к приложениям/движку используется Oracle HTTP Server (Apache) и mod_plsql.

Управление состоянием сессии выполняется асинхронно непосредственно в базе данных, что гарантирует:

  • минимальное использование ресурсов CPU сервера;
  • не использование Dedicated соединения.

Кроме того, каждая страница выводит результаты в отдельной сессии базы данных, что минимизирует использование ресурсов, так как они необходимы только при «сборке» страницы из метаданных движком Application Express.

Oracle Apex следует использовать, если

  • Необходимо разработать приложение под БД Oracle;
  • Есть PL/SQL разработчики (они смогут быстро освоить данную технологию);
  • Разрабатываемое приложение достаточно линейно. В том смысле, что не нужно будет реализовывать механизмы такого рода, как, например, повторное использование кода;
  • Для разрабатываемого приложения снижение нагрузки на сервер важнее, чем быстродействие пользовательского интерфейса. Хотя и в быстродействии интерфейса можно добиться существенных результатов при использовании JavaScript (но тогда пункт быстро и просто для pl/sql разработчиков теряет свою актуальность).

Из недостатков: в Oracle Apex отсутствуют встроенные механизмы версионности. Единственный способ - постоянно делать экспорт приложения или отдельных страниц и хранить их в файлах. Однако, таким способом можно при необходимости откатить изменения, но нельзя сравнивать код.

Ну вот и я собрался писать блог, посвященный Oracle APEX. Информация рассчитана в основном на новичков, только начинающих осваивать APEX.

В первом посте - общая информация. Что такое APEX, с чем его едят, а так же где и как.

Что это?

APEX - это IDE для веб-разработки. Разработчик - Oracle. Полное название - Application Express. В настоящий момент доступна версия 4.1, IDE бесплатна и входит в дистрибутив Oracle Database 11g. Когда-то давно (до второй версии включительно) носила название "HTML DB", с версии 2.2 получила свое теперешнее название.
Ближайшим широко известным аналогом APEX является MS Access. APEX точно также позволяет сделать простенький интерфейс для хранения данных в базе, и точно также почти не требует познаний в программировании, если нужно сделать что-то совсем простое. Есть графический построитель запросов - возможно, даже чуть-чуть более удобный, чем в Access. Для тех, кто уже давно не новичок в веб-разработке или в разработке баз данных, есть возможность расширить функциональность приложения с помощью PL/SQL или JavaScript и добавить интерактивности с помощью AJAX.
Есть стандартные элементы управления для ввода данных: поля для ввода, выпадающие списки, календари и т. п.
Есть огромное количество стандартных форм - отчетные формы, формы для редактирования одной записи из таблицы, формы для редактирования нескольких записей одновременно, master-detail формы, пустые формы, содержимое которых можно генерировать с помощью PL/SQL кода, средства для рисования графиков и диаграмм и многое многое другое.


Как это попробовать?

Самый простой способ: зайти на apex.oracle.com , зарегистрироваться, заполнить форму, в которой указать имя, email и зачем вам нужен доступ к APEX (говорят, можно писать практически что угодно - в пределах разумного). Через несколько часов вам на email придет ответ, в котором будет указан ваш логин, временный пароль и workspace. Объем выделяемого места небольшой - 5 МБ, но на первое время и для ознакомления хватит. Если вы не будете проявлять никакой активности, то через 2 месяца workspace будет удален, а за неделю до удаления вы получите уведомление.

Способ чуть сложнее - можно установить APEX у себя. Скачайте с сайта Oracle VirtualBox , зарегистрируйтесь и скачайте готовый образ системы для виртуальной машины. Качать придется 4 ГБ, но зато вы получите уже готовую к использованию систему, состоящую из Oracle Linux, Oracle Database 11g Release 2 Enterprise Edition, Oracle APEX (правда, только версии 4.0) и кучи средств разработки.
По умолчанию в этой системе заведен один пользователь, имя и пароль - "oracle".
Для начала нужно будет только запустить консоль, зайти в папку с APEX (/home/oracle/apex), запустить sqlplus:
/sqlplus / as sysdba
и выполнить скрипт для сброса пароля администратора APEX:
@apxchpwd.sql;
Все. APEX установлен и готов к бою.
Лицензионное соглашение разрешает использовать эту систему только для ознакомления и разработки, для промышленной эксплуатации - либо покупайте лицензии, либо переходите на экспресс-версию.

Способ еще чуть сложнее - установить Oracle самостоятельно. Гугл вам в помощь - я слишком ленив для этого и ни разу сам не пробовал ставить (да и незачем, в общем-то, пробовать).


Где про это почитать?

Книги. На русском нет - увы. Да и на английском всего четыре штуки:
1. "Beginning Oracle Application Express", автор - Rick Greenwald, ISBN: 978-0-470-38837-2.
2. "Pro Oracle Application Express", авторы - John Edward Scott и Scott Spendolini, ISBN-10 (pbk): 1-59059-827-X, ISBN-13 (pbk): 978-1-59059-827-6, ISBN-13 (electronic): 978-1-4302-0205-9.
3. "Oracle APEX 4.0 Cookbook", авторы - Marcel van der Plas и Michel van Zoest, ISBN: 978-1-849681-34-6.
4. "Expert Oracle Application Express", авторы - их много, всех перечислять не буду. Подробнее о книге - .

Форумы.
На английском: форум на сайте Oracle .
На русском: на sql.ru есть подфорум по Oracle APEX . Другие мне не известны.

Блоги.
Oracle заботится о развитии сообщества специалистов: вот есть список блогов, посвященных Oracle APEX (меня там пока нет;)). В табличке на данный момент перечислено 73 блога, а также указан язык, на котором ведется блог (есть один русскоязычный). Ссылка на этот список есть в самом апексе - прямо на странице логина.
Из неуказанных там есть этот блог и еще два сайта: "Русскоязычное сообщество Oracle APEX" и applicationexpress.ru . На последнем есть 17 видеоуроков. Информации в целом немного, но посетить стоит обязательно.


Хостинги.

Да, они есть! Цены в среднем по больнице - от 50 долларов за минимальный аккаунт (у русскоязычного хостера примерный рублевый эквивалент этой суммы - 1500 рублей). Есть один хостинг, у которого цены начинаются с 10 долларов (им-то я и пользуюсь;)). Список хостингов можно спросить у гугла, а можно поискать и на сайте Oracle . Ссылки на прочие интересные вещи есть .

Введение

Oracle Application Express (APEX) – это средство быстрой разработки Веб-приложений на основе БД Oracle. Oracle APEX позволяет создавать приложения с использованием веб-браузера (среда разработки представляет собой веб-приложение) и не требует от разработчика большого опыта программирования. Со стороны конечного пользователя приложения требуется только браузер и доступ к БД Oracle, на которой запущен APEX.

Oracle APEX инсталлируется в БД Oracle и представляет собой набор таблиц с данными и PL/SQL код. Запуск приложения, построенного с помощью APEX, аналогичен запуску самой среды разработки APEX и представляет собой следующий процесс: браузер посылает URL запрос, который транслируется в соответствующий PL/SQL-вызов APEX. После того, как БД выполнит PL/SQL код, результаты возвращаются обратно в браузер в виде HTML.

Возможны два варианта архитектуры Oracle APEX, зависящие от версии сервера Oracle:

· Версии до 11.1 требуют установки Oracle HTTP Server (Apache) с mod_plsql:

https://pandia.ru/text/78/193/images/image002_220.gif" width="276 height=118" height="118">

Встроенный PL/SQL шлюз выполняет функции веб-сервера и обеспечивает необходимую инфраструктуру для создания динамических веб-приложений. Использование такого шлюза упрощает архитектуру и устраняет промежуточный слой.

Приложения разрабатываются в рамках т. н. рабочих областей (workspaces). Рабочая область (workspace) – это виртуальная частная база данных , которая позволяет множеству пользователей работать с одной инсталляцией Oracle Application Express, обеспечивая при этом приватность пользовательских объектов и приложений.

В Oracle Application Express выделяются следующие роли пользователей:

· Администраторы рабочих областей (Workspace administrators) – пользователи, которые выполняют задачи, специфичные для управления рабочими областями – управление учетными записями пользователей, мониторинг активности, просмотр лог-файлов.

· Разработчики – пользователи, которые создают и редактируют приложения. Разработчики могут иметь отдельные рабочие области или разделять общие.

· Конечные пользователи – не имеют привилегий разработчиков.

· Администраторы Oracle Application Express – это суперпользователи, которые управляют всеми ресурсами экземпляра Oracle Application Express с помощью сервисов Application Express Administration Services.

ü Object Browser – позволяет просматривать, создавать, изменять, читать содержимое и удалять объекты БД.

ü SQL Commands – позволяет запускать команды SQL и PL/SQL, скрипты и сохраненные запросы.

ü SQL Scripts – позволяет создавать, редактировать, просматривать, запускать и удалять файлы скриптов, а также загружать файлы скриптов из и в локальную файловую систему.

ü Query Builder – позволяет искать и отфильтровывать объекты БД, выбирать объекты и столбцы, создавать связи между объектами, просматривать отформатированные результаты запросов, сохранять запросы. Графический интерфейс построителя позволяет делать это, обладая минимальными знаниями SQL.

· Utilities позволяет импортировать и экспортировать данные из БД, генерировать DDL-код, просматривать отчеты, восстанавливать удаленные объекты БД и выполнять другие задачи.

Каждое приложение в APEX представляет собой коллекцию страниц (page), связанных друг с другом при помощи вкладок (tabs), кнопок (buttons) или гипертекстовых ссылок (hypertext links). Страница – это основной строительный блок приложения. Страницы также содержат элементы пользовательского интерфейса – вкладки, списки (lists), кнопки, элементы (items) и области (regions).

2. Щелкните по иконке Application Builder .

3. Щелкните по кнопке Create > . Появится мастер создания приложения (Create Application Wizard).

Обратите внимание на последовательность блоков в левой части страницы мастера, которая отображает последовательность шагов. Выделенный блок показывает шаг, который в данный момент выполняется.

4. На шаге Method оставьте Create Application и щелкните по кнопке Next .

5. На шаге Name :

а. Name – введите имя компании.

б. Application – оставьте автоматически сгенерированное значение (это уникальный идентификатор приложения).

в. Create Application – оставьте From scratch (с нуля).

г. Schema – выберите схему БД, содержащую объекты, с которыми будет работать приложение (уточните у преподавателя).

6. На шаге Pages установите следующее в секции Add Page :

а. Select Page Type – оставьте значение по умолчанию – Blank

Обратите внимание на пояснения опций, которые появляются в правой части страницы.

б. Page Name – введите Главная.

в. Щелкните по кнопке Add Page .

Созданная страница появилась в списке страниц приложения в верхней секции (Create Application ). Обратите внимание, что область Add Page по-прежнему отображается, так что Вы можете продолжать добавлять страницы в приложение.

Затем добавьте страницу с отчетом о подразделениях, основанном на таблице OEHR_DEPARTMENTS.

7. В секции Add Page установите следующее:

а. Select Page Type – выберите Report

б. Subordinate to Page – выберите Главная (это необходимо для определения иерархии страниц в приложении).

в. Page Source – оставьте значение Table .

г. Table Name – выберите OEHR_DEPARTMENTS.

В списке отображаются все таблицы и представления схемы, с которой ассоциировано приложение.

д. Implementation – выберите Classic.

е. Include Analysis Pages – оставьте окошко пустым.

Если установить флажок, то мастер попросит ввести данные о дополнительных сводных отчетах и диаграммах, которые Вы можете добавить к этой странице.

ж. Щелкните Add Page .

Обратите внимание, что страницы, перечисленные в секции Create Application, отображают иерархию страниц в приложении.

и. В секции Page Definition измените Page Name на Подразделения.

к. Щелкните Apply Changes .

л. В секции Create Application щелкните по кнопке Next > .

После добавления страниц необходимо определить некоторые параметры уровня приложения.

8. На шаге Tabs выберите No Tabs и щелкните Next. Это означает, что в приложении не будет автоматически создано навигации на основе вкладок (однако вкладки можно добавить позже вручную).

9. На шаге Shared Components оставьте No и щелкните Next .

10. На шаге Attributes:

а. Authentication Scheme оставьте Application Express .

б. Language – выберите Russian (ru) .

в. Date Format – введите маску DD. MM. YYYY

г. щелкните Next .

11. На шаге User Interface выберите тему Theme 18 и щелкните Next .

12. На шаге Confirm проверьте введенные данные и щелкните Create .

Две страницы, которые Вы создали – Главная и Подразделения – по умолчанию отображаются в виде иконок на странице приложения в Application Builder. Обратите внимание, что Oracle Application Express автоматически добавил в приложение страницу Login.

Для того, чтобы просмотреть приложение, необходимо запустить его. Вы можете запустить отдельно каждую страницу или приложение целиком. Когда Вы запускаете страницу или приложение, Application Express на основе данных, сохраненных в БД, динамически визуализирует его в виде HTML страниц.

Запустить приложение можно, щелкнув по иконке Run Application :

Запустить отдельную страницу можно, щелкнув по иконке Run Page :

13. На домашней странице приложения щелкните Run Application .

14. На появившейся странице регистрации введите название Вашей рабочей области, имя пользователя и пароль.

Появится главная страница Вашего приложения.

Также обратите внимание на панель инструментов разработчика внизу страницы. Данные ссылки появляются, когда приложение запускается в среде разработки.

Появится страница Подразделения.

Обратите внимание, что приложение содержит элементы и свойства, которые позволяют быстро выполнять определенные задачи:

· Breadcrumbs – отображают иерархию и путь страницы в виде ссылок. Щелкая по ссылкам, можно перемещаться по иерархии:

https://pandia.ru/text/78/193/images/image014_50.jpg" width="97" height="43">.

16. Изучите возможности Вашего приложения, выступая в роли пользователя.

Теперь необходимо изменить запрос, на котором основан отчет о подразделениях так, чтобы он включал данные из таблицы OEHR_EMPLOYEES, а затем создать отчет о работниках и форму для редактирования данных о работнике.

Для того чтобы изменить отчет Подразделения:

17. Откройте определение страницы (Page Definition) Подразделения:

Страница – это основной строительный блок приложения. Страницы содержат элементы пользовательского интерфейса – вкладки, списки (lists), кнопки, элементы (items) и области (regions).

Обратите внимание на секцию Items . В ней перечислены элементы управления, содержащиеся на странице.

18. В разделе Page Rendering найдите секцию Regions и щелкните по ссылке Подразделения.

19. Найдите секцию Source и изучите запрос в поле Region Source . Обратите внимание на параметр:P2_REPORT_SEARCH – это ссылка на значение, содержащееся в одноименном текстовом поле. Благодаря ему запрос возвращает записи только о тех подразделениях, в названиях которых содержится искомая подстрока (если подстрока непустая).

20. Замените текст запроса в текстовом поле Region Source на следующий:

SELECT d. department_id "Department ID",

d. department_name "Department Name",

count("x") "Number of Employees",

substr(e. first_name,1,1)||". "|| e. last_name "Manager Name",

c. country_name "Location"

FROM oehr_departments d,

oehr_employees e,

oehr_locations l,

oehr_countries c,

oehr_employees e2

WHERE d. manager_id = e. employee_id

AND d. location_id = l. location_id

AND d. department_id = e2.department_id

AND l. country_id = c. country_id

AND instr(upper(d. department_name),upper(nvl(:P2_REPORT_SEARCH, d.department_name))) > 0

GROUP BY d. department_id, d. department_name,

substr(e. first_name,1,1)||". "||e. last_name, c. country_name

21. Изучите текст нового запроса. Обратите внимание на использование групповой функции count() и предложение GROUP BY.

22. Щелкните по кнопке Apply Changes .

23. Запустите страницу, щелкнув по иконке . Отобразится видоизмененный отчет о подразделениях:

Обратите внимание на 3 новых столбца: Number Of Employees, Manager Name (вместо идентификатора теперь отображается первая буква имени и фамилия) и Location.

Теперь необходимо создать отчет, который будет отображать данные о работниках, и форму, позволяющую создавать, изменять и удалять записи о работниках.

24. Перейдите на домашнюю страницу приложения в Application Builder.

25. Щелкните по кнопке Create Page > .

26. На шаге Page :

а. Выберите Form и щелкните Next > .

б. Выберите Form on a Table with Report и щелкните Next > .

Эта опция создает две страницы: отчет и форму, основанные на одной таблице или представлении.

27. На шаге Identify Table or View :

а. В поле Table/View Owner оставьте значение по умолчанию и щелкните Next > .

б. В поле Table / View Name выберите OEHR_EMPLOYEES и щелкните Next > .

28. На шаге Define Report Page :

а. Implementation – выберите Classic.

б. Breadcrumb – выберите Breadcrumb. Появится секция Create Breadcrumb Entry .

в. В Select Parent Entry выберите ссылку на страницу Главная.

г. В полях Entry Name , Page Name и Region Title измените значение на Работники.

д. щелкните Next > .

29. На шаге Define Report Page :

а. В Tab Options оставьте опцию Do not use tabs и щелкните Next > .

б. В списке Select Column (s ) , нажав и удерживая клавишу Ctrl выберите следующие столбцы:

· COMMISSION_PCT

Выбранные столбцы появятся на странице отчета.

Щелкните Next > .

в. В Edit Link Image оставьте иконку, выбранную по умолчанию, и щелкните Next > .

г. В полях Page Name , Region Title и Entry Name введите Создать/Редактировать Работника. Щелкните Next > .

д. В поле Primary Key оставьте значение по умолчанию (EMPLOYEE_ID) и щелкните Next > .

е. В Define the source for the primary key columns выберите Existing Sequence , а в появившемся внизу поле Sequence выберите OEHR_EMPLOYEES_SEQ.

OEHR_EMPLOYEES_SEQ – это объект БД «сиквенс» (последовательность), предназначенный для генерации уникальных числовых значений, которые используются в качестве значений суррогатных идентификаторов.

Щелкните Next > .

ж. В списке Select Column (s ) выберите все столбцы и щелкните Next > .

Эти столбцы появятся в форме Создать/Редактировать Работника.

з. В блоке Identify Process Options оставьте все как есть (значения Yes для операций Insert , Update и Delete ) и щелкните Next > .

Это позволит пользователям добавлять, изменять и удалять записи о работниках.

30. На шаге Confirm проверьте выбранные Вами атрибуты страниц формы и отчета и щелкните по кнопке Finish .

31. Запустите созданную страницу, щелкнув по иконке Run Page. Отобразится отчет Работники:

· Иконка редактирования, которую Вы выбрали, появляется в каждой записи. Иконка представляет собой ссылку, щелчок по которой приводит к переходу на страницу формы Создать/Редактировать Работника, в которой Вы можете изменить запись о работнике.

· В правом верхнем углу мастером была создана кнопка Create , щелчок по которой также приводит к переходу на страницу формы Создать/Редактировать Работника, на которой Вы можете создать запись о новом работнике в таблице OEHR_EMPLOYEES.

· Отчет Работники включает в себя те столбцы, которые Вы выбрали. Oracle Application Express на основе Вашего выбора создал соответствующий SQL-запрос, который возвращает эти данные.

32. Для того чтобы просмотреть форму для редактирования, которая была создана вместе с отчетом, щелкните по иконке редактирования в какой-либо записи отчета Работники. Появится форма Создать/Редактировать Работника:

Обратите внимание на следующие моменты:

· Форма содержит кнопки Cancel , Delete и Apply Changes (при создании записи отображаются кнопки Cancel и Create ).

· Обязательные столбцы (на которые в БД наложено ограничение целостности Not Null ) выделены цветом.

· Рядом с полем Hire Date отображается иконка календаря , т. к. тип данных соответствующего столбца – DATE. Щелчок по этой иконке приводит к появлению окна с календарем.

Далее Вы создадите PL/SQL функцию, которая вычисляет зарплату работника. Затем добавите столбец «Зарплата/Год» для отображения результатов этих вычислений в отчете о работниках, восстановите в столбце иконку редактирования и ссылку на страницу
Создать/Редактировать Работника, назначите всем столбцам русскоязычные заголовки и измените формат вывода числовых столбцов.

33. Щелкните по иконке SQL Workshop , а затем SQL Commands .

Появится окно, в котором Вы можете запускать SQL и PL/SQL код в БД.

34. Введите следующий скрипт:

CREATE OR REPLACE FUNCTION calc_remuneration(

salary IN number, commission_pct IN number) RETURN NUMBER IS

RETURN ((salary*12) + (salary * 12 * nvl(commission_pct,0)));

Этот PL/SQL код создает функцию calc_remuneration, принимающую входные (IN) числовые (number) параметры salary (размер месячного оклада) и commission_pct (комиссионный процент) и возвращающую число. Функция вычисляет размер годового вознаграждения работника с учетом процентов.

Обратите внимание на функцию nvl, которая проверяет значение первого параметра на null и в случае, если первый параметр равен null, возвращает значение второго параметра. Это важно в данном случае, т. к. результатом любых арифметических операций со значением null является null. А в данном случае, используя nvl, мы интерпретируем неопределенное значение комиссионного процента (отсутствие комиссионного процента у работника) как значение = 0.

35. Щелкните по кнопке Run . В окне Results отобразится сообщение «Function created.»

Теперь добавьте столбец, который будет отображать результат вычислений годовой зарплаты. Для этого:

36. Откройте страницу Page Defifnition для страницы 3 (Работники):

37. В секции Regions щелкните по ссылке Работники.

DIV_ADBLOCK26">

select "EMPLOYEE_ID",

"COMMISSION_PCT"

from "#OWNER#"." OEHR_EMPLOYEES"

Обратите внимание на следующие моменты:

· В запрос включены столбцы, которые Вы выбрали при создании отчета с помощью мастера.

· #OWNER# – подстановочная строка (substitution string), представляющая имя схемы, с которой ассоциировано приложение и в которой содержатся необходимые таблицы.

39. Замените код запроса на следующий:

SELECT "EMPLOYEE_ID" "Emp_Id",

"COMMISSION_PCT",

calc_remuneration(salary, commission_pct) "Зарплата/год"

FROM "#OWNER#"." OEHR_EMPLOYEES"

Обратите внимание на следующие моменты:

· Для столбца EMPLOYEE_ID и столбца с функцией calc_remuneration установлены синонимы.

40. Щелкните Apply Changes .

41. Чтобы просмотреть новую страницу отчета Работники, щелкните иконку Run Page в правом верхнем углу.

Обратите внимание на следующие моменты:

· Появился новый столбец Зарплата/год.

· Пропала иконка со ссылкой на страницу Создать/Редактировать Работника. Это произошло потому, что изменилось название столбца, с которым была ассоциирована ссылка на страницу редактирования записи о работнике (мы установили синоним Emp_Id для столбца EMPLOYEE_ID).

· Столбцы отчета имеют англоязычные названия (кроме Зарплата/Год, которому мы установили русскоязычный синоним в запросе).

· Столбец со значением идентификатора работника отображается предпоследним в отчете.

Теперь восстановим в столбце Emp_Id иконку и ссылку на страницу
Создать/Редактировать Работника, назначим всем столбцам русскоязычные заголовки и изменим формат вывода числовых столбцов.

42. На странице определения страницы 3 в секции Regions щелкните по ссылке Report

Отобразится страница Report Attributes

43. В секции Column Attributes найдите атрибут Emp_Id и с помощью кнопки переместите его в начало списка.

44. У атрибута Emp_Id щелкните по иконке слева.

Откроется страница редактирования атрибута-столбца Emp_Id.

45. В секции Column Link :

а. В поле Link Text установите текст, представляющий собой html-тэг для отображения необходимой иконки (щелкните по ссылке ):

б. В поле Page из выпадающего списка выберите страницу Создать/Редактировать Работника. Соответствующий номер страницы автоматически установится в поле:

Значение P4_EMPLOYEE_ID – это имя скрытого поля (item) на странице 4 Создать/Редактировать Работника, представляющего идентификатор работника.

Значение #Emp_Id# – это подстановочная строка, вместо которой APEX подставит выбранное пользователем значение столбца Emp_Id (в котором содержится идентификатор работника) из отчета Работники.

46. Щелкните по кнопке Apply Changes в верхней части страницы.

Вы вернетесь на страницу Report Attributes . Обратите внимание, что в списке столбцов отчета у столбца Emp_Id появилась пометка Link , которая говорит о том, что с этим столбцом ассоциирована ссылка:

47. Установите для каждого столбца в поле Heading русскоязычные названия:

Теперь изменим формат вывода числовых столбцов:

48. В Column Alignment установите right для столбцов SALARY, COMMISSION_PCT и Зарплата/год.

49. Для того, чтобы отредактировать формат столбца SALARY:

а. Щелкните по иконке слева от него.

б. На странице редактирования атрибута-столбца SALARY найдите секцию Column Formating и в поле Number/Date Format выберите из списка р .5 234,10 . Соответствующая форматная маска будет подставлена в поле:

в. Щелкните по кнопке Apply Changes .

50. Повторите предыдущий шаг для столбца Зарплата/Год.

51. Примените изменения.

52. Запустите страницу отчета.

Обратите внимание на следующие моменты:

· Все столбцы отчета имеют русскоязычные заголовки.

· Столбцы Оклад/Месяц и Зарплата/Год отображаются в денежном формате.

53. Установите русскоязычные названия столбцов (в поле Heading ) для страницы Подразделение.

54. По умолчанию в каждой рабочей области установлено тестовое приложение (Sample Application), демонстрирующее основные возможности Oracle Application Express. Запустите его и ознакомьтесь с его возможностями (логин = demo, пароль = apex_stud). Вы можете использовать это приложение как образец для более глубокого изучения APEX.

Контрольные вопросы:

1. Каковы основные компоненты среды разработки Oracle Application Express?

2. Что такое «рабочая область» (workspace)?

3. Что представляет собой приложение в APEX с точки зрения пользователя и с точки зрения внутренней организации?

4. Как из среды разработки запустить приложение? Отдельную страницу приложения?

5. Для чего предназначен элемент «Breadcrumbs»?

6. Что является основным строительным блоком приложения в APEX?

7. Чем определяется состав столбцов отчета?

9. Каким образом можно динамически указывать, какую запись следует отображать на форме редактирования в приложении?

Oracle® Application Express Application Builder User’s Guide Oracle® Database 2 Day + Application Express Developer’s Guide Oracle® Application Express Advanced Tutorials

Лабораторные задания основаны на материалах Oracle® Database 2 Day + Application Express Developer’s Guide и Oracle® Application Express Advanced Tutorials.

Данная статья предназначается всем тем, кто плотно работает с Oracle Application Express (в просторечии - APEX, а то и просто апекс). А так же тем, кто что-то слышал и подумывает начать использовать его в работе. После прочтения статьи, я надеюсь, у вас прибавится желания сделать это.

Вводная информация

Предполагается, что читатель знаком (или познакомится вскоре после прочтения) хотя бы в общих чертах со следующими вещами:
  • Что такое SQL и PL/SQL, и чем они друг от друга отличаются
  • Какие объекты бывают в СУБД Oracle и зачем они нужны (таблицы, пакеты, вью)
  • Основные компоненты приложения апекса: страница, регион, итем, процесс и т. д., как их создавать и удалять
  • Основы администрирования апекса: как создать в оракле таблицу, пакет, вью и как потом сделать их доступными для своего приложения
  • Как использовать значение итема в качестве параметра SQL-запроса
Ничего сверхсложного в этих пунктах нет, всеми этими вещами на базовом уровне можно более-менее овладеть за месяц неспешной работы. Пример предназначен для пятой версии апекса, которая вышла чуть меньше года назад.

Что такое плагин региона в апексе и что для него нужно

В апексе можно создавать плагины регионов, итемов, процессов, динамических действий (Dynamic action) и схем аутентификации и авторизации. Что такое плагин региона, думаю, интуитивно понятно. Вы создаете новый тип региона, который умеет делать что-то такое, что не умеют делать стандартные апексовые регионы. Часто самое сложное тут - придумать какую-нибудь действительно стоящую идею для реализации. Я в качестве примера для статьи придумал плагин для создания рубрикации, источником вдохновения послужили алфавитные и предметные указатели в книгах и эта страница на сайте htmlbook.ru. Итак, приступим.

Исходные данные

Для начала, создадим таблицы с данными. У нас будет рубрикатор стран мира, выбранных моей левой пяткой прямо перед написанием статьи. Допустим, мы храним список стран и континентов, а также ссылки на статьи в Википедии об этих странах. Нам надо аккуратно и красиво выводить этот список на экран, и чтобы они были разбиты по рубрикам (рубриками будут соответствующие континенты). Плагин будет также иметь одно кастомное свойство - количество колонок, в которых будут выводиться данные.

Код для создания таблиц и заполнения данными

create table continent (continent_id number primary key, continent_name varchar2(100)); create table country (country_id number primary key, country_name varchar2(100), continent_id number references continent (continent_id), url varchar2(4000)); insert into continent(continent_id, continent_name) values (1, "Europe"); insert into continent(continent_id, continent_name) values (2, "Asia"); insert into continent(continent_id, continent_name) values (3, "North America"); insert into continent(continent_id, continent_name) values (4, "South America"); insert into continent(continent_id, continent_name) values (5, "Australia"); insert into country (country_id, country_name, continent_id, url) values (1, "France", 1, "https://ru.wikipedia.org/wiki/%D0%A4%D1%80%D0%B0%D0%BD%D1%86%D0%B8%D1%8F"); insert into country (country_id, country_name, continent_id, url) values (2, "Greece", 1, "https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B5%D1%86%D0%B8%D1%8F"); insert into country (country_id, country_name, continent_id, url) values (3, "Norway", 1, "https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%B2%D0%B5%D0%B3%D0%B8%D1%8F"); insert into country (country_id, country_name, continent_id, url) values (4, "Spain", 1, "https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BF%D0%B0%D0%BD%D0%B8%D1%8F"); insert into country (country_id, country_name, continent_id, url) values (5, "China", 2, "https://ru.wikipedia.org/wiki/%D0%9A%D0%B8%D1%82%D0%B0%D0%B9%D1%81%D0%BA%D0%B0%D1%8F_%D0%9D%D0%B0%D1%80%D0%BE%D0%B4%D0%BD%D0%B0%D1%8F_%D0%A0%D0%B5%D1%81%D0%BF%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%B0"); insert into country (country_id, country_name, continent_id, url) values (6, "India", 2, "https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B4%D0%B8%D1%8F"); insert into country (country_id, country_name, continent_id, url) values (7, "Japan", 2, "https://ru.wikipedia.org/wiki/%D0%AF%D0%BF%D0%BE%D0%BD%D0%B8%D1%8F"); insert into country (country_id, country_name, continent_id, url) values (8, "USA", 3, "https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D1%91%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A8%D1%82%D0%B0%D1%82%D1%8B_%D0%90%D0%BC%D0%B5%D1%80%D0%B8%D0%BA%D0%B8"); insert into country (country_id, country_name, continent_id, url) values (9, "Canada", 3, "https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BD%D0%B0%D0%B4%D0%B0"); insert into country (country_id, country_name, continent_id, url) values (10, "Mexico", 3, "https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%B0"); insert into country (country_id, country_name, continent_id, url) values (11, "Brasil", 4, "https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B0%D0%B7%D0%B8%D0%BB%D0%B8%D1%8F"); insert into country (country_id, country_name, continent_id, url) values (12, "Uruguay", 4, "https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D1%83%D0%B3%D0%B2%D0%B0%D0%B9"); insert into country (country_id, country_name, continent_id, url) values (13, "Chile", 4, "https://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D0%BB%D0%B8"); insert into country (country_id, country_name, continent_id, url) values (14, "Australia", 5, "https://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%81%D1%82%D1%80%D0%B0%D0%BB%D0%B8%D1%8F"); create view by_continent as select continent_name rubric, country_name value, url link from continent ct, country cr where ct.continent_id = cr.continent_id order by rubric, upper(value); create view by_alphabet as select upper(substr(country_name, 1, 1)) rubric, country_name value, url link from country cr order by rubric, upper(value);

Плагин

Плагин создается в приложении апекса. Открываем IDE, выбираем необходимое приложение, идем в раздел «Shared Components», там находим раздел «Other Components», а в нем - «Plug-ins». Заходим на страницу плагинов, нажимаем «Create», запускается мастер создания плагинов. Далее по шагам (их всего два): указываем способ создания - «From Scratch», затем указываем свойства. Необходимо указать название(«Name»), внутреннее название («Internal name»), тип плагина («Type» - «Region») и тип поддерживаемых приложений («Supported for») - Desktop и Mobile (поставить галочки напротив необходимых пунктов). Далее нажимаем «Create Plug-in». Плагин создан, теперь его надо немного настроить. Заходим в свойства плагина (для этого надо кликнуть по его названию в списке плагинов), в разделе «Standard Attributes» ставим галочки напротив «Region Source is SQL Statement» и «Region Source Required». Идем в раздел «Custom Attributes», нажимаем на «Add Attribute» (чтобы добавить свойство для задания количества колонок при выводе), заполняем следующие поля:
  • «Scope» - «Component»
  • «Attribute» - «1» (порядковый номер кастомных атрибутов, ниже будет немного о том, что с этим номером потом делать)
  • «Display Sequence» - оставляем умолчательное значение «10»
  • «Label» - «Columns count» (это название будет отображаться в настройках, когда мы будем создавать регион на основе этого плагина)
  • «Type» - «Integer»
  • «Supported for» - «Desktop»
Ложка дёгтя в кастомных атрибутах. Есть там один крайне неприятный косяк: если вы захотите сделать кастомный атрибут типа «Select List», делайте его аккуратно. В интерфейсе отсутствуют кнопки для удаления отдельных записей, а также невозможно отредактировать return value. Вот скриншот этого непотребства:

Как видите, кнопки «Удалить» там нет. И поле «return value» нередактируемое. То есть если вы ошибетесь где-нибудь и не заметите сразу, или решите намного видоизменить список, то вам придется удалить атрибут и пересоздавать его с нуля. Да-да, и все ваши 20 записей для выпадающего списка тоже.

Теперь о самом главном свойстве плагина: на закладке «Callbacks» надо указать «Render Function Name» - название PL/SQL функции, которая будет генерировать HTML-код региона для показа браузером. Согласно документации, функция должна иметь следующую сигнатуру:

Function (p_region in apex_plugin.t_region, p_plugin in apex_plugin.t_plugin, p_is_printer_friendly in boolean) return apex_plugin.t_region_render_result
Кстати, для того, чтобы получить описание этой функции, даже не надо лезть в документацию, достаточно нажать на вопросик напротив поля «Render Function Name» и скопировать текст из встроенной подсказки. И раз уж заговорили о документации - для разработки плагинов вам очень пригодится документация на пакеты APEX_PLUGIN и APEX_PLUGIN_UTIL .
Самое загадочное в этой функции то, что мне не удалось пока найти описание возвращаемого функцией результата и где он используется. Вы можете просто возвращать NULL, и все будет работать.

Render Function

Плагин почти готов, теперь нужно сделать функцию рендеринга. Создадим функцию:

Function render (p_region in apex_plugin.t_region, p_plugin in apex_plugin.t_plugin, p_is_printer_friendly in boolean) return apex_plugin.t_region_render_result is begin return null; end;
Код, генерирующий HTML, как вы уже наверно догадались, надо поместить между строками «begin» и «return null;».
Чтобы сгенерировать регион на основе результата SQL запроса пользователя, надо этот запрос получить и выполнить. Получить запрос просто: читаем описание типа apex_plugin.t_region и обнаруживаем, что текст запроса хранится в поле p_region.source. Осталось только запустить этот запрос, но не спешите хвататься за EXECUTE IMMEDIATE, потому что тут он вам не поможет! Дело в том, что пользователь в запросе может указать параметры, которые движком апекса ассоциируются со страничными полями. Движок апекса умеет их определять и заполнять данными. Сделать такое самому практически невозможно, придется писать свой парсер запросов. Как же тогда выполнить запрос? Можно запретить пользователю использовать запросы с параметрами, а можно покопаться в недрах документации и найти семейство функций APEX_PLUGIN_UTIL.GET_DATA (две функции GET_DATA и две - GET_DATA2, за подробностями - см. документацию пакета). Эти функции принимают на вход SQL-код запроса, парсят его, определяют параметры, находят соответствующие итемы на странице и т. д. Результат возвращается в виде коллекции, ее описание есть на той же странице документации. В той же переменной p_region (которая является записью - RECORD) содержатся атрибуты с названиями attribute_01… attribute_25. Эти числа соответствуют номерам кастомных атрибутов, указанных в поле «Attribute» в процессе создания.

И последнее. HTML-код вставляется на страницу с помощью процедуры htp.p (не путать с http!). То есть код

Htp.p("Всем привет!");
Выведет на страницу надпись «Всем привет!» жирным шрифтом. Полный код функции для нашего плагина будет ниже.

Я тоже хочу попробовать!

Плагин вместе со всем необходимым можно взять . В комплекте идут следующие файлы:
  • region_type_plugin_rubrikator.sql - файл экспорта плагина
  • render_plugin_rubrikator.pls - заголовок пакета с функцией рендеринга
  • render_plugin_rubrikator body.pls - тело пакета с функцией рендеринга
Установка плагина (выполнять не нужно, если вы выполнили все шаги по созданию плагина из данной статьи): заходим в IDE, открываем нужное приложение, импортируем файл с плагином (region_type_plugin_rubrikator.sql). Указываем File Type - Plug-in, нажимаем Next, Next, Install Plug-in.

Установка пакета: компилируем пакет из файлов render_plugin_rubrikator.pls и render_plugin_rubrikator body.pls.

Пакет содержит функцию рендеринга (render) и две процедуры (prepare_demo и drop_demo), которые, соответственно, создают и удаляют таблицы и вью для демонстрации (код, выполняемый процедурой prepare_demo, приведен в начале статьи; если вы уже выполнили его, вызывать процедуру prepare_demo не нужно). Выполните процедуру prepare_demo после установки:

Begin render_plugin_rubrikator.prepare_demo; end; /
Теперь создайте новую страницу, на ней создайте два региона. Тип региона укажите - Plug-ins, в списке плагинов выберите «Rubrikator». В качестве источника данных укажите:

Для первого региона:

Select * from by_continent
Для второго:

Select * from by_alphabet
Здесь by_continent и by_alphabet - два вью, созданных процедурой prepare_demo. В текущей версии плагина требования к запросу-источнику такие: первый столбец должен содержать заголовки рубрик, второй - пункты внутри рубрик, третий - ссылки. Если ссылка равна NULL, запись будет показана на странице без тега <а>.

Значение поля Columns count в плагине выберите на свой вкус. В моей демо-версии будет 2 для первого и 3 для второго.
Результат первого запроса, для примера:

А если запустить страницу, то наш плагин преобразует это к такому виду:

Первый регион: