Продолжение туториала.


В этой части описаны процессы создания приложения Oracle APEX и создания страниц в приложении.


Предыдущая часть: Туториал по Oracle Application Express. Обзор IDE


Оглавление


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


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


Чтобы создать приложение, нужно зайти в App Builder и нажать кнопку "Create".


Историческая справка о типах приложений

В прошлых версиях апекса на первом шаге мастер предлагал выбрать тип приложения (в версиях 4.х, если мне память не изменяет, это были типы "Database application" и "Websheet Application", в версиях 5.х — "Desktop", "Mobile", "Websheet" и "Packaged Application"), в текущей версии все остальные типы задвинули немного в сторону (хотя "Websheet" остался), и нужно выбрать просто "New Application". А "Packaged Application" — это те самые демо-приложения из App Gallery.


Далее запустится мастер создания приложения. На первом шаге нужно выбрать "New Application", на втором — достаточно заполнить поля "Name" ("Название") и "Application ID" (номер приложения). Название нужно просто потому, что это обязательное для заполнения поле, а Application ID — потому что потом поменять его будет нельзя. Точнее можно (через экспорт/импорт), но это долго и нудобно, лучше сразу задать нужный номер, если автоматически сгенерированный апексом не устраивает. Номер должен быть уникальным. Этот номер используется как часть адреса приложения. Посмотрим на типичный URL апекса:


https://apex.oracle.com/pls/apex/f?p=123456:1:14675052744498:::::

Здесь 123456 — это ID приложения.


На остальные поля в мастере можно пока не обращать внимания, все эти настройки можно будет поменять позже.


После этого нужно нажать "Create Application", апекс создаст приложение и автоматически переместит вас на страницу приложения, где вы увидите.


Страницы, создаваемые по умолчанию


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


https://apex.oracle.com/pls/apex/f?p=APPLICATION_ID:PAGE_ID:<остальная часть url>

Созданные по умолчанию страницы — это:


  • Global page (ID страницы: 0)
    Это специальная страница, которая не используется самостоятельно, но на которую можно добавить какой-нибудь элемент, если нужно, чтобы он отображался на всех страницах.
  • Home page (ID страницы: 1)
    Это стартовая страница приложения. На нее вы будете попадать по умолчанию после того, как введете логин и пароль в приложении, или если вы укажете URL вашего приложения без указания страницы и всего остального, то есть вот так:


    https://apex.oracle.com/pls/apex/f?p=123456

  • Login page (ID страницы: 9999, в версиях 4.х, 5.х был 101)
    Это, очевидно, страница логина. Она содержит поля для ввода логина и пароля, с некоторых пор (затрудняюсь назвать версию, но относительно недавно) — галочку "Remember username", и кнопку "Sign In".

Приложения и страницы имеют также полезное свойство Alias. Для приложения это свойство настраивается в свойствах приложения ("Application Properties" — "Definition" — "Name" — "Application Alias"), а для страницы — в редакторе страниц в панели свойств справа. Alias можно использовать в URL страницы вместо номера. Страница логина по умолчанию создается с алиасом LOGIN_DESKTOP, а домашняя страница — с алиасом HOME. Если задать приложению алиас MY_APP, то на страницу логина можно будет зайти по адресу


https://apex.oracle.com/pls/apex/f?p=MY_APP:LOGIN_DESKTOP

#define true false (или я знаю, о чем вы подумали)

Что будет, если приложению 123 сделать алиас 456, а приложению 456 — алиас 123? Ничего не будет, апекс не даст сделать такие алиасы приложениям. Четко в справке это не прописано, но алиас приложения, кажется, должен подчиняться правилам для имен идентификаторов в PL/SQL.
Что будет, если странице 123 сделать алиас 456, а странице 456 — алиас 123? Ничего не будет, страницам такие алиасы давать можно, но они будут проигнорированы. 123 в url откроет страницу с номером 123.


Запуск приложения


Теперь, когда приложение создано, его уже можно "запустить" (только смотреть там пока не на что). Это не совсем тоже самое, что запуск обычного приложения (как в Windows или в Linux). Приложение апекса рендерится тем же движком, что и сама IDE, так что как только вы создали приложение, оно мгновенно готово к использованию, и любой человек, который введет его адрес в адресную строку, сможет с ним работать. Сам запуск приложения, фактически, — это просто такое название для открытия стартовой страницы (той, которая с номером 1). Запустить приложение можно многими способами:


  • в App Builder в списке приложений есть столбец "Run" с кнопкой напротив каждого приложения;
  • на странице приложения есть большая кнопка "Run Application";
  • можно "запустить" не только приложение, но и любую недиалоговую страницу (диалоговые можно только вызвать с обычных страниц): в списке страниц приложения тоже есть столбец с кнопкой "Run";
  • можно запустить текущую страницу из редактора страниц, нажав на кнопку в верхнем правом углу;
  • и, наконец, можно запустить страницу, если в верхнем правом углу есть такие кнопки:

