如何确保每次加载页面时都加载经典报表中的PL / SQL结果

时间:2019-05-21 07:42:21

标签: oracle oracle-apex oracle-apex-18.2

我正在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富文本编辑器创建的text + images。

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将继续显示相同的结果。您可以在video of issue

中查看行为

我尝试添加DA来刷新页面帖子提交,刷新过程,创建新页面(复制上一页),然后将其用作导航链接,已为每个链接设置了清除缓存,但获得了相同的结果。

任何帮助都非常欢迎。

编辑:

在进一步测试期间,问题已解决。添加更清晰的描述和解决方案:

设置了“设置这些项目值”的导航条目应该用作过滤器,该过滤器将传递P3项目(表单页面项目)值,然后SQL表达式将使用这些值。

缺少的是每次调用导航时清除页面3(表单页面)的缓存,因此只需在导航条目设置的“清除缓存”部分添加页面3即可解决此问题。

1 个答案:

答案 0 :(得分: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页项(我的意思是,它们都与报告包含在同一页面上),为了刷新查询结果,您可以:

  • 将他们的在按下输入键时提交属性设置为“是”(或者类似,例如,如果它们是选择列表,则将选择时的页面操作设置为“提交”), -每次更改其值时,报告都会刷新
  • 当涉及许多参数时(例如您的情况),并且如果查询需要花费一些时间来执行,则上述原则不是最佳选择。在这种情况下,更改项目时不要提交,而是创建一个按钮,该按钮将仅提交页面(一旦输入了所有需要的参数)并刷新报告。

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