【问题标题】:Querybuild, join refer back to first tabel does not work in code查询构建,连接参考第一个表在代码中不起作用
【发布时间】:2013-10-01 15:49:23
【问题描述】:

我有这个 SQL 语句:

从 AX2009_DEV.dbo.WMSINVENTTRANSDOCK 中选择 * 在 INVENTTRANSREFID = salesid 上加入 AX2009_DEV.dbo.SALESTABLE 在 WMSINVENTTRANSDOCK.inventDimId 上加入 AX2009_DEV.dbo.INVENTDIM = inventDim.inventDimId

我正在尝试用代码编写:

qbdWMSInventTransDock = query.addDataSource(tableNum(WMSInventTransDock));

qbdSalesTable = qbdWMSInventTransDock.addDataSource(tableNum(SalesTable));
qbdSalesTable.addLink(fieldNum(WMSInventTransDock, InventTransRefId), fieldNum(SalesTable, SalesId));
qbdSalesTable.joinMode(JoinMode::InnerJoin);

qbdInventDim = qbdWMSInventTransDock.addDataSource(tableNum(InventDim));
qbdInventDim.addLink(fieldNum(WMSInventTransDock, InventDimId), fieldNum(InventDim, InventDimId));
qbdInventDim.joinMode(JoinMode::InnerJoin);

但是,当我尝试将 InventDim 连接到 WMSInventTransDock 时,我可以在调试时看到 SQL 语句“重置”。

我想这样做而不是编写选择语句,因为我希望以后能够这样做:

if (inventSiteId)
{
    qbr = qbdInventDim.addRange(fieldNum(InventDim, InventSiteId));
    qbr.value(inventSiteId);
}
if (inventLocationId)
{
    qbr = qbdInventDim.addRange(fieldNum(InventDim, InventLocationId));
    qbr.value(inventLocationId);
}

【问题讨论】:

    标签: axapta x++ dynamics-ax-2009


    【解决方案1】:

    我认为你应该先建立你的链接/加入模式,然后再建立你的范围。最好也创建单独的 qbr、qbr2、qbr3 变量,这样您就可以引用它们,而不是不断地重新初始化同一个变量……我什至认为这不起作用,但它可能因为你是适用于相同的查询。不过,这根本不是一个好方法。

    尝试像这样重新排列行:

    qbdWMSInventTransDock = query.addDataSource(tableNum(WMSInventTransDock));
    qbdInventDim = qbdWMSInventTransDock.addDataSource(tableNum(InventDim));
    qbdInventDim.joinMode(JoinMode::InnerJoin);
    qbdInventDim.addLink(fieldNum(WMSInventTransDock, InventDimId), fieldNum(InventDim, InventDimId));
    
    qbr = qbdWMSInventTransDock.addRange(fieldNum(WMSInventTransDock, ItemId));
    qbr.value(_itemId);
    
    qbr = qbdWMSInventTransDock.addRange(fieldNum(WMSInventTransDock, InventTransType));
    qbr.value(queryValue(InventTransType::Sales));
    
    qbr = qbdWMSInventTransDock.addRange(fieldNum(WMSInventTransDock, WMSExpeditionStatus));
    qbr.value(queryValue(WMSExpeditionStatus::Complete));
    

    【讨论】:

    • 既然你要设置自定义链接,你有没有试过先做qbdWMSInventTransDoc.clearRanges();qbdWMSInventTransDoc.clearLinks();,也许试试qbdInventDim.fetchMode(QueryFetchMode::One2One);
    • 这一行一执行 qbdInventDim = qbdWMSInventTransDock.addDataSource(tableNum(InventDim)); sql 命令重置为第一个值,丢失之前建立的所有连接
    • 这是由于某种原因qbdSalesTable.joinMode(JoinMode::InnerJoin)JoinMode::ExistsJoin*.fetchMode(QueryFetchMode::One2One) 会起作用吗?见axdaily.blogspot.com/2010/04/magical-fetchmode-property.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2014-07-06
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多