Oracle report server в какой таблице
Перейти к содержимому

Oracle report server в какой таблице

как проверить состояние сервера отчетов Oracle?

Чтобы проверить состояние серверов баз данных, я использую утилиту tnsping. Есть ли аналогичная утилита для проверки сервера отчетов? Спасибо.

2 ответа

Без доступа к консоли администратора ReportServer это может быть сложно. Но вызов / reports / rwservlet / showjobs? Server = может помочь вам. Если вы получили ответ, он подтверждает, что сервер запущен, и покажет вам все выполняемые задания.

В прошлом я также реализовал процедуру, которая периодически запускает минимальный отчет с использованием utl_http и ищет разумный ответ. Затем отправляет электронное письмо, если истекает время ожидания, или появляется ошибка HTTP или ошибка сервера отчета.

Я согласен с Джимом Хадсоном, Oracle Application Server Control — это самый простой метод мониторинга серверов отчетов Oracle.

Однако вы можете получить некоторую информацию о статусе, выполнив следующую команду:

Oracle APEX. Отчеты

В этой статье описываются три типа отчетов апекса: Classic Report, Interactive Report (IR) и Interactive Grid (IG). Classic Report — самый простой из них, но в сочетании с другими компонентами позволяет делать достаточно неожиданные вещи. IR и IG обладают намного более широкими возможностями из коробки, но это в значительной степени вещи в себе. С одной стороны, их широкие возможности делают ненужным какой-то дополнительный тюнинг, с другой, эти же возможности довольно жестко ограничивают возможность сделать что-то дополнительно. Многое из того, что применимо к Classic Report, применимо и к ним тоже.

КДПВ

Оглавление

Classic Report

Создать отчет можно двумя способами. Первый — создать вместе со страницей, через мастер создания страниц: выбрать тип страницы «Report», далее — подтип «Classic Report», далее пройти шаги мастера для задания свойств страницы, и последний шаг — указать источник данных. Будет создана новая страница с одним отчетом, на которую, при желании, можно потом добавить что-нибудь еще. Этот способ имеет скорее историческую ценность, до появления современного Page Designer в версии 5.0 так было действительно проще.

Второй способ — на уже созданной странице в Page Designer в левом меню на закладке » Rendering » (она там первая) найти ветку » Regions «, кликнуть на ней правой кнопкой и выбрать » Create Region «. Далее нужно указать в группе свойств » Identification » на правой панели: » Title » — заголовок, под которым отчет будет отображаться на странице, и » Type » — » Classic Report «; в группе » Source «: » Location » — » Local Database » (относительно новое поле, в 5.х его не было), » Type » — » SQL Query «, » SQL Query » — собственно запрос. Этого достаточно.

Запрос для отчета:

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

Настройки отчета

Здесь есть три основных раздела:

  • раздел, названием которого является » Title » региона: там настраиваются свойства региона;
  • » Columns «: список столбцов, для каждого доступны свои настройки;
  • » Attributes «: свойства самого отчета, то есть конкретно таблички с данными (не знаю, кто как, а я поначалу долго путался, где свойства региона, а где — отчета; в частности, и регион, и отчет имеют каждый свой » Template «, и если вы » Template » поменяли, а вид отчета/региона не изменился, проверьте, не перепутали ли вы их друг с другом).

Базовые возможности Classic Report:

  • Выравнивание (по левому краю, по центру, по правому краю) заголовков столбцов и данных в столбцах, задание маски формата для чисел и дат;
  • Сортировка: если указать в свойствах столбца » Sortable » — » Yes «, то на странице заголовок этого столбца будет представлен ссылкой, по клику на которую будет происходить сортировка. Вы можете сортировать данные либо добавлением » Order by » в запрос, либо настройкой сортировки в свойствах столбцов, но нельзя делать и то, и другое вместе;
  • » Pagination «: можно указать количество строк на страницу (» Attributes » → » Number of Rows «) и настроить вид селектора страницы (несколько вариантов на выбор). Также обратите внимание на параметр » Maximum Rows to Process «: он задает, сколько строк запроса попадет в итоге в таблицу. Все сортировки, » Pagination » и прочее будет применяться к этому количеству строк. Если ваш запрос, как предполагается, может/должен возвращать больше, увеличьте это число;
  • » When No Data Found «: когда запрос возвращает 0 строк, таблица не показывается вообще (даже заголовок, это особенность движка), а в этом разделе можно задать сообщение, которое будет выведено вместо таблицы с результатом;
  • Выгрузка данных в CSV: настраивается в разделе » Download «.

