我如何以编程方式将 Apex 5 报告恢复到默认状态?

How do I programmatically restore an Apex 5 report to default state?

我在 Apex 5 中有一个交互式报告,每次加载页面时,我希望它看起来与我第一次 运行 使用默认设置时显示的完全一样。

问题是,如果用户应用任何过滤器或隐藏列,下次加载页面时,报告会记住该配置。

我尝试使用此处未记录的 APEX_IR.RESET_REPORT 过程:

https://docs.oracle.com/database/121/AEAPI/apex_ir.htm#BABEJAFB

但它要么不起作用,要么只撤销上次更改,或者需要很多 运行 才能真正起作用。

我尝试使用以下代码在页面加载时执行动态操作:

DECLARE  
  v_region_id APEX_APPLICATION_PAGE_REGIONS.REGION_ID%TYPE;  
BEGIN  


  SELECT region_id INTO v_region_id  
  FROM APEX_APPLICATION_PAGE_REGIONS  
  WHERE application_id = :APP_ID  
  AND page_id = :APP_PAGE_ID  
  AND static_id = 'Images_Report'; 


   APEX_IR.RESET_REPORT(  
       P_page_id => :APP_PAGE_ID,  
       P_region_id => v_region_id,  
       p_report_id => null

  );  

END;  

我也试过这个代码

DECLARE  
  v_region_id APEX_APPLICATION_PAGE_REGIONS.REGION_ID%TYPE;  
BEGIN  


  SELECT region_id INTO v_region_id  
  FROM APEX_APPLICATION_PAGE_REGIONS  
  WHERE application_id = :APP_ID  
  AND page_id = :APP_PAGE_ID  
  AND static_id = 'Images_Report'; 


   APEX_IR.RESET_REPORT(  
       P_page_id => :APP_PAGE_ID,  
       P_region_id => v_region_id,  
       p_report_id => APEX_IR.GET_LAST_VIEWED_REPORT_ID(
                        p_page_id   => :APP_PAGE_ID,
                        p_region_id => v_region_id
                       )

  );  

END;  

我希望每次加载页面时报告看起来都处于默认状态(首先 运行)。

相反,报告显示最后状态,即使用户注销、登录并重新启动应用程序也是如此。

在 URL

中将 RIR 作为清除缓存参数发送

https://docs.oracle.com/database/apex-5.1/HTMDB/linking-to-interactive-reports.htm#GUID-B917CEB3-A0B9-414B-A90A-7B44DD15EA67

URL 看起来像

f?p=102:94:6722612001859::NO:RIR::

https://docs.oracle.com/database/apex-5.1/HTMDB/understanding-url-syntax.htm#HTMDB03019

有关 apex_ir.reset_report 程序的文档说明了这一点

This procedure should only be used in page submit processes.

这可能是您遇到问题的原因