axapta - 带有 where 条件 x++ 的外连接

标签 axapta x++ ax

我正在尝试编写一个查询,根据 ItemId 或商品条形码检索商品。

这是使用 x++、Dynamics AX 2012 R2

select firstOnly * from inventTable
where (inventTable.ItemId == _upc || inventItemBarcode.itemBarCode == _upc)
outer join inventItemBarcode 
where inventItemBarcode.itemId == inventTable.ItemId;

当它被翻译成 sql 时,结果是......

FROM  INVENTTABLE T1 LEFT 
OUTER 
JOIN INVENTITEMBARCODE T2 ON (((T2.PARTITION=?) 
    AND (T2.DATAAREAID=?)) 
    AND (T1.ITEMID=T2.ITEMID)) 
WHERE (((T1.PARTITION=?) 
    AND (T1.DATAAREAID=?)) 
    AND (T1.ITEMID=?))

您可以看到最后一行完全省略了 OR 条件。

我尝试像这样编写查询

    select firstOnly * from inventTable
    outer join inventItemBarcode 
    where
        //join
        inventItemBarcode.itemId == inventTable.ItemId
        //ilc
        && (inventTable.ItemId == _upc
        || inventItemBarcode.itemBarCode == _upc);

但它将外连接中的 OR 条件置于 ON,然后返回 InventTable 中的第一行。

有人知道如何在 X++ 中实现此功能吗?

最佳答案

如果使用 AX 2012,您将必须使用 QueryQueryRun相反,然后将您的 or 表达式添加为 query expression使用addQueryFilter .

static void Job117(Args _args)
{
    str search = "5705050765989";
    QueryRun qr = new QueryRun(new Query());
    QueryBuildDataSource ds1 = qr.query().addDataSource(tableNum(InventTable));
    QueryBuildDataSource ds2 = ds1.addDataSource(tableNum(InventItemBarcode));
    str qstr1 = '((%1.%2 == "%5") || (%3.%4 == "%5"))';
    str qstr2 = strFmt(qstr1, ds1.name(), fieldStr(InventTable,ItemId), 
                       ds2.name(), fieldStr(InventItemBarcode,ItemBarCode),
                       queryValue(search));
    qr.query().addQueryFilter(ds1, fieldStr(InventTable,ItemId)).value(qstr2);
    ds2.joinMode(JoinMode::OuterJoin);
    ds2.relations(true);
    info(qstr2);
    info(ds1.toString());
    while (qr.next())
        info(strFmt("%1", qr.getNo(1).RecId));
}

在之前的 AX 版本中,您可以创建 View ,然后使用 addRange 使用查询表达式查询 View 。方法。

关于axapta - 带有 where 条件 x++ 的外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24416088/

相关文章:

axapta - 单击 Dynamics AX 中的标签后是否可以打开 Web 浏览器?

.net - Lotus Notes 富文本中的 AX 2009 附件

c# - Dynamics AX 2009 业务连接器登录

axapta - 如何使用 SumAll 属性?

microsoft-dynamics - Select 语句与在 Axe 中查找语句

x++ - 如何确保一个表单只被打开一次?

axapta - 在 Axapta/Dynamics Ax 中过滤链接表

axapta - 如何找到AX2009中最后一个labelId?

powershell - 如何使用Powershell脚本在AX中同步数据库?

axapta - 如何打开包含所选记录的表单?