У столбцов есть поле «Type», в котором можно выбрать один из нескольких вариантов отображения результата:

  • «Plain Text»: это вариант по умолчанию — просто результат из запроса.
  • «Plain Text (based on List of Values)»: если у вас в результатах запроса есть поле, ссылающееся на таблицу-справочник, можно подставить значение из справочника с помощью этого поля (но лучше, конечно, просто приджойнить его в самом запросе).
  • «Link»: позволяет сделать ссылку. О ссылках будет отдельная статья.
  • «Display Image» и «Download BLOB»: эти типы позволяют получить доступ к файлам, которые хранятся в таблице в столбце типа BLOB . Первый отображает файл в виде картинки (если это картинка, конечно), а второй — отображает ссылку для скачивания.
  • «Percent Graph»: отображает число от 0 до 100 как картинку с прогресс-баром.
  • «Hidden Column»: используется, когда значение из запроса — это что-то вспомогательное (например, для форматирования), но на экране отображаться не должно.

Дополнительное форматирование данных

Форматирование с помощью свойств столбцов

Рассмотрим пример, в котором у нас есть список учащихся, сдающих некий экзамен (SQL запрос был приведен выше). У нас есть табличка с результатами, и мы хотим выделить три лучших результата красным цветом и жирным шрифтом. На помощь нам приходят настройки столбца » Column formatting «. Когда апекс рендерит отчет, он создает HTML таблицу, и в ее ячейки ( <td></td> ) помещает значения из результатов запроса. Свойство » HTML Expression » позволяет задать вместо этого произвольный HTML код. Если оно пустое, апекс поместит внутрь тега td значение из запроса, а если непустое — то содержание свойства. В выражении » HTML Expression » можно использовать ссылки на значение какого-либо столбца запроса, для этого нужно заключить его название между двух символов # . В запросе в моем примере есть столбцы » RATING » (результат, который нужно показать), и » COLOR » (в нем вычисляется имя CSS-класса, который будет задавать стиль подсветки, в зависимости от значения столбца » RATING «). В свойстве » HTML Expression » столбца » RATING » нужно написать:

А сам CSS-класс highrating можно описать в свойствах страницы (» CSS » → » Inline «):

Всё готово. Если теперь открыть страницу, вы увидите выделенные красным три самых высоких результата.

И конечно, данную задачу можно решить множеством альтернативных способов. Например, не использовать CSS-классы, а вычислить в SQL запросе цвет и вставить его в атрибут style , или описать нужный CSS-класс в шаблоне страницы или отчета. Существует множество вариаций, выбирайте, кому что ближе.

Примечание: чтобы скрыть все дополнительные столбцы, используемые для форматирования или каких-то промежуточных вычислений, в свойствах столбца » Identification » → » Type » выберите » Hidden Column «.

Форматирование путем изменения шаблона

У форматирования с помощью свойств столбца есть один недостаток: никак нельзя повлиять на формат самой ячейки, то есть тега td . Из-за этого, например, не получится сделать полную заливку ячейки каким-либо цветом (потому что в стандартных апексовых CSS-файлах у ячейки таблицы ненулевой padding , и внутри будет белая рамка).

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

