在 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() 函數呼叫中產生一個群組。如果項目數大於一,則至少有一行包含不同的字串。
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)。