我在Axapta/Dynamics Ax(EmplTable)中有一個窗體,它有兩個數據源(EmplTable和HRMVirtualNetworkTable),第二個數據源(HRMVirtualNetworkTable)延遲「鏈接類型。在Axapta/Dynamics Ax的鏈接表上過濾
有沒有辦法根據第二個數據源在記錄上設置過濾器,而不必將鏈接類型更改爲「InnerJoin」?
我在Axapta/Dynamics Ax(EmplTable)中有一個窗體,它有兩個數據源(EmplTable和HRMVirtualNetworkTable),第二個數據源(HRMVirtualNetworkTable)延遲「鏈接類型。在Axapta/Dynamics Ax的鏈接表上過濾
有沒有辦法根據第二個數據源在記錄上設置過濾器,而不必將鏈接類型更改爲「InnerJoin」?
你可以使用 「外部聯接」,而不是「延遲「,則在搜索HRMVirtualNetworkTable上的字段時以編程方式更改加入模式。在EmplTable數據源
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;
}
}
}
}
在的executeQuery():
此方法添加到類SysQuery
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及更高版本,在那裏你可以使用查詢過濾器在外部連接。見How to Use the QueryFilter Class with Outer Joins。
您可以通過加入QueryBuildDataSource或延長過濾器做programmaticaly(Alt + F3,右鍵單擊datasorce,1:N和發現SEV \ condary DS)