Для этого нужно сделать следующие шаги:

    Отправляемся в » Shared Components » → » User Interface » → » Templates «, в появившемся списке шаблонов кликаем на заголовок столбца » Type «, и в появившемся списке значений выбираем » Report «. Теперь находим шаблон » Standard » (он используется по умолчанию) и в самом правом столбце списка (» Copy «) кликаем на кнопку, чтобы создать копию шаблона. В появившемся окне даем шаблону название, например, «Standard with highlight».

Открываются свойства шаблона. На закладке » Column Template » в поле » Column Template 1 » содержится что-то вроде такого:

Это шаблон ячейки в том виде, как он используется сейчас. На этой закладке можно задать до четырех альтернативных шаблонов ячейки, выбор между которыми будет осуществляться в зависимости от результата вычисления условия каждого из шаблонов. У нас в запросе есть поле RN — порядковый номер результата (то есть лучший результат имеет номер 1, следующий — 2, и так далее), здесь мы будем использовать его. Первый шаблон (по условию задачи) должен применяться только к строкам, в которых значение столбца RN больше трёх. В свойствах шаблона в поле » Column Template 1 Condition » выбираем » Use Based on PL/SQL Expression «, а в поле » Column Template 1 Expression » пишем:

И остается только добавить альтернативный шаблон (в поле » Column Template 2 «):

Здесь к стандартному классу ячейки ( td ) добавлен класс highlighted . Теперь осталось нажать на кнопку «Apply Changes».

Сохраняем страницу, проверяем результат (он должен быть как на картинке в начале статьи).

Добавляем интерактива

События вида «клик на строке отчета»

Одна из часто встречающихся задач — определить номер строки, на которую кликнул пользователь. За события в браузере в апексе отвечают компоненты Dynamic Action (DA). К сожалению, несмотря на большое количество самых разных их видов, типового DA для обработки клика на строке отчета нет. Но его относительно просто сымитировать. В качестве примера сделаем Master-Detail отчет из двух Classic Report на основе отчета из предыдущего раздела.
Вторым отчетом здесь будет выступать таблица с номерами телефонов. По клику на первой таблице она будет обновляться и показывать номер телефона выбранного человека (причем без перезагрузки страницы!). Для этого отчета создадим еще один регион типа «Classic Report».

Необходимые составляющие решения:

Способ идентификации выбранной пользователем строки. Для этой цели подойдет столбец ID . К сожалению, если этот столбец пометить как скрытый (очень часто лишние айдишники не показывают пользователю, чтобы не перегружать интерфейс), он не будет рендериться движком вообще, и эти данные никак не будут присутствовать на странице. Но их можно добавить к существующему столбцу тем же способом, что использовался для форматирования вывода. Возьмем какой-нибудь столбец (например, первый из видимых) и в поле » Column formatting » → » HTML Expression » напишем:

Есть другой вариант сделать то же самое — добавить этот HTML код прямо в запрос:

Результат в целом будет тот же, но перестанет работать сортировка по полю name , потому что движок СУБД будет считать всю эту строку данными и сортировать по ней. А если делать через » Column formatting «, то данные, по которым будет делаться сортировка, не будут содержать ничего лишнего.
К тому же, в этом случае для вывода HTML кода в столбце вам придется отказаться от экранирования спецсимволов, а это еще и потенциальная дыра в безопасности.

Далее нужно создать Dynamic Action. Открываем Page Designer, в левой панели на закладке «Dynamic Actions» находим ветку «Click», кликаем на ней правой кнопкой, выбираем в меню «Create Dynamic Action». Далее нужно заполнить следующие свойства DA:

  • » Identification » → » Name «: какое-нибудь осмысленное имя, иначе вы потеряетесь в этих бесконечных «New», «New2», «New3» и т. д.;
  • » When » → » Selection Type «: » jQuery Selector «;

в появившемся далее поле » jQuery Selector «: здесь можно указать селектор, который будет указывать на дополнительный невидимый span с идентификатором строки:

Далее у этого DA создадим действия (» True Actions «):

Первое действие получает ID выбранной строки и сохраняет его в итем. Нужно установить следующие значения свойств: » Action » — » Set Value «, » Set Type » — » JavaScript Expression «, » JavaScript Expression » — следующий код:

