如果“where”条件在数组中,如何选择记录

时间:2014-09-03 12:04:58

标签: axapta x++

喜欢标题。

我需要从InventTable中选择记录。为此,我想使用动态数组中的seleted ItemId。问题是基于该数组的值构建过滤器。

1 个答案:

答案 0 :(得分:1)

如果数组不是太大,您可以使用QueryBuildRange,如下所示:

static void UseArrayToFilterRecords(Args _args)
{
    str arr[5];
    int i;
    str items;
    Query q;
    QueryBuildDataSource qbds;
    QueryRun qr;
    InventTable inventTable;

    // Populate the array for test purposes
    arr[1] = '10003';
    arr[2] = '10004';
    arr[3] = '10005';
    arr[4] = '10006';
    arr[5] = '10007';

    // Populate the string to be used in a filter with item numbers from the array
    for (i = 1; i <= 5; i++)
    {
        items += items ? ',' + arr[i] : arr[i];
    }

    // Create a query
    q = new Query();
    qbds = q.addDataSource(tableNum(InventTable));
    qbds.addRange(fieldNum(InventTable, ItemId)).value(items);

    // Run the query and display result
    qr = new QueryRun(q);    
    while (qr.next())
    {
        inventTable = qr.get(tableNum(InventTable));
        info(strFmt('Item number: %1, Record-ID: %2', inventTable.ItemId, inventTable.RecId));
    }

    info('Job completed');
}

否则,您可以使用数组中的值填充另一个表并加入该表,并InventTable仅选择所需的记录。