Dynamics AX:在代码中禁用表单中的数据源,同时能够使用高级过滤/排序选项

Adr*_*rià 6 ax axapta dynamics-ax-2009

我修改了InventTable表单,以便用户可以根据默认订单设置设置表单中的"已停止"状态过滤项目.根据两个复选框的值,他们会获得"可购买"商品,"可销售"商品,所有商品或已阻止商品的列表,以供销售或购买.

我在代码中添加了InventItemSalesSetup和InventItemPurchSetup数据源,并在用户选中或取消选中复选框时启用或禁用它们.

除非禁用其中一个数据源,否则一切正常.然后"高级过滤/排序"选项停止工作.我收到错误:"数据源未启用".

该错误来自SysQueryForm表单的方法"saveCueEnabled".当它打电话:

if (!CueRun::canSaveQueryAsCue(this.args().caller()))
    return false;
Run Code Online (Sandbox Code Playgroud)

哪个电话:

static boolean canSaveQueryAsCue(QueryRun qr)
{
    int numOfDataSources, i;
    QueryBuildDataSource ds;
    Query q;
    Common cursor;
    ;

    if (!qr)
    return false;

    q = qr.query();
    if (!q)
        return false;

    numOfDataSources = q.dataSourceCount();
    for(i = 1; i <= numOfDataSources; i++)
    {
        ds = q.dataSourceNo(i);
        if(ds.dynalinkCount() > 0)
            return false;

        // Check if it is temp
        cursor = qr.getNo(i);
        if (cursor.dataSource() && cursor.isTmp())
            return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

当它获取查询中的数据源数量时,"dataSourceCount"方法也会返回带有已禁用数据源的计数,当它获取循环中已禁用数据源的QueryBuildDataSource时,会得到一个空DS并且当它崩溃时崩溃它检查它是否是临时表.

我已经解决了在"saveCueEnabled"代码上添加额外if的问题,但我想知道是否有一种方法可以启用/禁用数据源而不会出现此错误.

我希望我能很好地解释自己,谢谢!

小智 4

我能想到的唯一解决方案要求您修改 canSaveQueryAsQue()。

对 for 循环的更新很简单,应该可以解决您的问题。

for(i = 1; i <= numOfDataSources; i++)
{
    ds = q.dataSourceNo(i);
    if(ds && ds.dynalinkCount() > 0)
        return false;

    // Check if it is temp
    cursor = qr.getNo(i);
    if (cursor.dataSource() && cursor.isTmp())
        return false;
}
Run Code Online (Sandbox Code Playgroud)

我没有测试过这段代码,但我在其他情况下使用过类似的代码。希望有帮助!