#oracle #oracle-apex
#Oracle #oracle-apex
Вопрос:
Я относительный новичок APEX.
Я использую APEX 4.0 для базы данных 10gR2.
Я написал запрос, который принимает несколько входных данных (два поля даты, для начала и окончания, и текстовое поле для дальнейшей фильтрации) и создал из него динамический отчет, который работает, когда я извлекаю из него входные переменные (:START_DATE, :END_DATE, :OFFICE) или заменяю ихсо статическими значениями.
Я хочу создать форму на странице, которая отправляет эти значения на страницу динамического отчета для использования в запросе для фильтрации результатов, которые пользователь видит при просмотре отчета.
Мне не очень повезло найти хороший пошаговый пример этого. Я создал пустую страницу с двумя средствами выбора даты и раскрывающимся списком выбора, но не уверен, как наилучшим образом преобразовать эти значения в динамический отчет.
Может кто-нибудь указать мне на правильную документацию для этого?
Ответ №1:
Следующее было разработано с использованием Apex 4.1, но, за исключением некоторых косметических изменений, принципы должны быть теми же.
Данные поступают из стандартной схемы scott.emp.
Обзор
Это страница 1, пользователь может ввести empno и или hiredate.
При нажатии кнопки отправить отображается следующий отчет на другой странице:
Как это работает
На странице 1 я создал три показанных элемента. Текстовые элементы называются P1_EMPNO и P1_HIREDATE . Действие для кнопки — «Отправить страницу»
Все еще на странице 1 создайте ветку со следующими значениями:
Эта ветвь переходит на страницу 2 (которая еще не разработана) и устанавливает значения элементов на странице 2 со значениями со страницы 1.
Создайте новую страницу, в этом примере это будет ссылка на страницу 2.
На странице 2 создайте новый интерактивный отчет, используя следующий запрос:
select e.*
from emp e
Затем создайте два текстовых элемента в той же области, что и отчет, и вызовите их : P2_EMPNO и :P2_HIREDATE . Я счел полезным показывать эти элементы во время разработки, чтобы вы могли видеть, что правильные значения передаются на страницу. Вы всегда можете установить их как скрытые, как только вы довольны отчетом.
Наконец, измените запрос, используемый интерактивным отчетом, чтобы использовать значения, указанные на странице 1
Запустите приложение.
Комментарии:
1. хорошо документированный ответ, хотя вам не нужно ветвление, если у вас есть отчет на той же странице, что и ваши параметры, конечно 🙂 Кроме того, я не думаю, что необходимо иметь элементы на странице 2, за исключением элементов отображения (в противном случае вы попытаетесь их изменить, и ничего не произойдет без отправки). Вы можете просто обратиться к p1_hiredate из p2. Мне интересно, хотя (у меня нет доступа к workspace atm), не могли бы вы установить ИК-фильтры, например
IR_P2_EMPNO
?2. @Tom: спасибо за комментарии, всегда ценится. Я отредактировал свой ответ, чтобы уточнить причину отображения полей на странице 2.
3. Ян: Я попытался реализовать это, но потерпел неудачу. Похоже, что переменные на странице 2 не заполняются как «элементы», которые можно задать в ветке. Есть ли что-то, что мне нужно сделать, кроме присвоения им имен в источнике интерактивного отчета, чтобы превратить их в элементы, которые можно задать?
4. Роб: Можете ли вы показать снимок экрана, на который похожа ваша страница 2, когда она запущена
5. Я вижу ошибку в своих путях. Я пропустил создание элемента на странице 2, который, казалось, был предназначен только для отображения. Спасибо за вашу помощь!
Ответ №2:
Вы хотите ссылаться на элементы своей страницы в своем запросе, что означает, что вам придется отправить свою страницу, прежде чем ваш запрос получит их состояние сеанса. Что я делаю, когда предоставляю небольшую форму параметров, так это помещаю туда также кнопку (например, с надписью «Запрос»), которая выполняет отправку.
Затем в своем отчете вы можете ссылаться на свои элементы. Если, например, у вас есть 2 элемента P1_DATE_START
и P1_DATE_END
, ваш запрос может выглядеть так:
SELECT firstname, lastname, job
FROM employees
WHERE employment_start BETWEEN to_date(:P1_DATE_START) AND to_date(:P1_DATE_END);