我在Axapta/Dynamics Ax(EmplTable)中有一个表单,它有两个数据源(EmplTable和HRMVirtualNetworkTable),其中第二个数据源(HRMVirtualNetworkTable)链接到第一个带有"Delayed"链接类型的数据源.
有没有办法根据第二个数据源在记录上设置过滤器,而不必将链接类型更改为"InnerJoin"?
您可以使用"外部联接"而不是"延迟",然后在HRMVirtualNetworkTable上搜索字段时以编程方式更改联接模式.
将此方法添加到类SysQuery:
static void updateJoinMode(QueryBuildDataSource qds) { Counter r; if (qds) { qds.joinMode(JoinMode::OuterJoin); for (r = 1; r <= qds.rangeCount(); r++) { if (qds.range(r).value() && qds.range(r).status() == RangeStatus::Open) { qds.joinMode(JoinMode::InnerJoin); break; } } } }
在EmplTable数据源的executeQuery()中:
public void executeQuery() {; SysQuery::updateJoinMode(this.queryRun() ? this.queryRun().query().dataSourceTable(tableNum(HRMVirtualNetworkTable)) : this.query().dataSourceTable(tableNum(HRMVirtualNetworkTable))); super(); }
有时this.queryRun()返回null,所以请改用this.query().
更新:
请注意,上述内容与AX 2012及更高版本无关,您可以在外部联接中使用查询过滤器.请参见如何使用具有外部联接的QueryFilter类.