запуск страницы


Эти две кнопки есть почти в любом разделе IDE. Левая содержит номер последней страницы, которую вы открывали в редакторе страниц. Нажав на нее, вы перейдете к редактированию этой страницы, а нажав на правую кнопку, вы запустите эту страницу.


Что случится после запуска? Если запускаемая страница имеет ограниченный доступ, сначала пользователь будет перенаправлен на страницу логина. Если пользователь уже залогинен, или страница с настройках обозначена как общедоступная, то откроется сама эта страница.
По умолчанию страница создается с ограниченным доступом. В свойствах страницы (Редактор страниц — правая панель — группа свойств "Security" — "Authentication") есть две возможные настройки:


  • Page Requires Authentication: страница будет доступна только залогиненным пользователям в течении сессии;
  • Page is Public: общедоступная страница, видна зарегистрированным и незарегистрированным пользователям.

Создание страниц


Создать страницу можно на странице приложения. Нажмите "Create", после чего запустится мастер создания страниц. Шаги мастера:


  1. Выбор типа страницы из (на данный момент) 12 типов, некоторые из которых имеют еще и подтипы (если они есть, то появятся на следующем шаге). Первый тип из списка — "Blank page", то есть пустая страница без всего. Остальные типы — это часто встречающиеся варианты страниц для работы с БД: отчеты, формы ввода, графики и т. п. Здесь я опишу процесс создания пустой страницы, а по остальным типам будет отдельная статья.
  2. Ввод номера и названия страницы. О номерах я говорил выше; номер задается на этом шаге и потом изменить его будет нельзя, так что смотрите внимательно. Иногда разработчики разбивают страницы на группы (по функциональному назначению, например), и за каждой группой резервируют диапазон номеров, так что если у вас в проекте такое используется, будьте внимательны. Тут же нужно выбрать тип страницы: обычная, модальный диалог, немодальный диалог.
  3. Настройка элементов навигации. Можно пропустить (нажать "Next") и настроить потом (хотя если у вас уже выстроена какая-то система навигации, удобно сразу задать всё на этом шаге и больше не париться).
  4. Подтверждение создания.

После этого страница создана и готова к использованию.


Основные компоненты страниц


Визуальные элементы


Визуальные элементы — это элементы, которые так или иначе отображаются на экране. Это:


  • Верхнее меню. Содержит название приложения, логотип, имя пользователя, ссылку "Logout" (если пользователь залогинен). Туда же можно добавлять другие элементы;
  • Меню навигации слева. Можно использовать для навигации по приложению, сделав, например, иерархическую структуру разделов приложения;
  • Regions (обычно по-русски их так и называют — "регионы"): контейнеры элементов. Могут содержать в себе отчеты, графики, поля для ввода, кнопки и другие регионы;
  • Items (устоявшегося перевода на русский нет, называют кто во что горазд, обычно используют слова item, поле и часто просто итем): это разнообразные поля для пользовательского ввода;
  • Buttons (кнопки): ну, это обычные кнопки, короче, что тут еще сказать ;)
  • Отчеты: таблицы с данными на основе SQL запросов;
  • Графики/диаграммы: графическое отображение информации из БД, также на основе SQL запросов.

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


Невизуальные элементы


Это элементы для обеспечения логики работы приложения. Там на самом деле огромное разнообразие элементов, хотя пользователю их и в буквальном смысле не видно. Основные типы:


  • Process (процесс): как правило, PL/SQL код, выполняемый на сервере в ответ на какое-либо действие пользователя;
  • Validation (валидация): разновидность процессов для проверки пользовательского ввода;
  • Dynamic Action (нет устоявшегося перевода, обычно все так и пишут — Dynamic Action или просто DA, а когда лень раскладку переключать, могут написать динамик экшен или ДА): процесс, выполняемый браузером. В конечном счете DA — это обработчик какого-либо события javascript. Знать javascript необязательно, но если знать (а заодно и CSS селекторы) — можно творить чудеса;
  • Branches (нет устоявшегося перевода): редиректы на другие страницы в зависимости от некоторых условий.

Основные свойства элементов


Общие свойства


