Apex 22.1/23.1.1如何向OData REST服务传递筛选器
问题概述
已部署OData Rest Service插件并配置对应REST数据源,后端.NET OData服务返回一张通过Type字段区分多组LOV的数据表。基于该数据源创建的LOV及Popup Lov可正常显示全量数据,直接在浏览器中调用OData服务并携带$filter筛选参数也能正常工作。
当前需求是绕过LOV的「Post Processing Type = SQL查询」模式(该模式会先拉取全表数据再由APEX本地筛选),让APEX直接将OData筛选条件传递给后端服务,仅返回所需数据。但在APEX 22.1的LOV编辑页「Advanced REST Data Source Attributes」→「External Filter」中输入$filter=CodeType eq 135这类筛选格式时,触发ORA-06531: 未初始化集合引用错误;在APEX 23.1.1中使用官方OData示例服务测试,同样出现该报错。
解决方案
1. 先在REST数据源中配置$filter参数
不要直接在LOV的External Filter里写完整的$filter语句,先给REST数据源添加筛选参数:
- 进入「Shared Components」→「REST Data Sources」,找到目标OData数据源
- 切换到「Parameters」标签页,点击「Add Parameter」:
- 参数名称:
$filter - 参数类型:
Query String - 方向:
Outbound - 默认值:留空(如果是固定筛选条件可直接填,比如
CodeType eq 135)
- 参数名称:
2. 在LOV中传递筛选逻辑
回到LOV编辑页的「Advanced REST Data Source Attributes」:
- 在「External Filter」中只写筛选的核心逻辑,不需要加
$filter=前缀,比如:
这里的CodeType eq :P1_TYPE_ID:P1_TYPE_ID是页面绑定项,APEX会自动把这个逻辑拼接到之前配置的$filter参数中,生成符合OData规范的请求URL。
3. 排查ORA-06531错误根源
这个错误是因为APEX处理外部筛选时,存储筛选条件的集合未正确初始化,需注意:
- 禁止在「External Filter」中同时写
$filter=前缀和筛选逻辑 - 确保REST数据源中没有重复定义
$filter参数 - 如果用动态绑定变量,确认绑定的页面项存在且未被会话状态保护限制
验证效果
配置完成后,打开页面测试Popup Lov,查看浏览器网络请求的URL,确认$filter参数已正确携带,且后端返回的是筛选后的数据集。
内容的提问来源于stack exchange,提问作者bjan
相关产品推荐
相关产品推荐

