3

我在 Axapta/Dynamics Ax (EmplTable) 中有一个表单,它有两个数据源(EmplTable 和 HRMVirtualNetworkTable),其中第二个数据源(HRMVirtualNetworkTable)以“延迟”链接类型链接到第一个数据源。

有没有办法根据第二个数据源对记录设置过滤器,而无需将链接类型更改为“InnerJoin”?

4

2 回答 2

5

您可以使用“外部联接”而不是“延迟”,然后在 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 类与外部连接一起使用

于 2009-07-08T12:34:16.280 回答
1

您可以通过加入 QueryBuildDataSource 或扩展过滤器(Alt+F3,右键单击 datasorce,1:n 并找到 sev\condary DS)以编程方式进行

于 2008-12-28T09:03:17.910 回答