当前位置:  开发笔记 > 编程语言 > 正文

过滤Axapta/Dynamics Ax中的链接表

如何解决《过滤Axapta/DynamicsAx中的链接表》经验,为你挑选了1个好方法。

我在Axapta/Dynamics Ax(EmplTable)中有一个表单,它有两个数据源(EmplTable和HRMVirtualNetworkTable),其中第二个数据源(HRMVirtualNetworkTable)链接到第一个带有"Delayed"链接类型的数据源.

有没有办法根据第二个数据源在记录上设置过滤器,而不必将链接类型更改为"InnerJoin"?



1> Jan B. Kjeld..:

您可以使用"外部联接"而不是"延迟",然后在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类.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有