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