В свойстве » Affected Elements » → » Selection Type » выбрать » Item(s) «, в свойстве » Item(s) » указать итем P2_ROW_ID .

В будущем я напишу отдельную подробную статью про DA и многие другие компоненты апекса начального уровня, чтобы любой новичок сразу понял, как и что из описанного далее работает, а пока представим, что читатель все это уже знает.

На этом всё. Если вы сделали все эти шаги и ничего не пропустили, у вас на странице будут два отчета, и при клике на любой строке первого отчета второй будет обновляться и показывать данные выбранного человека.

Изменение данных с помощью Classic Report

В апексе с древних версий существовал вид отчета, известный как Tabular Form (он и сейчас в принципе существует, хотя и помечен как Legacy), который позволял изменять данные в нескольких строках таблицы сразу. На смену ему пришел намного более мощный Interactive Grid. Здесь же я продемонстрирую, как из подручных средств можно собрать аналог теплого лампового Tabular Form. Возьмем ту же таблицу, что и в прошлом примере, и добавим возможность редактировать имя и фамилию человека.
Для редактирования данных, количество которых заранее неизвестно даже приблизительно, нам понадобятся пакеты APEX_ITEM и APEX_APPLICATION . Первый позволяет создавать любые итемы в рантайме (созданием, в данном случае, является генерация соответствующего HTML), а второй — получать доступ к данным, введенным в созданные в рантайме поля.
Рассмотрим на примере функции APEX_ITEM.TEXT (она возвращает HTML код простого текстового инпута). Вот как объявлена эта функция в документации:

Параметры начиная со второго описывают, что будет содержать HTML код: значение в поле для ввода, дополнительные атрибуты, ограничения на длину и т. п. Самый важный в нашем случае параметр — первый (он же единственный обязательный, остальные имеют дефолтные значения). Этот параметр может принимать значения от 1 до 50, и потом введенное здесь число будет использоваться для доступа к данным, введенным пользователем. Каждому числу соответствует PL/SQL коллекция APEX_APPLICATION.G_FXX , где XX — это 01 , 02 ,… 50 .
Для нашей задачи нужны три поля таблицы: id , name , surname . Первое должно быть скрытым, второе и третье — полями для ввода.

Создаем отчет на базе SQL запроса:

Создаем процесс » After Submit » со свойствами: » Identification » → » Type » — » PL/SQL «; » Server-side Conditions » → » When Button Pressed » — кнопка » Save «. И код для сохранения данных в БД:

Как видите, выглядит совсем просто. Осталось только упомянуть один неприятный подводный камень в работе с APEX_ITEM . Если вы таким образом хотите добавить в отчет чекбоксы:

То у вас в коллекции APEX_APPLICATION.G_F04 окажется столько элементов, сколько чекбоксов отмечено, в то время как во всех остальных коллекциях число элементов будет равно числу строк, отображенных на экране, а в содержимое коллекции попадет значение, которое вы передаете вторым параметром в функцию apex_item.checkbox2 . Таким образом, если вы используете коллекцию с данными из чекбоксов в коде, аналогичном приведенному выше, вы можете столкнуться с исключением NO DATA FOUND .

Interactive Report (IR)

