【问题标题】:Filtering on linked table in Axapta/Dynamics Ax在 Axapta/Dynamics Ax 中过滤链接表
【发布时间】:2008-12-13 10:15:42
【问题描述】:

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

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

【问题讨论】:

    标签: axapta


    【解决方案1】:

    您可以使用“外部连接”而不是“延迟”,然后在 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 及更高版本无关,您可以在外部联接中使用查询过滤器。见How to Use the QueryFilter Class with Outer Joins

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多