Axapta Querybuild、join引用回第一个选项卡在代码中不起作用

Axapta Querybuild、join引用回第一个选项卡在代码中不起作用,axapta,x++,dynamics-ax-2009,Axapta,X++,Dynamics Ax 2009,我有以下SQL语句: 从AX2009\u DEV.dbo.WMSINVENTTRANSDOCK中选择* 在INVENTTRANSREFID=salesid上加入AX2009_DEV.dbo.SALESTABLE 在WMSINVENTTRANSDOCK.inventDimId=INVENTDIM.inventDimId上加入AX2009\u DEV.dbo.INVENTDIM 我正在尝试用代码编写此代码: qbdWMSInventTransDock = query.addDataSource(ta

我有以下SQL语句:

从AX2009\u DEV.dbo.WMSINVENTTRANSDOCK中选择* 在INVENTTRANSREFID=salesid上加入AX2009_DEV.dbo.SALESTABLE 在WMSINVENTTRANSDOCK.inventDimId=INVENTDIM.inventDimId上加入AX2009\u DEV.dbo.INVENTDIM

我正在尝试用代码编写此代码:

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语句“resets”

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

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

我认为你应该先建立你的链接/连接模式,然后建立你的范围。创建单独的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)
是否有效?看见