0

我正在 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 页即可解决问题。

4

1 回答 1

0

该链接后面没有视频。

无论如何:似乎 - 作为该经典报告的来源 - 您正在使用返回查询的函数体。为什么?它通常在有复杂、动态的东西时使用。您编写的查询只是一个简单、普通的查询。如果我是你,我会尝试一些简单的东西

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(或类似的,例如,如果它们是选择列表,则将选择时的页面操作设置为提交),因此 - 每次更改它们的值时,报告都会刷新
  • 当涉及的参数很多时(例如您的情况),并且如果查询需要一些时间来执行,则上述原则不是最佳选择。在这种情况下,不要在项目更改时提交,而是创建一个按钮,该按钮将仅提交页面(一旦您输入所需的所有参数)并导致报告刷新。

基本上,从我的角度来看,这是一项非常简单的任务。也许我没有看到明显的,但是 - 这就是我的想法。

于 2019-05-21T07:54:37.333 回答