在DirPartyTableListPage表单Init方法中调整ExistsJoin过滤逻辑
解决DirPartyTableListPage查询过滤问题
当前代码的问题在于直接给ExistsJoin绑定了InstanceRelationType=123的条件,导致查询仅返回满足该条件的记录,忽略了其他InstanceRelationType的记录。要实现需求,需要让查询包含两种场景的记录:
- InstanceRelationType不等于123的所有DirPartyTable记录
- InstanceRelationType等于123且在RestrictionTable中有对应Party记录的DirPartyTable记录
修改后的代码如下:
QueryBuildDataSource qbdsRestriction; QueryBuildRange qbrDirParty; // 为RestrictionTable添加ExistsJoin数据源 qbdsRestriction = dirpartyTable_ds.queryBuildDataSource().addDataSource(tableNum(RestrictionTable)); qbdsRestriction.joinMode(JoinMode::ExistsJoin); // 建立表间关联:RestrictionTable.Party关联DirPartyTable.RecId qbdsRestriction.addLink(fieldNum(RestrictionTable, Party), fieldNum(DirPartyTable, RecId)); // 为DirPartyTable的InstanceRelationType添加范围,实现逻辑或的过滤条件 qbrDirParty = dirpartyTable_ds.queryBuildDataSource().addRange(fieldNum(DirPartyTable, InstanceRelationType)); qbrDirParty.value(strFmt( "(!(%1.InstanceRelationType == 123)) || ((%1.InstanceRelationType == 123) && exists join)", dirpartyTable_ds.queryBuildDataSource().name() ));
关键修改说明
- 规范表关联:使用
addLink方法建立DirPartyTable和RestrictionTable的关联关系,替代原代码中直接在范围里写关联条件的方式,更符合AX查询的最佳实践。 - 逻辑或组合条件:通过范围条件实现两种场景的合并:
- 当InstanceRelationType不等于123时,直接保留记录
- 当InstanceRelationType等于123时,必须通过ExistsJoin验证RestrictionTable中存在对应记录才保留
- ExistsJoin的作用:仅在InstanceRelationType=123的场景下生效,确保这类记录必须有对应的RestrictionTable条目,而其他类型的记录不受影响。
内容的提问来源于stack exchange,提问作者julia
相关产品推荐
相关产品推荐