Interactive Report — это готовый к применению многоцелевой комбайн, в котором из коробки есть огромное количество функций для работы с данными. Все, что нужно, это включить их в настройках (точнее, не отключать, потому что по умолчанию там почти всё включено). На странице IR выглядит почти как обычный отчет, только над ним есть еще дополнительная панель с полем ввода для поиска и кнопкой » Actions «. Кнопка » Actions » показывает дополнительное меню, из которого доступны все остальные функции. Я только вкратце перечислю возможности:

  • Панель поиска: позволяет искать заданный текст во всех столбцах отчета;
  • » Actions » → » Columns «: настройка отображения столбцов (порядок следования, скрыть/показать);
  • » Actions » → » Filter «: инструменты фильтрации данных, позволяют выбрать поле, операцию фильтрации (больше, меньше, равно, содержит текст, и т. д.);
  • » Actions » → » Data «: манипуляции с данными (сортировка, вычисления, агрегирование и Flashback);
  • » Actions » → » Format «: настройка отображения данных; позволяет подсвечивать нужные данные (настраиваются цвета подсветки и условия на данные), делать Control Break (не знаю, как это называется по-русски, выглядит это так), выбирать число строк отчета на странице;
  • » Actions » → » Chart «, » Group by «, » Pivot «: названия говорят сами за себя — построение диаграмм, графиков, сводных отчетов на основе данных IR;
  • » Actions » → » Report «: позволяет конечному пользователю сохранить отчет с определенным именем. В этом случае сохранятся все сделанные настройки из всех пунктов меню, описанных выше, и у каждого пользователя они будут свои;
  • » Actions » → » Download «: экспорт данных, поддерживаются 5 форматов: CSV, PDF, XLS, HTML, RTF.

Что из перечисленного выше будет доступно пользователю, настраивается в свойствах отчета: » Attributes » → группы свойств » Search Bar «, » Actions Menu «, » Download «.
К Interactive Report применимо практически все то же самое, что и к Classic Report. Точно так же можно делать собственное форматирование столбцов, использовать HTML элементы в столбцах (отключая при этом экранирование спецсимволов). Также есть дополнительный тип столбца — » Remove HTML «, который убирает HTML теги из результата запроса (я лично ни разу не сталкивался с тем, чтобы это было нужно).
Но есть пара нюансов, на которые стоит сразу обратить внимание.
Во-первых, у IR в атрибутах отчета нет свойства » Template «. То есть если вы разрабатываете своё собственное оформление, CSS-стили и прочее, то вы в пролете — IR будет выглядеть только так, как это заложено в него изначально. Выбирать придется из того, что есть. (Точнее, способ все-таки есть, но такой окольный, что проще считать, что его нет.)
Во-вторых, очень коряво устроена настройка порядка следования столбцов. Поле » Sequence » у столбцов есть, но оно не работает. Чтобы изменить порядок столбцов, вам придется сделать следующее: создать отчет, запустить страницу с ним, открыть меню » Actions » → » Columns » и настроить порядок через него. Далее нужно сохранить: там же в » Actions » → » Report » выбрать » Save Report «, а в появившемся окне выбрать тип » Primary » — тогда текущий вид отчета сохранится для всех пользователей как основной (а чтобы тип » Primary » был доступен, вы должны быть залогинены в IDE как разработчик и запустить страницу из IDE).

Interactive Grid (IG)

Interactive Grid — это логическое продолжение Interactive Report. Впервые он появился в версии 5.1. IG выглядит почти как IR, но в дополнение он имеет режим редактирования, а также несколько дополнительных возможностей. Еще IG имеет богатое javascript API, но публичным оно стало только совсем недавно (версии с 18.2, кажется). По этой причине я не успел с ним достаточно хорошо ознакомиться.

До публикации документации приходилось довольствоваться только циклом из четырех статей (раз, два, три, четыре), основанных, как я понимаю, на результатах реверс-инжиниринга в браузерном отладчике. Вся официальная документация для версии 5.1, с которой я работал больше всего, выглядела вот так:

Оффдокументация JS API IG

Возможно, вы будете смеяться (а мне тогда было не смешно), но даже эта единственная документированная строчка кода была неправильной. Чтобы добавить строку к отчету (код делает именно это), вместо .invoke( «add-row» ) нужно было написать .invoke( «row-add-row» ) .
Но теперь-то, надеюсь, заживем.

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

