You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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()
));

关键修改说明

  1. 规范表关联:使用addLink方法建立DirPartyTable和RestrictionTable的关联关系,替代原代码中直接在范围里写关联条件的方式,更符合AX查询的最佳实践。
  2. 逻辑或组合条件:通过范围条件实现两种场景的合并:
    • 当InstanceRelationType不等于123时,直接保留记录
    • 当InstanceRelationType等于123时,必须通过ExistsJoin验证RestrictionTable中存在对应记录才保留
  3. ExistsJoin的作用:仅在InstanceRelationType=123的场景下生效,确保这类记录必须有对应的RestrictionTable条目,而其他类型的记录不受影响。

内容的提问来源于stack exchange,提问作者julia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:55:16