如何在Oracle Apex中按日期列实现报表分页切换?
Oracle Apex实现按日期切换展示每日任务数据的方案
原表结构与数据
+--------------+--------------+---------------+ | TaskName | Validated_By | Creation_Date | +--------------+--------------+---------------+ | Task A | Jim | 12/1/2022 | | Task B | John | 12/1/2022 | | Task C | Jill | 12/1/2022 | | Task D | John | 11/30/2022 | | Task E | John | 11/30/2022 | | Task F | Bill | 11/30/2022 | | Task G | Goerge | 11/29/2022 | | Task H | George | 11/29/2022 | +--------------+--------------+---------------+
需求说明
创建Classic/Interactive Report,默认展示最新日期的任务数据,通过点击日期旁的</>箭头,切换展示前一天/后一天的对应数据。
实现方案
Oracle Apex没有完全匹配该需求的一键式内置功能,但可通过组合现有组件快速实现,以下是两种可行方案:
方案一:Classic Report + 页面项 + 动态操作
创建页面项
- 添加页面项
P1_CURRENT_DATE,类型设为Date Picker,默认值设为(SELECT MAX(Creation_Date) FROM your_table)(替换your_table为实际表名),可设置为隐藏项。
- 添加页面项
编写Classic Report查询
报表SQL如下:SELECT TaskName, Validated_By FROM your_table WHERE TRUNC(Creation_Date) = TRUNC(:P1_CURRENT_DATE)添加日期切换控件
在报表上方新建HTML区域,内容为:<button type="button" onclick="apex.submit('PREV_DATE')"><</button> <span style="margin: 0 10px;">#P1_CURRENT_DATE#</span> <button type="button" onclick="apex.submit('NEXT_DATE')">></button>配置提交分支
- 创建分支,当提交请求为
PREV_DATE时,执行PL/SQL赋值:
分支类型选择:P1_CURRENT_DATE := :P1_CURRENT_DATE - 1;Redirect to Page in this Application,目标页面为当前页,勾选Clear Cache并指定报表区域。 - 同理创建
NEXT_DATE分支,执行赋值::P1_CURRENT_DATE := :P1_CURRENT_DATE + 1;
- 创建分支,当提交请求为
可选:添加数据存在验证
为避免切换到无数据的日期,可添加验证规则,检查SELECT COUNT(*) FROM your_table WHERE TRUNC(Creation_Date) = TRUNC(:P1_CURRENT_DATE)是否大于0,若不满足则提示并回滚日期值。
方案二:Interactive Report实现
创建Interactive Report
初始SQL查询包含TaskName、Validated_By、Creation_Date,默认筛选最新日期的数据(可通过添加初始筛选条件实现)。添加日期控制项
- 添加页面项
P1_SELECTED_DATE,类型为Date Picker,默认值设为最新日期。 - 在报表工具栏或上方添加
</>按钮,绑定动态操作:- 点击
<按钮:执行PL/SQL赋值:P1_SELECTED_DATE := :P1_SELECTED_DATE - 1;,然后刷新报表。 - 点击
>按钮:执行PL/SQL赋值:P1_SELECTED_DATE := :P1_SELECTED_DATE + 1;,然后刷新报表。
- 点击
- 添加页面项
调整报表显示
隐藏Creation_Date列,通过HTML区域展示当前选中日期与切换按钮,调整样式匹配需求。
内容的提问来源于stack exchange,提问作者User104163
相关产品推荐
相关产品推荐

