首页 > 解决方案 > While select with if 语句语法 - if 语句的目的是什么?

问题描述

我遇到了一种以前在 x++ 中从未见过的奇怪语法,但它可以编译并且可以工作(据我所知)。我很好奇是否有人以前见过或使用过它并且可以解释:在 while select 的上下文中 if 语句的目的是什么?

InventBatch inventBatch;
InventTrans inventTrans;
InventTransOrigin inventTransOrigin;
InventDim inventDim;

ttsBegin;

while select Qty, DatePhysical from inventTrans
    where inventTrans.StatusReceipt == StatusReceipt::Arrived
    join inventTransOrigin
    where inventTransOrigin.RecId == inventTrans.InventTransOrigin
        && inventTransOrigin.InventTransId == "SomeIdFromSomewhere"
        join inventDim
            where inventDim.inventDimId == inventTrans.inventDimId 
            && inventDim.inventBatchId 
if (inventTrans)
{
    inventBatch = InventBatch::find(inventDim.inventBatchId, inventTrans.ItemId, true);
    inventBatch.Field1 = inventTrans.Qty;
    inventBatch.Field2 = inventTrans.DatePhysical;
    inventBatch.update();
}

ttsCommit;

标签: axaptax++dynamics-365-operations

解决方案


当你做 awhile select时,通常你把{}你的代码包装起来,但你也可以做与语句相同的事情if,如果你省略了{}并且立即进行的行会为每个循环执行。

if (true)
    info("Hello World");

if (true)
{
    info("Hello World");
}

while select SalesTable
    info(SalesTable.SalesId);

while select SalesTable
{
    info(SalesTable.SalesId);
}

关于您在上面输入的代码,这很愚蠢。在 AX 中,旧版本的代码if (common)通常只会评估common.RecId != 0,但在以后的版本中,我相信如果缓冲区返回一些数据,它会评估 true。但是,它总是会返回 true,因为 select 仅在while select为 true 时才返回记录。

您可以/应该只从字面上删除该if (inventTrans)行并留下括号,它将是可读/正常的代码。


推荐阅读