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

Я создаю приложение базы личных знаний в 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, чтобы обновить страницу после отправки, процесс, чтобы обновить, создать новую страницу (скопировал предыдущую страницу), затем использовал ее в качестве ссылки для навигации, для каждой ссылки был установлен чистый кэш, но получался тот же результат.

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

РЕДАКТИРОВАТЬ:

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

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

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

1 ответ

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

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

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 (я имею в виду, что они все содержатся на той же странице, что и отчет), чтобы обновить результат запроса, вы можете:

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

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

Другие вопросы по тегам