Как убедиться, что результат PL / SQL в классическом отчете загружается при каждой загрузке страницы - PullRequest
0 голосов
/ 21 мая 2019

Я создаю приложение для персональной базы знаний в APEX 18.2 и испытываю странную проблему, когда запрос отчета неверен / не отображается правильно, когда элементы меню навигации используются для передачи значений элемента.

У меня одна таблица в качестве источника:

HELP_GUIDE(
HELP_GUIDE_ID   NUMBER PRIMARY KEY
APPLICATION_ID  NUMBER
PAGE_ID NUMBER
TITLE   VARCHAR2(255 BYTE)
SUBTITLE    VARCHAR2(255 BYTE)
REGION  VARCHAR2(255 BYTE)
SECTION VARCHAR2(255 BYTE)
HELP_TEXT   CLOB
)

Я использую функцию PL / SQL ниже, чтобы показать столбец HELP_TEXT в классическом отчете. Этот столбец содержит текст + изображения, созданные с помощью текстового редактора APEX.

return q'~

select "HELP_GUIDE_ID", 
"APPLICATION_ID",
"PAGE_ID",
"TITLE",
"SUBTITLE",
"REGION",
"SECTION",
"HELP_TEXT" 


from "#OWNER#"."HELP_GUIDE" 
where "APPLICATION_ID"=:P3_APPLICATION_ID 
and (TITLE=:P3_TITLE OR :P3_TITLE IS NULL)
and (SUBTITLE=:P3_SUBTITLE OR :P3_SUBTITLE IS NULL)
and (REGION=:P3_REGION OR :P3_REGION IS NULL)
and (SECTION=:P3_SECTION OR :P3_SECTION IS NULL)
~';

Я использовал пункты меню навигации для установки значений элементов (APPLICATION_ID, TITLE и т. Д.), Чтобы я мог фильтровать то, что отображается на странице. Однако я не вижу последовательного поведения. Кажется, что сразу используется одна из записей навигации (дочерняя), APEX продолжит показывать тот же результат. Вы можете увидеть поведение в видео проблемы

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

Любая помощь приветствуется.

EDIT:

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

Записи навигации с установленным значением «установить значения этих элементов» должны были действовать как фильтр, который передавал бы значения элементов P3 (элементов страницы формы), которые затем, в свою очередь, использовались бы выражением SQL.

Чего не хватало, так это очищать кэш для страницы 3 (страницы формы) при каждом вызове навигации, поэтому простое добавление страницы 3 в разделе очистки кэша настроек ввода навигации решило проблему.

1 Ответ

0 голосов
/ 21 мая 2019

За этой ссылкой нет видео.

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

SELECT help_guide_id,
       application_id,
       page_id,
       title,
       subtitle,
       region,
       section,
       help_text
  FROM help_guide
 WHERE     application_id = :P3_APPLICATION_ID
       AND (   title = :P3_TITLE
            OR :P3_TITLE IS NULL)
       AND (   subtitle = :P3_SUBTITLE
            OR :P3_SUBTITLE IS NULL)
       AND (   region = :P3_REGION
            OR :P3_REGION IS NULL)
       AND (   section = :P3_SECTION
            OR :P3_SECTION IS NULL)

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

Поскольку P3_... элементы являются элементами страницы 3 (я имею в виду, что они все содержатся на той же странице, что и отчет), для обновления результата запроса вы можете:

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

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

...