我在 Axapta/Dynamics Ax (EmplTable) 中有一个表单,它有两个数据源(EmplTable 和 HRMVirtualNetworkTable),其中第二个数据源 (HRMVirtualNetworkTable) 通过“延迟”链接类型链接到第一个数据源。
有没有办法根据第二个数据源在记录上设置过滤器,而不必将链接类型更改为“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() 代替。
Update:
请注意,上述内容与 AX 2012 及更高版本无关,您可以在外连接中使用查询过滤器。看如何将 QueryFilter 类与外连接结合使用 http://msdn.microsoft.com/en-us/library/gg881181.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)