Создание пользовательского интерфейса oracle
Недавно я с удивлением обнаружил, что, оказывается, толковых туториалов по Oracle Application Express (он же APEX, он же апекс, но не путать с языком apex, который используется в Salesforce) в природе не существует.
Это не самая распространенная технология, конечно, но, тем не менее, довольно востребованная. Есть десятки блогов об апексе (англоязычные, в основном), пара тысяч вопросов на Stackoveflow, специальный раздел по апексу на официальных форумах оракла, сам апекс существует уже 15 лет и все время развивается. Я был уверен, что и хороших туториалов полно. Но нет!
Мне тут же пришла в голову гениальная мысль восполнить этот пробел.
Оглавление
4- Управление User и Group в Workspace
После того, как вы вошли в Workspace с авторизацией admin вы можете создать user и group для Workspace.
Теперь вы можете выйти (logout) из системы, чтобы войти с user dev01, вы готовы для программирования Oracle APEX.
Вводная информация
Предполагается, что читатель знаком с Oracle Database версии хотя бы с 11-й, SQL, PL/SQL и особенно с тем, что такое EXECUTE IMMEDIATE и как оно работает.
Я начну с обзора наиболее часто используемых разделов IDE. Я тоже покажу несколько скриншотов. Куда же без них, раз всё здесь сделано из визуальных компонентов. Но их будет не так много, как в плохих туториалах, и в основном они будут в начальных главах, а дальше я буду просто указывать название раздела IDE, в котором находятся необходимые вещи. Сразу обращу ваше внимание, что это просто первое знакомство с IDE. Более подробная информация о том, когда на какую кнопку нажимать и где что смотреть, будет дана дальше, когда я перейду к конкретным темам.
Что нужно?
Определившись с требованиями получаем следующее.
Желательно для бинарника:
Небольшой размер исполняемого файла.
Корректная обработка случаев, когда OCI-библиотека недоступна
Необходимо для бинарника:
Работать утилита должна на любом компьютере с ОС Windows выше Windows 7 или Windows Server 2008 без установки каких-либо фреймворков и Runtime Environment. Должен быть установлен только какой-то из продуктов Oracle, включающий OCI-библиотеку.
Очень желательно для исходников:
Чтобы готовый проект можно было без проблем скомпилировать на другом компьютере без установки каких-либо библиотек. Так как у нас есть похожий legacy проект, которую лет 20 назад писал давно ушедший сотрудник. Его рабочую станцию мы храним в виде образа ВМ, так как подготовить окружение на новой рабочей станции - задача крайне нетривиальная.
Обзор IDE
Стартовый экран, который вы увидите сразу после входа в IDE:
Главные элементы здесь — это 4 большие кликабельные картинки:
- App Builder — это, собственно, то место, где можно создавать приложения и где вы будете проводить до 99% времени.
- SQL Workshop — заменитель обычной IDE для работы с СУБД Oracle. Там вы можете посмотреть объекты БД (таблицы, индексы, пакеты, и т. п.) и выполнять SQL-запросы. Если у вас есть возможность делать все это через "обычные" IDE (вроде Oracle SQL Developer или PL/SQL Developer) — делайте через них. Тем не менее, этот раздел тоже может быть полезен и о нем я тоже расскажу.
- Team Development — инструменты для командной разработки. Честно говоря, я ни разу не видел, чтобы хоть кто-то ими пользовался на практике (включая меня). Любопытства ради я туда тоже заглядывал и совсем бесполезным этот раздел я бы не назвал, хотя и очень хочется.
- App Gallery — раздел с демо-приложениями. К тому моменту, когда он появился, я уже неплохо знал апекс и почти не заглядывал туда, но начинающим, думаю, это будет полезно. Там много разных простеньких приложений, на их примере можно изучать, как использовать те или иные возможности.
В меню в самом верху страницы продублированы эти же 4 пункта.
Кроме этого, есть еще несколько малополезных вещей: ниже есть некоторое количество статистической информации (типа наиболее часто редактируемых приложений или наиболее активных разработчиков). И есть колонка справа, где также немного статистики и дополнительных ссылок.
Рассмотрим App Builder и SQL Workshop подробнее.
App builder
Эта страница выглядит примерно вот так:
Основные элементы этой страницы: четыре большие кнопки как на предыдущей странице, список уже имеющихся приложений, правая колонка со списком последних измененных приложений и дополнительными действиями. Четыре кнопки — это:
- "Create" — создать новое приложение. Эта же функция продублирована чуть ниже (синяя кнопка "Create" над отчетом со списком приложений). Кнопка запускает мастер создания приложений.
- "Import" — импортировать приложение. Апекс позволяет переносить приложения с одного сервера на другой в виде текстовых файлов (которые, по сути, являются длииииными PL/SQL скриптами с вызовами функций создания всех элементов приложения).
- "Dashboard" — малополезное сборище статистики разработки приложений. Кто, когда, где, сколько изменений сделал. Думаю, даже вашему начальнику будет неинтересно туда смотреть.
- "Workspace Utilities" — набор дополнительных инструментов для управления приложением. Честно говоря, туда я тоже почти не заглядываю.
Так же хочу обратить ваше внимание на вот такую маленькую кнопочку в панели отчета:
Она переключает вид отчета с такого, как на скриншоте выше (с "картинками" приложений) на отчет в виде таблицы:
Похожие отчеты встречаются и в других разделах IDE. Я предпочитаю табличный вид, поэтому далее все скриншоты будут с ним.
После того, как вы создадите приложение или откроете существующее, вы увидите следующую страницу (очень похожую на предыдущую по структуре):
На эту страницу вы будете заходить очень часто, и полезных функций здесь тоже очень много. Большие кнопки с картинками:
- "Run Application". Эта кнопка запускает ваше приложение. Оно откроется в отдельном окне. По умолчанию — именно в окне, а не во вкладке браузера, но это поведение настраивается (об этом позже).
- "Supporting Objects". Этот раздел служит для решения вопросов, связанных с установкой, обновлением и удалением приложений. Обычно им почти не пользуются.
- "Shared Components" — я бы сказал, это первый или второй по важности раздел IDE (еще один — редактор страниц). Если вы будете много разрабатывать на апексе, то очень скоро заметите, что выучили структуру этого раздела как "Отче наш".
- "Utilities" — еще один набор (мало)полезных вспомогательных функций.
- "Export / Import". Позволяет экспортировать или импортировать приложения или отдельные части приложения.
И две дополнительные кнопки, которые обведены оранжевой рамкой на скриншоте:
- Кнопка "Edit application properties". Нажав на нее, вы попадете на страницу настроек свойств приложения. Возможно, вы не будете заходить в этот раздел часто, но он очень важен, потому что там хранятся настройки приложения, от которых много чего зависит. Далее, если я буду упоминать где-то "свойства приложения" — ищите их в этом разделе.
- В кои-то веки полезная функция в правой панели: "Delete this Application". В то время как многие функции в апексе продублированы в разных местах, эта функция есть только здесь, и с непривычки первый раз ее найти сложно.
Shared Components
Shared Components — это наше всё. Этот раздел является промежуточным пунктом на пути к конкретным компонентам приложений. Покажу здесь общий вид, просто чтобы вы представляли, где что находится:
Совсем неважной ерунды здесь почти нет. Каждый раздел вам так или иначе может понадобиться. Названия разделов говорят сами за себя, добавить почти нечего:
- Application Logic — средства управления логикой приложения.
- Security — вопросы безопасности и управления доступом к приложению целиком и к отдельным компонентам в зависимости от ролей пользователей.
- Other Components — это "все остальные компоненты". По-хорошему, этому разделу следовало бы быть последним, но он почему-то здесь. А подпункт "List of Values" я бы вообще в Application Logic перенес.
- Navigation — компоненты приложения для обеспечения навигации.
- User Interface — настройка внешнего вида приложения, стилей и т. п.
- Files — раздел для файлов (например, css или js). Незаменим, если у вас нет доступа к ОС, и все равно удобен, даже если доступ есть.
- Data Sources — работа с источниками данных (для загрузки и выгрузки).
- Reports — отчеты, очевидно.
- Globalization — раздел для перевода приложений на другие языки.
Перевод приложений в апексе сделан просто ужасно (честно, я пытался придумать, как сделать его хуже — и не смог), и нет никаких свидетельств того, что в будущем станет лучше.
Ужасно с точки зрения архитектуры и удобства работы над переводом. Могу только сказать разработчикам: "Спасибо, что хотя бы без багов" (но тут как посмотреть: переводы устроены так, что некоторые особенности их работы мало чем отличаются от багов).
Приходится с этим жить.
Page Designer
Page Designer — редактор страниц. Это, наверное, главное место в IDE. Здесь вы будете создавать то, с чем напрямую взаимодействует пользователь. Здесь просто куча функций, почти как в кабине самолета. На скриншоте разноцветными рамками выделены основные составляющие редактора:
Панель кнопок вверху (в красной рамке):
- Поле для ввода номера страницы, стрелки вверх и вниз и кнопка "Go": навигация по страницам приложения. Каждая страница имеет номер, тут вы можете либо ввести номер нужной страницы, либо стрелками перейти к следующей/предыдущей, либо нажать на самую левую кнопку и в появившемся модальном окне выбрать страницу из списка.
- Кнопка с замком: позволяет заблокировать страницу от изменений другими разработчиками.
- Кнопки Undo/Redo
- Две кнопки с доступом к вспомогательным функциям.
- Кнопка-ссылка на Shared Components. Полезная, потому что туда-сюда ходить приходится постоянно. (Я сам, правда, предпочитаю просто держать Shared Components в отдельной вкладке — так еще быстрее).
- Кнопка "Save" — сохраняет изменения на странице.
- Кнопка "Run" — "запускает" страницу, то есть вы ее видите так, как ее потом увидит пользователь.
Слева (в оранжевой рамке) — панель с компонентами приложения. В этой панели есть 4 закладки:
- "Rendering" — показывает, из каких составных частей состоит страница, какие процессы выполняются при рендеринге;
- "Dynamic Actions" — действия, выполняемые на клиенте (например, обработчики событий javascript);
- "Processing" — серверные процессы, связанные со страницей;
- "Page Shared Components" — для прямого перехода к используемым на странице общим компонентам (те самые Shared Components).
По центру (в зеленой рамке) — панель, содержащая много разнородной информации. В верхней части панели есть 5 закладок, на которых можно найти:
Также центральная панель имеет снизу еще одну дополнительную панель, которую можно использовать для быстрого добавления компонентов на страницу.
Справа (в синей рамке) — панель свойств. Тут все просто — она показывает свойства выбранного в данный момент компонента.
SQL Workshop
Как я уже говорил, SQL Workshop — это заменитель обычной IDE (если у вас по каким-то причинам нет возможности ее использовать).
Он состоит из 5 разделов:
- Object Browser — браузер объектов БД (таблиц, пакетов, функций и процедур, индексов, сиквенсов и прочего);
- SQL Commands — раздел, где можно выполнить любой SQL запрос или PL/SQL код;
- SQL Scripts — здесь можно загрузить текстовый файл со скриптом и выполнить его;
- Utilities — разные дополнительные возможности, связанные с БД: например, есть графический построитель запросов (но не только);
- RESTful Services — создание REST сервисов. Апекс тоже имеет REST (причем давно, еще в версии 4.2 они уже были)!
Object Browser
Здесь есть все, что нужно для работы с объектами БД: создание, изменение, удаление, просмотр свойств объектов, ввод данных в таблицы — для всего этого в этом разделе есть графический интерфейс. Вверху слева в выпадающем списке можно выбрать тип объектов (на скриншоте показаны таблицы), вверху справа можно выбрать схему, объекты которой вы можете посмотреть. В списке доступных схем вы не увидите все схемы сразу — это нормально. Как сделать схемы видимыми в апексе, я расскажу, когда дойду до администрирования.
Также я не вижу большого смысла описывать этот раздел подробнее: если вы знаете, что значит фраза "добавить столбец в таблицу", вы без труда догадаетесь, когда вам нужно будет нажимать на кнопку "Add Column" и что вас может ждать дальше.
SQL Commands
В этом разделе можно выполнять SQL запросы и PL/SQL код.
По возможностям этот раздел почти не уступает полноценным средам разработки. Не хватает разве что автодополнения кода и подсветки синтаксиса (а в Object Browser подсветка синтаксиса есть, кстати). Имеющиеся возможности:
- выполнение SQL, в том числе с параметрами (для ввода значений параметров появится отдельное окно);
- выполнение PL/SQL с возможностью вывода текста через dbms_output (вывод появится в окне ниже);
- выполнение только выделенной части кода (выделить текст мышкой, затем "Run");
- просмотр плана запроса;
- сохранение запросов.
Это, как вы понимаете, далеко не всё, что есть в IDE APEX, но на данном этапе не имеет смысла углубляться дальше. Отдельные элементы интерфейса апекса будут разобраны более подробно в темах, которые имеют к ним непосредственное отношение.
P. S. Я пока не могу сказать, что четко продумал структуру этого туториала, возможно, в будущем я добавлю еще скриншоты и описания в эту статью или опишу дополнительные возможности в других статьях. Осталось придумать, как оповещать заинтересованных о значительных правках старых статей.
Недавно я с удивлением обнаружил, что, оказывается, толковых туториалов по Oracle Application Express (он же APEX, он же апекс, но не путать с языком apex, который используется в Salesforce) в природе не существует.
Это не самая распространенная технология, конечно, но, тем не менее, довольно востребованная. Есть десятки блогов об апексе (англоязычные, в основном), пара тысяч вопросов на Stackoveflow, специальный раздел по апексу на официальных форумах оракла, сам апекс существует уже 15 лет и все время развивается. Я был уверен, что и хороших туториалов полно. Но нет!
Мне тут же пришла в голову гениальная мысль восполнить этот пробел.
Оглавление
Закрываем окружение
После того, как взаимодействие с базой больше не нужно, закрываем окружение:
3- Работа с Workspace
В предыдущем пункте вы создали Workspace с названием DEV_WORKSPACE. Теперь мы входим и работаем с этим Workspace.
При входе в Workspace в первыый раз, система требует вас поменять пароль, но вы можете сохранить старый пароль.
6.1- Создать Database Desktop Application
- Hello Database Desktop Application
По умолчанию с приложением создается страница Home, вы можете добавить другие странцы в приложение нажатием на "Add Page". Лучше добавить их после.
На данный момент страница Home не имеет дизайн, но вы можете нажать на знак чтобы протестировать веб страницу.
6- Создать приложение (Application)
- Desktop Application
- Websheet Application
- Mobile Application
Для начинающих с Oracle APEX лучше всего сделать пример с Database Desktop Application. На самом деле это приложение работает на web платформе но имеет интерфейс довольно похожий на обычное приложение Desktop.
В данной статье я покажу вам как создать приложение Hello World Oracle Apex в форме Database Desktop Application.
Итоги работы
Вот ссылки на проекты на гитхабе для Windows(Visual Studio) и Linux(NetBeans)
О файлах в проекте
Заголовочные файлы oci.h, ocidem.h, ocidfn.h, ocikpr.h, oratypes.h, orl.h взяты из каталога %ORACLE_HOME%\OCI\include (Может, я их немного модифицировал, чтобы не было неразрешенных зависимостей, но этого я уже точно не помню)
ocipfndfn.h - этот файл с определениями типов указателей на функции составлен мной, тут те OCI функции, которые я использовал в своих проектах.
OraFunction.c - Основной файл проекта, тут определения функций для работы с БД.
OraFunction.h - заголовочный файл с объявлениями функции.
ParseCmdLine.c - функция для парсинга командной строки, для получения логина, пароля и строки подключения к базе. Параметры передаются в утилиту стандартным для Оракловых утилит форматом login/pass@dbconnect.
main.c - функция main.
Что утилита делает
Утилита подключается к базе данных, создает таблицу simple_table, заполняет ее данными, получает из нее данные и удаляет таблицу.
Как скомпилировать
Как и было запланировано с самого начала, для компиляции утилиты не требуется никаких дополнительных файлов и библиотек. Для работы, само собой, требуется установленный Oracle Client либо Instant Oracle Cllient, главное, чтобы была доступна OCI-библиотека.
Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи. Facebook
2- Создать Workspace
Для начала, вм нужно войти в систему управления Oracle APEX чтобы объявить Workspace. Workspace будет прикреплен с SCHEME в database. Workspace содержит Приложения (включая систему форм, отчетов, ..), управляет user тех кто участвует в программировании, или user которые являются пользователями.
В предыдущем шаге вы создали SCHEMA с названием DEVэто означает создан 1 user database и называетеся DEV.
В этом шаге вам нужно объявить User управляющего Workspace, это не user database, это user управляющий этот APEX Workspace, и имеет право создавать приложения, создавать другие APEX user выполняющие роль программиста, или пользователя приложения, .
Подключение библиотеки
Для того, чтобы использовать OCI функции в своей программе, нужно подключить библиотеку и получить адреса функций:
Подключение библиотеки и получений адресов функций
Таком образом нужно получить адреса всех функций, которые мы будем использовать в нашей программе.
Пишем простое приложение
Почему существующие туториалы — плохие
Я немного поясню, почему я считаю существующие туториалы плохими. Апекс — это не язык программирования, это такой очень высокоуровневый инструмент разработки, ближайшим идейным аналогом которого я бы назвал MS Access. Соответственно, большая часть разработки на апексе состоит из работы с веб-интерфесом этой среды: нажимания на кнопки, перехода по ссылкам, заполнение полей с названиями компоментов, выбора значений из списков и так далее. Что делает типовой туториал? Он показывает скриншоты этих самых экранов с подписями "нажмите туда-то". При этом сама IDE достаточно удобная и понятная, почти все элементы снабжены справочными пояснениями, есть встроенная помощь. В итоге, если нужно объяснить пользователю, как создать приложение, в туториале будет большой скриншот, объясняющий, как нажать на кнопку "Create a new app". Вот, посмотрите сами на официальный оракловый туториал:
Они бы еще объяснили со скриншотами, что "клик" — это однократное нажатие на левую кнопку манипулятора типа "мышь".
Конечно, полезная информация в таких туториалах тоже есть, но ее там крохи. Процентов на 80 туториалы состоят из таких вот скриншотов, причем по своему опыту я могу сказать, что человек, не читавший никаких туториалов вообще, самостоятельно найдет, как создать приложение, добавить страницу, поместить на нее отчет и так далее. А потом ему нужно будет организовать более-менее нетривиальное взаимодействие нескольких элементов апекса, и оказывается, что этот вопрос туториалом почти не покрывается. Приведу аналогию: вы только-только учитесь программировать, изучили переменные, массивы, циклы, условия, и получили задание, в рамках выполнения которого вам нужно отсортировать массив. Как-то отсорировать массив — достаточно просто, но как только задание усложнится до "отсортировать большой массив быстро", окажется, что имеющихся у вас знаний недостаточно. Погуглив, покопав Stackoverflow и форумы, вы найдете алгоритм быстрой сортировки. Конечно, кто-то и сам переизобретет этот алгоритм рано или поздно, но более эффективным путем было бы сразу прочитать книжку с разбором типовых алгоритмов. И вот как раз такого набора "типовых алгоритмов" для апекса обычно нигде нет, а на помощь приходят те же самые метод научного тыка, поисковики, форумы и Stackoverflow (и, я надеюсь, этот туториал).
6.2- Создать вашу первую страницу
Далее, мы добавляем страницу, отображающую список департаментов (Таблица DEPT) и страницу для создания и изменения информации департаментов. Для простоты, мы создаем страницу по имеющемуся шаблону в Oracle APEX, в следующей части я покажу вам как создать новую страницу с пустой страницы, чтобы вы поняли лучше.
Выберите "Form on a Table with Report". С этим Template, Oracle APEX создаст для вас 2 страницы содержащие страницу со списком департаментов (DEPT) и форму для создания (и изменения) информации департаметов.
Oracle Developer Suite 10g – это полный набор интегрированных средств для разработки интернет-приложений, который включает в себя удобную интегрированную среду разработки со средствами моделирования, программирования на PL/SQL , Java , разработки компонентов, бизнес-анализа, составления отчетов и диаграмм. И, что очень важно, все эти средства используют общие ресурсы, что позволяет совместно работать над одним проектом группе разработчиков. В таблице 1.3 приведены компоненты (продукты) Oracle Developer Suite .
В состав Oracle Developer Suite также входит XML Developer 's Kit (XDK) – набор различных компонентов, утилит и интерфейсов для организации работы с XML -документами. Различают пять различных XDK:
- XDK for Java;
- XDK for JavaBeans;
- XDK for C;
- XDK for C++;
- XDK for PL/SQL.
Oracle Developer Suite поддерживает стандарт UML-моделирования объектных приложений, который позволяет моделировать классы и рабочие процессы с последующей генерацией кода для среды BC4J. Хранение моделей предусмотрено в общем репозитории Oracle , где удобно контролировать версии объектов.
Если у вас большой коллектив разработчиков, то для поддержки их работы в Oracle Developer Suite предусмотрен репозиторий , который централизованно хранит структурированные данные как объекты базы данных , а неструктурированные – как файлы и XML -документы. Репозиторий – это своего рода единое хранилище метаданных приложений, обеспечивающее параллельную работу разработчиков. Использование репозитория дает разработчикам возможность анализировать зависимости между объектами, контролировать использование общих компонентов. Для удобства работы с репозиторием предусмотрены такие функции, как просмотр архива версий, управление процессом обновления версий объектов, а также функции контроля зависимостей и управление конфигурациями.
Oracle Developer Suite содержит набор переносимых JavaBean-компонентов пользовательского интерфейса, разработку и поддержку веб-приложений. Для реализации этих возможностей разработчики могут использовать API-интерфейсы Java или User Interface XML (UIX).
Oracle Designer
Oracle Designer – это интегрированная CASE-среда для автоматизации процессов всех этапов полного жизненного цикла сложной прикладной системы, включая детальный анализ предметной области, проектирование, программирование, тестирование, оценку, сопровождение, обеспечение качества, управление конфигурацией, управление проектом, документирование системы, формулировку и анализ требований.
Oracle JDeveloper 10g
Oracle JDeveloper 10g – это интегрированная среда разработки для моделирования, разработки и отладки J2EE-приложений и веб-сервисов. Как и в случае с Oracle Forms , разработка приложений в JDeveloper существенно упрощена за счет использования мастеров, редакторов, инструментов моделирования и дружественного интерфейса. Также среди прочего следует отметить поддержку возможности интерактивной привязки данных к пользовательскому интерфейсу и автоматического развертывания в сервере приложений.
Oracle Reports
Oracle Reports – это мощный инструмент для разработки отчетов любой степени сложности на основе информации, хранящейся в базах данных или других источниках. Oracle Reports позволяет не только отображать информацию из БД, но и управлять внешним видом документа, а также сформировать различные типы документов с помощью мастеров. Вы также можете генерировать выходной файл в другом формате, таком как HTML, PDF, RTF, SPREADSHEETS или XML.
Oracle Warehouse Builder
Oracle Warehouse Builder (OWB) – это расширяемая многофункциональная CASE-среда, предназначенная для разработки и развертывания корпоративных хранилищ и витрин данных.
Oracle Discoverer
Oracle Discoverer – это инструмент для получения произвольных отчетов, формирования нерегламентированных запросов и анализа данных. Он обеспечивает быстрый и удобный доступ к информации, содержащейся в реляционных и многомерных хранилищах и витринах данных, а также в транзакционных системах, в том числе не обязательно работающих под управлением СУБД Oracle. С помощью Oracle Discoverer пользователь может получать необходимые ему данные в виде различных таблиц, графиков и диаграмм.
Oracle Business Intelligence Beans
Oracle Business Intelligence Beans – это набор компонентов JavaBeans, предназначенных для создания приложений бизнес-анализа. Взаимодействие с JDeveloper – "бесшовная" интеграция компонентов BI Beans. Компоненты Oracle Business Intelligence Beans позволяют создавать приложения бизнес-аналитики и использовать преимущества функциональности OLAP.
Oracle Forms Developer
Oracle Forms Developer – это мощное средство для быстрой разработки приложений, которые основаны на информации, хранящейся в базах данных или других источниках. Forms Developer содержит исчерпывающий набор инструментов для создания полнофункционального прикладного программного обеспечения, состоящего из форм, отчетов и деловой графики. Вы можете программировать вызов отчета, построенного с помощью Oracle Reports, по нажатии пункта меню или кнопки, или в форму может быть вставлен вывод диаграммы, сгенерированной с помощью Oracle Graphics. Такой модульный подход предоставляет максимальную гибкость при проектировании и разработке новых прикладных программ, а также для поддержания и улучшения существующих. Forms Developer имеет большое количество различных мастеров для быстрого создания объектов. Если вы разрабатываете приложение в Forms, то в первую очередь вы избавляете себя от написания большого количества кода, так как все основные операции взаимодействия с БД уже автоматизированы.
Oracle Forms и другие инструменты Developer оптимизированы так, что имеют и используют множество новых и мощных свойств текущего сервера Oracle, а также средства разработки приложений для ввода, доступа, изменения или удаления данных из БД Oracle в реальном времени. Ниже приведены другие особенности Forms Developer.
- Деление приложения – в зависимости от ситуации вы можете хранить ваши PL/SQL-модули на сервере или в приложении. Вы можете перетаскивать объекты как между модулями, так и в пределах модуля.
- Инструменты быстрой разработки – Forms Developer имеет большое количество различных мастеров для быстрого создания объектов. Когда вы разрабатываете приложение с помощью мастера, количество кода сводится к минимуму или его не требуется вообще, поэтому создание простейшего приложения может занимать считанные минуты.
- Гибкость и контроль исходного кода – менеджер конфигурации программного обеспечения (Software Configuration Manager – SCM), интегрированный с Forms Developer, предназначен для управления структурированными и неструктурированными данными и всеми типами файлов в рамках жизненного цикла разработки программного продукта.
- Масштабируемость – используя многозвенную архитектуру, вы можете масштабировать приложение от одного до десятков тысяч пользователей без надобности вносить в приложение какие-либо изменения. Вы также можете повысить масштабируемость приложения за счет использования функциональности сервера, связываемых переменных, курсоров, хранимых процедур, пакетов, DML- и DDL-операций.
- Поддержка Java, SQL, PL/SQL – Forms Developer поддерживает разработку на всех перечисленных языках.
- Повторное использование объектов – Forms Developer имеет очень удобную модель наследования, а также средства ее реализации, которые облегчают наследование различных признаков (атрибутов) от одного объекта другому, от одного приложения к другому, используя объектные библиотеки (Object Library) и подклассы.
- Набор встроенных пакетов – Forms Developer содержит множество пакетов, которые существенно упрощают разработку приложений, предоставляя такие возможности, как файловый ввод-вывод, подключение внешних библиотек.
Что касается различных версий Forms, то в этой книге будут упомянуты различные версии, одна из которых Oracle Forms 6i. Это единственная версия, поддерживающая три режима вывода формы на экран: терминальный, графический (GUI) и в браузере. Особенность такого приложения состоит в том, что в любом из перечисленных режимов оно может быть запущено без перекомпиляции. Каждая новая версия предоставляет много других новых и важных возможностей по сравнению с предыдущими версиями; так, например, если брать новшества, появившиеся в Oracle Forms 6i, то в отличие от более ранних версий здесь есть возможность интегрировать сформированные отчеты с офисными приложениями (Microsoft Word, Excel). Также вам предоставляется возможность использовать мощные средства программирования, предоставляемые OLE-сервером приложений.
Однажды созданное вами приложение в Oracle Forms на платформе Windows может работать на таких платформах, как Linux, Mac Os, AIX и многих других. Другими словами, приложение, разработанное в Forms, – кросс-платформенное и может работать под управлением любой операционной системы единственное требование – это перекомпиляция модуля. Все версии до Forms 6i включительно являются клиент-серверными и требуют установки клиентского программного обеспечения на всех компьютерах, работающих с необходимым приложением.
Приложения, созданные в Oracle Forms Developer, могут быть развернуты на любом уровне предприятия, также вы можете создавать решения для малого и крупного бизнеса, поддерживающие от одного до сотни одновременно работающих пользователей. Учитывая возможность расширения инструментария пользователем, с помощью Forms можно создать практически любое требуемое окружение базы данных Oracle.
Закрываем сессию
После нужных операции нужно закрыть сессию:
Какую технологию использовать?
Oracle предлагает следующие варианты:
Pro*C/C++ - Предкомпилятор Oracle. Инструмент программирования, который позволяет встраивать операторы SQL в хост-программу высокого уровня. Предварительный компилятор принимает основную программу в качестве входных данных, преобразует встроенные инструкции SQL в стандартные вызовы библиотеки Oracle во время выполнения и создает исходную программу, которую вы можете скомпилировать, связать и выполнить. Разобраться с этим у меня не получилось, поэтому ничего к этому описанию я добавить не могу
C++ Call Interface (OCCI) - API, который предоставляет приложениям C++ доступ к данным в базе данных Oracle. OCCI позволяет программистам на C++ использовать весь спектр операций с базами данных Oracle, включая обработку инструкций SQL и манипулирование объектами. Так как я С++ в реальных проектах не использовал, этот вариант мне явно не подходил
Oracle Call Interface (OCI) - API, который позволяет создавать приложения, использующие вызовы функций для доступа к базе данных Oracle и управления всеми этапами выполнения инструкций SQL. OCI поддерживает типы данных, соглашения о вызовах, синтаксис и семантику C и C++. Он предоставляет библиотеку стандартных функций доступа к базе данных и поиска в виде библиотеки динамической среды выполнения (библиотеки OCI), которая может быть связана в приложении во время выполнения. Также в описании указано, что все оракловые утилиты (типа sqlplus, exp, imp и прочие) написаны именно с использованием OCI. Что же еще нужно?
Oracle Database Programming Interface for C (ODPI-C) - это C-библиотека с открытым исходным кодом, которая упрощает использование общих функций интерфейса вызовов Oracle (OCI) для драйверов баз данных Oracle и пользовательских приложений. DPIC находится поверх OCI и требует клиентских библиотек Oracle. Проект лежит на Гитхабе. Про этот вариант я прочитал только когда писал эту статью. Но, посмотрев примеры программ, я нисколько не пожалел, что выбрал OCI. Может, это вопрос привычки и опыта, но простой эта библиотека мне не показалась.
Создание сессии
Для каждой сессии нам нужно инициализировать хендл OCISvcCtx, именно он используется для выполнения sql-выражений. Я, руководствуясь демонстрационными примерами от Oracle, создавал сессии так:
Уже в процессе написания статьи, я увидел, что для этих же целей можно использовать функцию OCILogon2. Судя по всему, это намного проще и удобнее. А главное, нужно меньше писать кода. Но мы уже оставим все, как есть.
Получаем данные
Код для получения данных из базы:
При получении данных поступаем аналогично, привязываем переменные с запрошенными полями в селекте, выполняем выражение и затем в цикле одну за другой получаем строки
Почему существующие туториалы — плохие
Я немного поясню, почему я считаю существующие туториалы плохими. Апекс — это не язык программирования, это такой очень высокоуровневый инструмент разработки, ближайшим идейным аналогом которого я бы назвал MS Access. Соответственно, большая часть разработки на апексе состоит из работы с веб-интерфесом этой среды: нажимания на кнопки, перехода по ссылкам, заполнение полей с названиями компоментов, выбора значений из списков и так далее. Что делает типовой туториал? Он показывает скриншоты этих самых экранов с подписями "нажмите туда-то". При этом сама IDE достаточно удобная и понятная, почти все элементы снабжены справочными пояснениями, есть встроенная помощь. В итоге, если нужно объяснить пользователю, как создать приложение, в туториале будет большой скриншот, объясняющий, как нажать на кнопку "Create a new app". Вот, посмотрите сами на официальный оракловый туториал:
Они бы еще объяснили со скриншотами, что "клик" — это однократное нажатие на левую кнопку манипулятора типа "мышь".
Конечно, полезная информация в таких туториалах тоже есть, но ее там крохи. Процентов на 80 туториалы состоят из таких вот скриншотов, причем по своему опыту я могу сказать, что человек, не читавший никаких туториалов вообще, самостоятельно найдет, как создать приложение, добавить страницу, поместить на нее отчет и так далее. А потом ему нужно будет организовать более-менее нетривиальное взаимодействие нескольких элементов апекса, и оказывается, что этот вопрос туториалом почти не покрывается. Приведу аналогию: вы только-только учитесь программировать, изучили переменные, массивы, циклы, условия, и получили задание, в рамках выполнения которого вам нужно отсортировать массив. Как-то отсорировать массив — достаточно просто, но как только задание усложнится до "отсортировать большой массив быстро", окажется, что имеющихся у вас знаний недостаточно. Погуглив, покопав Stackoverflow и форумы, вы найдете алгоритм быстрой сортировки. Конечно, кто-то и сам переизобретет этот алгоритм рано или поздно, но более эффективным путем было бы сразу прочитать книжку с разбором типовых алгоритмов. И вот как раз такого набора "типовых алгоритмов" для апекса обычно нигде нет, а на помощь приходят те же самые метод научного тыка, поисковики, форумы и Stackoverflow (и, я надеюсь, этот туториал).
Обзор IDE
Стартовый экран, который вы увидите сразу после входа в IDE:
Главные элементы здесь — это 4 большие кликабельные картинки:
- "App Builder": это, собственно, то место, где можно создавать приложения и где вы будете проводить до 99% времени.
- "SQL Workshop": заменитель обычной IDE для работы с СУБД Oracle. Там вы можете посмотреть объекты БД (таблицы, индексы, пакеты, и т. п.) и выполнять SQL-запросы. Если у вас есть возможность делать все это через "обычные" IDE (вроде Oracle SQL Developer или PL/SQL Developer) — делайте через них. Тем не менее, этот раздел тоже может быть полезен и о нем я тоже расскажу.
- "Team Development": инструменты для командной разработки. Честно говоря, я ни разу не видел, чтобы хоть кто-то ими пользовался на практике (включая меня). Любопытства ради я туда тоже заглядывал и совсем бесполезным этот раздел я бы не назвал, хотя и очень хочется.
- "App Gallery": раздел с демо-приложениями. К тому моменту, когда он появился, я уже неплохо знал апекс и почти не заглядывал туда, но начинающим, думаю, это будет полезно. Там много разных простеньких приложений, на их примере можно изучать, как использовать те или иные возможности.
В меню в самом верху страницы продублированы эти же 4 пункта.
Кроме этого, есть еще несколько малополезных вещей: ниже есть некоторое количество статистической информации (типа наиболее часто редактируемых приложений или наиболее активных разработчиков). И есть колонка справа, где также немного статистики и дополнительных ссылок.
Рассмотрим App Builder и SQL Workshop подробнее.
App builder
Эта страница выглядит примерно вот так:
Основные элементы этой страницы: четыре большие кнопки как на предыдущей странице, список уже имеющихся приложений, правая колонка со списком последних измененных приложений и дополнительными действиями. Четыре кнопки — это:
- "Create": создать новое приложение. Эта же функция продублирована чуть ниже (синяя кнопка "Create" над отчетом со списком приложений). Кнопка запускает мастер создания приложений.
- "Import": импортировать приложение. Апекс позволяет переносить приложения с одного сервера на другой в виде текстовых файлов (которые, по сути, являются длииииными PL/SQL скриптами с вызовами функций создания всех элементов приложения).
- "Dashboard": малополезное сборище статистики разработки приложений. Кто, когда, где, сколько изменений сделал. Думаю, даже вашему начальнику будет неинтересно туда смотреть.
- "Workspace Utilities": набор дополнительных инструментов для управления приложением. Честно говоря, туда я тоже почти не заглядываю.
Так же хочу обратить ваше внимание на вот такую маленькую кнопочку в панели отчета:
Она переключает вид отчета с такого, как на скриншоте выше (с "картинками" приложений) на отчет в виде таблицы:
Похожие отчеты встречаются и в других разделах IDE. Я предпочитаю табличный вид, поэтому далее все скриншоты будут с ним.
После того, как вы создадите приложение или откроете существующее, вы увидите следующую страницу (очень похожую на предыдущую по структуре):
На эту страницу вы будете заходить очень часто, и полезных функций здесь тоже очень много. Большие кнопки с картинками:
- "Run Application": эта кнопка запускает ваше приложение. Оно откроется в отдельном окне. По умолчанию — именно в окне, а не во вкладке браузера, но это поведение настраивается (об этом позже).
- "Supporting Objects": этот раздел служит для решения вопросов, связанных с установкой, обновлением и удалением приложений. Обычно им почти не пользуются.
- "Shared Components": я бы сказал, это первый или второй по важности раздел IDE (еще один — редактор страниц). Если вы будете много разрабатывать на апексе, то очень скоро заметите, что выучили структуру этого раздела как "Отче наш".
- "Utilities": еще один набор (мало)полезных вспомогательных функций.
- "Export / Import": позволяет экспортировать или импортировать приложения или отдельные части приложения.
И две дополнительные кнопки, которые обведены оранжевой рамкой на скриншоте:
- Кнопка "Edit application properties". Нажав на нее, вы попадете на страницу настроек свойств приложения. Возможно, вы не будете заходить в этот раздел часто, но он очень важен, потому что там хранятся настройки приложения, от которых много чего зависит. Далее, если я буду упоминать где-то "свойства приложения" — ищите их в этом разделе.
- В кои-то веки полезная функция в правой панели: "Delete this Application". В то время как многие функции в апексе продублированы в разных местах, эта функция есть только здесь, и с непривычки первый раз ее найти сложно.
Application properties
Здесь прежде всего интересна организация доступа к большому количеству настроек.
Настройки сгруппированы в 4 группы (см. верхнюю рамку), а в каждой группе есть еще по нескольку подгрупп (см. нижнюю рамку), у каждой группы есть свое название. Похожим образом настройки организованы в очень многих местах в апексе. В дальнейшем я буду просто указывать путь к нужной настройке примерно так: "Application Properties" → "Definition" → "Name" → "Version".
Также, если вы посмотрите на хлебные крошки вверху страницы, вы увидите, что там написано "Edit Application Definition", хотя заходили вы, казалось бы, в "Application Properties". Просто не обращайте внимания.
Shared Components
Shared Components — это наше всё. Этот раздел является промежуточным пунктом на пути к конкретным компонентам приложений. Покажу здесь общий вид, просто чтобы вы представляли, где что находится:
Совсем неважной ерунды здесь почти нет. Каждый раздел вам так или иначе может понадобиться. Названия разделов говорят сами за себя, добавить почти нечего:
- "Application Logic": средства управления логикой приложения.
- "Security": вопросы безопасности и управления доступом к приложению целиком и к отдельным компонентам в зависимости от ролей пользователей.
- "Other Components": это "все остальные компоненты". По-хорошему, этому разделу следовало бы быть последним, но он почему-то здесь. А подпункт "List of Values" я бы вообще в Application Logic перенес.
- "Navigation": компоненты приложения для обеспечения навигации.
- "User Interface": настройка внешнего вида приложения, стилей и т. п.
- "Files": раздел для файлов (например, css или js). Незаменим, если у вас нет доступа к ОС, и все равно удобен, даже если доступ есть.
- "Data Sources": работа с источниками данных (для загрузки и выгрузки).
- "Reports": отчеты, очевидно.
- "Globalization": раздел для перевода приложений на другие языки.
Перевод приложений в апексе сделан просто ужасно (честно, я пытался придумать, как сделать его хуже — и не смог), и нет никаких свидетельств того, что в будущем станет лучше.
Ужасно с точки зрения архитектуры и удобства работы над переводом. Могу только сказать разработчикам: "Спасибо, что хотя бы без багов" (но тут как посмотреть: переводы устроены так, что некоторые особенности их работы мало чем отличаются от багов).
Приходится с этим жить.
Page Designer
Page Designer — редактор страниц. Это, наверное, главное место в IDE. Здесь вы будете создавать то, с чем напрямую взаимодействует пользователь, — страницы приложения. Здесь просто куча функций, почти как в кабине самолета. Чтобы попасть в Page Designer, нужно кликнуть по ссылке с названием страницы на странице приложения (извините за тавтологию). На скриншоте разноцветными рамками выделены основные составляющие редактора:
Панель кнопок вверху (в красной рамке):
- Поле для ввода номера страницы, стрелки вверх и вниз и кнопка "Go": навигация по страницам приложения. Каждая страница имеет номер, тут вы можете либо ввести номер нужной страницы, либо стрелками перейти к следующей/предыдущей, либо нажать на самую левую кнопку и в появившемся модальном окне выбрать страницу из списка.
- Кнопка с замком: позволяет заблокировать страницу от изменений другими разработчиками.
- Кнопки Undo/Redo
- Две кнопки с доступом к вспомогательным функциям.
- Кнопка-ссылка на Shared Components. Полезная, потому что туда-сюда ходить приходится постоянно. (Я сам, правда, предпочитаю просто держать Shared Components в отдельной вкладке — так еще быстрее).
- Кнопка "Save": сохраняет изменения на странице.
- Кнопка "Run": "запускает" страницу, то есть вы ее видите так, как ее потом увидит пользователь.
Слева (в оранжевой рамке) — панель с компонентами страницы. В этой панели есть 4 закладки:
- "Rendering": показывает, из каких составных частей состоит страница, какие процессы выполняются при рендеринге;
- "Dynamic Actions": действия, выполняемые на клиенте (например, обработчики событий javascript);
- "Processing": серверные процессы, связанные со страницей;
- "Page Shared Components": для прямого перехода к используемым на странице общим компонентам (те самые Shared Components).
По центру (в зеленой рамке) — панель, содержащая много разнородной информации. В верхней части панели есть 5 закладок, на которых можно найти:
Также центральная панель имеет снизу еще одну дополнительную панель, которую можно использовать для быстрого добавления компонентов на страницу.
Справа (в синей рамке) — панель свойств. Тут все просто — она показывает свойства выбранного в данный момент компонента. Часть свойств компонентов — простые: текст, число, значение из списка. Но у более сложных свойств компонентов есть дополнительные интерфейсные возможности, сильно облегчающие жизнь при работе с ними.
Свойство, представляющее собой большой текст. Например, код на PL/SQL или JavaScript. Выглядит так:
Можно писать код прямо так, в этом поле, а можно щелкнуть по кнопке вверху страва, и тогда откроется модальное окно с редактором кода, где доступны подсветка синтаксиса (для SQL, JavaScript, CSS, HTML), поиск в тексте и другие функции редактора.
Свойство — Shared Component. Если свойство является одним из компонентов приложения (Shared Component), то выбирать конкретный компонент можно из списка, а нажав на кнопку справа от списка
можно переместиться в раздел Shared Components непосредственно в свойства выбранного компонента (чтобы, например, их изменить).
Если у вас значение свойства выбирается из списка, иногда справа можно увидеть другую дополнительную кнопку:
Она называется "Quick pick" и используется, когда вариантов очень много. "Quick pick" дает чуть более быстрый доступ к небольшому подмножеству вариантов — как правило, там находятся наиболее часто используемые варианты. "Часто используемые варианты" здесь — не вами используемые, а "вообще". Это жестко заданный список и со временем не меняется.
SQL Workshop
Как я уже говорил, SQL Workshop — это заменитель обычной IDE (если у вас по каким-то причинам нет возможности ее использовать).
Он состоит из 5 разделов:
- "Object Browser": браузер объектов БД (таблиц, пакетов, функций и процедур, индексов, сиквенсов и прочего);
- "SQL Commands": раздел, где можно выполнить любой SQL запрос или PL/SQL код;
- "SQL Scripts": здесь можно загрузить текстовый файл со скриптом и выполнить его;
- "Utilities": разные дополнительные возможности, связанные с БД: например, есть графический построитель запросов (но не только);
- "RESTful Services": создание REST сервисов. Апекс тоже имеет REST (причем давно, еще в версии 4.2 они уже были)!
Object Browser
Здесь есть все, что нужно для работы с объектами БД: создание, изменение, удаление, просмотр свойств объектов, ввод данных в таблицы — для всего этого в этом разделе есть графический интерфейс. Вверху слева в выпадающем списке можно выбрать тип объектов (на скриншоте показаны таблицы), вверху справа можно выбрать схему, объекты которой вы можете посмотреть. В списке доступных схем вы не увидите все схемы сразу — это нормально. Как сделать схемы видимыми в апексе, я расскажу, когда дойду до администрирования.
Также я не вижу большого смысла описывать этот раздел подробнее: если вы знаете, что значит фраза "добавить столбец в таблицу", вы без труда догадаетесь, когда вам нужно будет нажимать на кнопку "Add Column" и что вас может ждать дальше.
SQL Commands
В этом разделе можно выполнять SQL запросы и PL/SQL код.
По возможностям этот раздел почти не уступает полноценным средам разработки. Не хватает разве что автодополнения кода и подсветки синтаксиса (а в Object Browser подсветка синтаксиса есть, кстати). Имеющиеся возможности:
- выполнение SQL, в том числе с параметрами (для ввода значений параметров появится отдельное окно);
- выполнение PL/SQL с возможностью вывода текста через dbms_output (вывод появится в окне ниже);
- выполнение только выделенной части кода (выделить текст мышкой, затем "Run");
- просмотр плана запроса;
- сохранение запросов.
Это, как вы понимаете, далеко не всё, что есть в IDE APEX, но на данном этапе не имеет смысла углубляться дальше. Отдельные элементы интерфейса апекса будут разобраны более подробно в темах, которые имеют к ним непосредственное отношение.
P. S. Я пока не могу сказать, что четко продумал структуру этого туториала, возможно, в будущем я добавлю еще скриншоты и описания в эту статью или опишу дополнительные возможности в других статьях. Осталось придумать, как оповещать заинтересованных о значительных правках старых статей.
Хабр, привет! Вообще-то я не настоящий сварщик программист, я системный администратор и администратор БД. Поэтому, когда несколько лет назад передо мной встала задача написать небольшое клиентское приложение для автоматизации рутинных процедур, я потратил немало времени, чтобы разобраться в этом вопросе. Если вдруг у вас примерно такая же ситуация, надеюсь, эта статья сэкономит ваше время и силы.
Вставляем данные
Пример функции для загрузки данных в базу:
В целях увеличения быстродействия и экономии ресурсов базы в случае множественных инсертов нужно вначале подготовить выражение с заполнителями типа :id и :string, связать их с соответствующими переменными, и затем изменять значение переменных и выполнять выражение.
5- Таблица и данные Demo
В предыдущем шаге вы создали Schema DEV через Oracle APEX, данная schema имеет только таблицу систем и некоторые таблицы для DEMO созданные в Oracle APEX. И некоторые связанные Sequence.
Вводная информация
Предполагается, что читатель знаком с Oracle Database версии хотя бы с 11-й, SQL, PL/SQL и особенно с тем, что такое EXECUTE IMMEDIATE и как оно работает.
Я начну с обзора наиболее часто используемых разделов IDE. Я тоже покажу несколько скриншотов. Куда же без них, раз всё здесь сделано из визуальных компонентов. Но их будет не так много, как в плохих туториалах, и в основном они будут в начальных главах, а дальше я буду просто указывать название раздела IDE, в котором находятся необходимые вещи. Сразу обращу ваше внимание, что это просто первое знакомство с IDE. Более подробная информация о том, когда на какую кнопку нажимать и где что смотреть, будет дана дальше, когда я перейду к конкретным темам.
1- Введение
Инициализация окружения
Далее нам нужно инициализировать структуры OCIEnv (хендл окружения) и OCIError (хендл для обработки ошибок).
Читайте также: