在 JSL 代码中添加显式表引用会导致意外结果我有一个简短的 JSL 脚本,想把它添加到一个更大的自动化工作流程中。它的目的是迭代某一列 (layer_type) 中的值,如果发现除 SSOD 之外的任何值,代码应该返回 1。如果所有列的值都是“SSOD”,则返回 0。这在工作流程的 if/else 拆分中用于抛出错误。如果您有更好的代码实现方法,我洗耳恭听。
鉴于现有代码,我将其从工作流中抽取出来调试。当我在 JSL 窗口中运行代码并选择正确的数据表时,代码运行正常。但是,由于我要将其插入到用户工作流中,所以我希望明确说明数据表名称,因为我发现这样更健壮。然而,当我添加第一行代码时,它不再按预期工作——它仍然运行,但无论列值如何,它始终返回“1”。
下面的 JSL 在引用表格(附件)的脚本窗口中运行时会产生预期结果。请注意,附件中的表格将返回“0”。将“layer_type”列中某一行的值修改为其他值,它应该返回 1。

Summarize( meas = by( :layer_type ) );
result = 0;
For( i = 1, i <= N Items( meas ), i++,
If( meas[i] != "SSOD",
result = 1;
Break();
)
);
result;
However, when I modify only the beginning of the JSL to explicitly reference the table it no longer works - when I change a single value in the 'layer_type' column to anything other than SSOD it continues to return '0'. In fact I've tested this both ways by commenting out the Data Table( "layer_type_forum_help" ) << code and it seems it always returns what was previously returned when the block started with the 'Summarize' command
Data Table( "layer_type_forum_help" ) << Summarize( meas = by( :layer_type ) );
result = 0;
For( i = 1, i <= N Items( meas ), i++,
If( meas[i] != "SSOD",
result = 1;
Break();
)
);
result;
先行感谢您的帮助!
自动化和脚本回复:在 JSL 代码中添加显式表引用会导致意外结果Summary() 函数的语法不正确。请参阅脚本索引,了解其定义、语法和示例。
Summarize(Data Table( "layer_type_forum_help" ), meas = by( :layer_type ) );
result = 0;
For( i = 1, i <= N Items( meas ), i++,
If( meas[i] != "SSOD",
result = 1;
Break();
)
);
result;
回复:在 JSL 代码中添加显式表引用会导致意外结果我认为你可以简单地使用函数调用,
N Items( meas )
确定答案。您在此列中查找单个值。因此,调用 Summarize() 函数应该会返回单个组。如果项目数大于 1,则至少有一行包含不同的字符串。
Data Table( "layer_type_forum_help" ) << Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
回复:在 JSL 代码中添加显式表引用会导致意外结果谢谢@Mark_Bailey我考虑过这一点,但对于错误检查,可能有一个值不是所需的值(SSOD),我想区分这一点。
回复:在 JSL 代码中添加显式表引用会导致意外结果*** 更新:我为下面的回复道歉。它可能对某些人有帮助,但并没有解决你的问题。你想要什么?你是想在第一次出现不匹配的值后,判断是否有任何值不匹配并返回结果吗?
您说:“我有一个简短的 JSL 脚本,想将其添加到一个更大的自动化工作流程中。其目的是遍历某一列 (layer_type) 中的值,如果发现除 SSOD 以外的任何值,代码应返回 1。如果所有列中的值均为 SSOD,则应返回 0。 ”
Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
此案例仅显示值“SSOD”,因此它应该返回 0:

结果为 0:

另一种情况显示的不是“SSOD”值,因此应该返回 1

结果为1:

回复:在 JSL 代码中添加显式表引用会导致意外结果@Mark_Bailey - 不用担心,这只是间接相关,而且我在帖子中确实询问过这个问题,所以感谢您抽出时间。
我可以更好地解释该解决方案在哪些情况下没有返回所需的结果。您最新帖子中的示例是准确的,并且返回了所需的结果。第三种情况是该列包含所有非SSOD 的值。例如,整个 layer_type 都填充了“NAIL”。在这种情况下,我认为您的代码会返回 0。所需的结果仍然是 1(因为并非所有值都是 SSOD)。