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;
귀하의 도움에 미리 감사드립니다!
자동화 및 스크립팅Re: 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;
Re: JSL 코드에 명시적 테이블 참조를 추가하면 예기치 않은 결과가 발생합니다.함수 호출을 간단히 사용할 수 있다고 생각합니다.
N Items( meas )
답을 확인하려면 이 열에서 단일 값을 찾고 있습니다. 따라서 Summarize() 함수 호출에서 단일 그룹이 생성되어야 합니다. 항목 수가 하나보다 많으면 다른 문자열을 가진 행이 하나 이상 있는 것입니다.
Data Table( "layer_type_forum_help" ) << Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
Re: JSL 코드에 명시적 테이블 참조를 추가하면 예기치 않은 결과가 발생합니다.@Mark_Bailey 님 , 감사합니다. 이 문제를 고려해 보았지만 오류 검사를 위해 원하는 값이 아닌 값(SSOD)이 하나 있을 수 있고 이를 구별하고 싶습니다.
Re: JSL 코드에 명시적 테이블 참조를 추가하면 예기치 않은 결과가 발생합니다.*** 업데이트: 아래 답변에 대해 사과드립니다. 누군가에게는 도움이 될지 몰라도, 요청하신 내용은 처리되지 않습니다. 원하시는 것이 무엇인가요? 일치하지 않는 값이 처음 발견된 후 어떤 값이 반환되는지 알고 싶으신가요?
" 더 큰 자동화 워크플로에 추가하려는 짧은 JSL 스크립트가 있습니다. 목적은 열(layer_type)의 값을 반복하면서 SSOD가 아닌 값을 찾으면 1 을 반환하는 것입니다. 열의 모든 값이 'SSOD'이면 0을 반환해야 합니다. "라고 말씀하셨습니다.
Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
이 사례에서는 "SSOD" 값만 표시되므로 0을 반환해야 합니다.

결과는 0입니다:

다른 경우에는 "SSOD:" 이외의 값이 표시되므로 1을 반환해야 합니다.

결과는 1입니다.

Re: JSL 코드에 명시적 테이블 참조를 추가하면 예기치 않은 결과가 발생합니다.@마크_베일리 - 걱정하지 마세요. 간접적으로 관련이 있고 게시물에서 질문했으니 시간 내주셔서 감사합니다.
해당 솔루션이 원하는 결과를 반환하지 않는 이유를 더 자세히 설명해 드릴 수 있습니다. 최근 게시글의 예시는 정확하며 원하는 결과를 반환합니다. 세 번째 시나리오는 열에 SSOD가 아닌 모든 값이 포함된 경우입니다. 예를 들어, layer_type 전체가 'NAIL'로 채워져 있습니다. 이 경우 코드는 0을 반환할 것으로 예상됩니다. 하지만 모든 값이 SSOD가 아니므로 원하는 결과는 여전히 1입니다.