axapta - 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;
解决方案
当你做 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)
行并留下括号,它将是可读/正常的代码。
推荐阅读
- javascript - 未捕获的 SyntaxError:JSON 输入意外结束。无法将信息从 html 正确解析为 JSON
- rust - 如何为 trait 参数指定类型?
- javascript - 为什么我不能将它传递给 Array.prototype.filter 函数?
- java - 如何将两个视图堆叠在一起?
- vue.js - 如何修复在 vue native 中无法访问样式标签?
- java - Java Spark SQL - CSV Inferschema 自定义
- java - 使用 Spring 集成轮询 S3 存储桶以获取文件
- azure-sql-database - Azure Data factory_V2中的特殊字符编码问题
- javascript - Firebase 添加的数据自动被删除
- java - 为什么我可以将 int 分配给 Short 作为返回类型,但不能在参数列表中?