Вторая причина (общая с IR) — это архитектурная кривизна. Для настройки (и сохранения настроек) порядка столбцов нужно запустить страницу с отчетом, настроить всё на странице и потом сохранить отчет через интерфейс. В IDE по-прежнему настроить нельзя. Конкретно в IG появилась и другая проблема: там добавили возможность менять ширину столбцов мышкой, но если вы поменяете ширину одного столбца, ширина всех остальных столбцов тоже изменится, причем совершенно непредсказуемым образом. Например, если у вас 5 столбцов и вы уменьшаете ширину первого, остальные четыре станут шире, каждый по чуть-чуть. А если вам нужно сделать так, чтобы первые три были одинаковые, а остальные два — как получится, на все оставшееся место, то лучше забудьте сразу, мышью это не сделать (это можно сделать через меню «Actions» → «Columns»: там можно тупо вбить руками количество пикселей).

И третье — это глючность. Может, в последующих версиях это и пофиксили, но в 5.1 я несколько раз натыкался на баги IG. Один раз IG перестал сохранять данные, введенные в режиме редактирования, и несколько раз — не сохранял настройки отчета через меню » Actions » → » Report » → » Save «. В каждом случае помогало только пересоздание отчета с нуля. При активной разработке напарываться раз в месяц на такой баг — это много, по-моему.

Создание столбцов не через SQL

Если в Classic Report или в Interactive Report столбцы создавались только на основе SQL запроса (столбцов в отчете может быть ровно столько, сколько их есть в SQL запросе), то в IG кроме этих столбцов можно создать дополнительные. Для этого нужно кликнуть правой кнопкой на списке столбцов в левой панели и выбрать пункт » Create Column «. После этого появится столбец, которому можно в свойстве » Source » → » Type » указать » None » (и тогда он будет полностью независим от SQL запроса, на базе которого создан отчет), или указать » Database Column » / » SQL Expression » и заполнить его данными на основе результатов запроса. Это удобно, потому что раньше иногда приходилось делать в запросе дубликат столбца с дополнительными вычислениями. И неудобно при отладке, если злоупотреблять (придется выяснять сначала, какой столбец откуда берется), поэтому лучше не злоупотреблять.

Новые типы столбцов

Новых типов столбцов (по сравнению с IR) добавили очень много. Новые типы:

  • » Actions Menu «. Столбец такого типа будет выглядеть как кнопка с иконкой-«бутербродом» (три горизонтальные полоски — кажется, это называется «бутерброд»?). Эта кнопка активирует меню с действиями над строками — добавить, удалить, сделать копию строки и т. д.
  • » Checkbox «. Столбец будет показывать чекбоксы, но функционально это будут не такие чекбоксы, как в случае со столбцом типа » Row Selector » (см. ниже). Про то, что из себя представляют чекбоксы в апексе, я расскажу отдельно (там можно много чего рассказать), пока только скажу, что чекбоксы — это не то, чем они кажутся.
  • » Color picker «. Натурально, выбор цвета, почти как в фотошопе. Я даже скриншот вам покажу:

Color picker screenshot

  • » Row Selector «. Столбец этого типа содержит чекбокс, которым можно выделять строки, а потом, при необходимости, к этим строкам можно обращаться в javascript или PL/SQL коде.
  • остальные (» Date picker «, » Number field «, » Password «, и куча других) — это дополнительные настройки для ввода данных в режиме редактирования. То есть вместо создания таких полей вручную через пакет APEX_ITEM (как это было в примере для Classic Report) теперь можно указать нужный тип столбца.

При этом почему-то из типов столбцов убрали » Download BLOB «. То есть ссылку на файл не получится сделать так же просто, как это можно было в Interactive Report и даже в Classic Report. И вот тут я не понял — кому этот тип мешал? (Этот пункт тоже можно добавить в раздел «почему я не люблю IG».)

Master-Detail отчеты на основе IG

С IG стало намного проще делать Master-Detail отчеты. Не нужно ничего из того, что описано для Classic Report выше. Код писать больше не нужно, достаточно создать два IG отчета. Далее в Master отчете выбираем столбец, являющийся первичным ключом, и указываем у него это свойство (свойства столбца → » Source » → » Primary Key » указываем » Yes «). В Detail отчете в свойствах отчета находим » Master-Detail » → » Master Region » и в выпадающем списке выбираем нужный регион. Потом находим столбец, который является внешним ключом, в свойствах столбца находим » Master-Detail » → » Master Column » и выбираем из списка нужный столбец. Теперь всё должно заработать. При клике на строке Master отчета данные в Detail отчете будут обновляться.