Основные свойства, характерные для каждого (или почти каждого) типа элементов. Их можно смотреть и изменять в редакторе страниц, там они собраны в группы. Здесь я вкратце опишу их назначение (так что вы будете знать, что где искать), а более подробно расскажу в других статьях.


  • Identification: задает название элемента и дополнительные совйства (в зависимости от типа);
  • Appearance: свойства, отвечающие за внешний вид визуального элемента. Для каждого типа элементов существует набор шаблонов, вы можете выбрать один из них здесь (свойство Template). Также шаблоны имеют дополнительные настройки (Template Options — по нажатию на кнопку откроется окно с настройками);
  • Layout: настройка положения визуального элемента на странице. Элементы располагаются в сетке из 12 колонок, здесь можно указать, как именно они должны располагаться;
  • Source: у регионов и итемов — источник данных для отображения, у процессов — код процесса;
  • Server-side Condition: условие, проверяемое на сервере (есть огромный выбор условий, от простых, типа такой-то элемент имеет такое-то значение, до произвольного PL/SQL кода). Элемент будет отображаться на странице, если это условие выполняется, а если нет — то не будет. Причем он будет не скрыт, а просто не отрендерится;
  • Client-side ConditionDynamic Action): условие, проверяемое на клиенте (без обращения к серверу). DA будет выполнено, если условие выполняется;
  • Read only: работает так же, как и Server-side Condition, только управляет не наличием/отсутствием элемента, а возможностью менять значение. Это свойство есть у итемов, регионов и страниц. У итема оно применяется к самому итему, а у регионов/страниц — ко всем итемам внутри соответствующего региона/страницы;
  • Security: управление доступом к элементу. В принципе, все тоже самое можно сделать и с помощью Server-side Condition, но лучше разграничить: Server-side Condition — для логики приложения, Security — для отображения в зависимости от прав доступа.
  • Configuration: для включения/выключения Build Option. Очень неочевидная вещь, но очень полезная: позволяет включать и выключать отдельные фичи приложения, что очень удобно, когда вы разрабатываете параллельно фичи для нескольких разных релизов;
  • Comments: комментарии для других разработчиков;
  • Help (у визуальных элементов): справка для конечных пользователей приложения.

Свойства страниц


Свойства, характерные только для страниц:


  • Navigation: в этой группе два свойства. Cursor Focus указывает, передавать ли фокус полю для ввода на странице сразу после заргузки (варианты — либо не передавать, либо передавать первому полю на странице). Warn on Unsaved Changes не дает пользователю уйти со страницы, если там есть несохраненные данные;
  • JavaScript: позволяет добавить JavaScript код на страницу. Можно указать путь к файлу или добавить свой код прямо на страницу;
  • CSS: то же самое для CSS. Подключить файл или добавить на страницу, если нужная какая-то локальная настройка CSS только для этой страницы;
  • Advanced: позволяет включить или отключить защиту от повторной отправки формы.

Комментарии (5)


  1. Cobolorum
    03.04.2019 08:39

    APEX это Good! Хотя довольно часто непонятна логика и компонет и алгоритмов работы. Сравнивая APEX с Delphi, MS Acces и Delphi for PHP понимаешь Oracle-у надо еще много сделать.
    Но к подаче материалом автором есть замечание. То что описывает в этой и предыдущей частях лежит на поверхность в документации, если этивещи не получается освоить самостоятельно то лучше не надо изучать данную технологию-она для вас. А в вот описать сложные задачи и рецепты и как их сделать вот то было бы супер.


    1. StrangerInTheKy Автор
      03.04.2019 12:19

      А в вот описать сложные задачи и рецепты и как их сделать вот то было бы супер.
      Я несколько раз пробовал начинать писать про что-нибудь, не лежащее на поверхности, но каждый раз быстро надоедало. Написал один пост, второй, третий, а о чем еще писать — непонятно. А тут идея в том, чтобы написать полный туториал с нуля и докуда сил хватит (писать только про простые вещи не буду, какие-нибудь хитрости тоже опишу). И не надо каждый раз мучительно тему придумывать (о том-то еще не написал? Ща напишу), и выглядеть будет монументально, и не стыдно людям показать. Потом еще и на английский переведу!


  1. Codenamed
    03.04.2019 08:49

    А я вот наоборот признателен за такое общее описание функциональности. Как раз начал изучать подобные решения, чтобы сделать для себя краткое сравнение, а тут в готовом виде подъехал материал!

    Сравнение APEX с другими аналогичными решениями было бы тоже интересно почитать :)


    1. epishman
      03.04.2019 12:22

      Лет 5 назад ковырял этот APEX, думал слезть с WEB-клиента 1С, но не смог, ибо слишком примитивно получалось — те же лукапы, поиск, кастомизация форм в 1С на голову выше. Было такое впечатление, что Oracle этот продукт спускает на тормозах, было бы оно совсем бесплатно, а так непонятно кому и зачем.


      1. StrangerInTheKy Автор
        03.04.2019 12:35

        было бы оно совсем бесплатно
        В смысле? Оно и есть совсем бесплатно, по крайней мере до тех пор, пока существуют XE версии оракла…