2008-12-13 47 views
3

我在Axapta/Dynamics Ax(EmplTable)中有一個窗體,它有兩個數據源(EmplTable和HRMVirtualNetworkTable),第二個數據源(HRMVirtualNetworkTable)延遲「鏈接類型。在Axapta/Dynamics Ax的鏈接表上過濾

有沒有辦法根據第二個數據源在記錄上設置過濾器,而不必將鏈接類型更改爲「InnerJoin」?

回答

5

你可以使用 「外部聯接」,而不是「延遲「,則在搜索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

1

您可以通過加入QueryBuildDataSource或延長過濾器做programmaticaly(Alt + F3,右鍵單擊datasorce,1:N和發現SEV \ condary DS)