Обработка ввода данных в IG

И последнее, что хотелось бы сказать об IG — как сделать дополнительную обработку данных, введенных в режиме редактирования. Из коробки IG умеет только вставлять новые строки или изменять/удалять существующие. Теперь, допустим, нужно сделать отчет (на базе таблицы STUDENTS из примера выше) с возможностью редактирования данных и ввода новых строк, а также сделать дополнительную проверку данных: когда пользователь вводит имя и фамилию, нужно убедиться, что первая буква — прописная, а остальные — строчные. Для этого нужно создать IG отчет на базе запроса к таблице STUDENTS :

Сделать его редактируемым (» Attributes » → » Edit » → » Enabled «), потом зайти на закладку » Processing «, найти там созданный апексом процесс для сохранения данных IG (по умолчанию он будет называться примерно так: «IG — Save Interactive Grid Data»), и в свойстве » Settings » → » Target Type » указать » PL/SQL Code «, а в появившемся поле » PL/SQL Code to Insert/Update/Delete » написать следующий код:

Этот код будет выполнен для каждой строки отчета. Специальная переменная APEX$ROW_STATUS при этом содержит значения I , U или D (insert, update, delete) в зависимости от того, что происходит с текущей строкой (добавляется новая, изменяется/удаляется старая). Чтобы обратиться к данным столбцов, необходимо следующее (апекс делает это автоматически, вмешиваться практически не нужно): когда вы создаете отчет и указываете имя столбца в SQL-запросе, это имя будет указано потом в качестве источника данных в свойствах столбца отчета, и его же потом нужно использовать в коде выше для получения доступа к обновленным данным. В данном случае, используются столбцы NAME , SURNAME , BIRTHDATE и EXAMDATE .
Также при необходимости можно использовать переменную APEX$ROW_NUM , которая содержит порядковый номер строки, обрабатываемой в данный момент, и APEX$ROW_SELECTOR , которая содержит значение X для строк, выделенных с помощью чекбоксов в столбце типа » Row Selector «.

Практические занятия

Дизайнер можно вызвать с помощью пиктограммы или из командной строки.

После вызова появляется диалоговое окно, в котором предлагается сделать выбор – использовать для построения отчета мастер, либо строить новый отчет вручную. Выбираем последнее :

При этом в окне Дизайнера открывается Объектный Навигатор.

Объектный Навигатор показывает существующие объекты и типы объектов,

используется для вызова таблиц атрибутов объектов, а также для создания

и переименования объектов.

2. Соединение с базой данных

Для соединения с базой данных выберите в меню File -> Connect .

Появится диалоговое окно Connect .

Соединение с базой данных можно сделать

из командной строки при вызове Дизайнера.

3. Определение данных

Определение данных делается в редакторе модели данных, который можно

вызвать из Объектного Навигатора.

Дважды щелкните на пиктограмме узла модели данных. Появится редактор

Выберите инструмент SQL Query , щелкнув на нем в палитре инструментов.

Перейдите в рабочую область редактора модели данных и щелкните один раз.

Появится запрос Q _1 .

Двойной щелчок на запросе вызывает окно для ввода и редактирования запроса.

Запрос можно ввести в окне SQL Query Statement ,

импортировать из файла – закладка Import SQL Query и

построить с помощью специального построителя запросов – закладка

Воспользуемся первым способом.

3. Создание макета по умолчанию

Для создания макета воспоьзуйтесь инструментом Report Wizard ,

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

Введите заголовок отчета и выберите табличный стиль отчета:

Выберите поля которые будут отображаться в отчете:

Введите метки и ширину столбцов:

Данная закладка определяет выбор шаблона.

В данном примере предопределенные шаблоны использовать не будем.

После окончания работы с Report Wizard ( Finish ) отчет запускается к выполнению и появляется в окне предварительного просмотра:

4. Редактор макета

Для того чтобы вызвать редактор макета, дважды щелкните мышью на его пиктограмму в Объектном Навигаторе.

5. Сохранение и запуск отчета

Выберите File -> Save или пиктограмму Save . Появится диалоговое окно Save .

Сохраните отчет в файле Les 1. rdf .

Для запуска отчета из Навигатора или из какого-либо редактора выберите инструмент Run .

Появится окно формы параметров. В этом окне можно ввести значения параметров перед исполнением отчета.

Oracle Reports имеет несколько системных параметров. Можно включить

любые или все системные параметры в форму параметров или создать

Урок 2. Создание отчета с разбивкой, формульных и

вычисляемых столбцов

Данный отчет является улучшением отчета les 1. rdf .

Изменение модели данных

Необходимо сгруппировать всю информацию, относящуюся к одному отделу.

Для этого надо создать новую группу с информацией об отделе. Отбуксируйте столбец OTDEL так, чтобы он находился выше группы G _1 . Образовалась новая группа G _2. Затем в эту группу отбуксируйте столбец otdel _ id .

Обновление макета отчета

Макет необходимо обновлять каждый раз при изменении иерархии данных,

при удалении или добавлении столбцов.

Создайте макет табулярного отчета по умолчанию (урок 1).

Создание вычислений

Не все столбцы должны выбираться из базы данных. Для выполнения вычислений

можно создать собственные столбцы. Такие столбцы вычисляют свои значения, основываясь на выражениях PL / SQL или на значениях столбцов базы данных.

Есть два типа вычислений —

Формулы Значения вычисляются с использованием выражения PL / SQL .

Формулы могут оперировать со значениями столбцов

Итоги Значения вычисляются с использованием функций,

предоставляемых ORACLE REPORTS .

Итоги подводятся по значениям нескольких записей.

Для создания формульного столбца используется инструмент

Formula Column в палитре инструментов. Щелкните один раз на инструменте

Formula Column , затем щелкните в группе G _1 . По двойному щелчку мыши вызовите окно свойств и переименуйте столбец в oklad $ .

Выберите Formula : Edit для вызова редактора программных модулей.

Введите следующий текст функции:

Откомпилируйте данную функцию ( Compile ) и закройте редактор программных

Создание Группового итога

Для создания итоговых полей используется инструмент Summary Column .

Создайте суммарный столбец в группе G _2 . Вызовите его таблицу атрибутов, переименуйте его, в списке значений Reset At выберите G _2 .

Чтобы создать итог, который вычисляет сумму по отчету, сделайте следующее:

Выберите инструмент Summary Column и щелкните на свободном месте

Вызовите таблицу атрибутов созданного столбца.

Убедитесь, что уровень сброса итога установлен в Report .

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

Вид макета после обновления:

Вид отчета после запуска:

Урок 3. Оформление отчета

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

Добавление выделенного заголовка

Для этого перейдем в редактор Layout и выберем режим редактирования

окружения отчета — кнопка Margin на панели инструментов.

В верхней части отчета создайте текстовое поле(кнопка Text на левой

панели) с содержанием «Отчет о личном составе по отделам», используя

палитру красок раскрасьте его по своему вкусу.

Создайте статический объект — прямоугольник с скругленными краями.

Разместите его за статическим текстом, используя меню

Arrange \ Send to Back , раскрасьте этот прямоугольник по вашему вкусу…

Добавление текущей даты и нумерация страниц

Для этого на инструментальной панели редактора макета существуют специальные инструменты:

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

Для добавления даты и нумерации страниц можно также воспользоваться инструментом Field :

Источником данных для нового поля в макете могут быть все данные из модели данных – колонки, вычисляемые столбцы, системные и пользовательские параметры, а также так называемые системные переменные:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *