안녕,
동료 게시판 사용자 여러분 덕분에 열 전환기와 로컬 데이터 필터가 포함된 스크립트를 만들었습니다. 스크립트는 의도한 대로 작동하며, 다음 단계는 클라이언트 기반을 위한 애드인으로 패키징하는 것입니다. 애드인 작동에 대한 세부 정보를 확인하고 스크립트를 실행하면 데이터 가져오기, 정리 및 요약 과정을 거쳐 인터페이스가 생성됩니다. 하지만 스크립트 자체를 실행하면 정상적으로 작동하던 열 전환기를 실행하려고 하면 인터페이스에서 오류가 발생합니다. 열 전환기에서 새 항목을 클릭하면 다음 오류가 발생합니다. 이 뷰를 생성하는 코드를 첨부했습니다. 제 코드에서는 이 뷰를 요약 데이터 테이블에 첨부한 다음 스크립트 내에서 실행합니다. 애드인(스크립트만 첨부한)을 통해 실행하면 오류가 발생합니다. 그런 다음 해당 창을 닫고 데이터 테이블의 버튼을 클릭하면 오류 없이 의도한 대로 작동합니다. 무엇을 변경해야 할지, 그리고 통찰력을 얻으려면 어떻게 해야 할지 약간 혼란스럽습니다.
앤디

cell_sum << new script(
"Main Interface",
cell_sum = Current Data Table();
test = Fit Group(
Oneway(
Y( :Max Discharge Capacity ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
Oneway(
Y( :"Cycle Number (>0.8)"n ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
Oneway(
Y( :"Discharge Capacity @ 50 Cycles"n ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
Oneway(
Y( :"Remain % @ 50 Cycles"n ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
<<{Arrange in Rows( 4 )}
);
colpick = test << Column Switcher(
:Cathode Recipe.x,
cell_sum << get column names( Ordinal, Nominal )
);
(test << top parent)[listboxbox( 1 )] << set script(
Try( test << remove local data filter );
mycurrent = ((test << top parent)[listboxbox( 1 )] << get selected)[1];
test << Local Data Filter(
Add Filter( columns( Column( mycurrent ) ), Display( Column( mycurrent ), N Items( 15 ), Find( Set Text( "" ) ) ) )
);
);
test << Local Data Filter(
Add Filter( columns( colpick << get current ), Display( colpick << get current, N Items( 15 ), Find( Set Text( "" ) ) ) )
);
);
cell_sum << run script( "Main Interface" );
JSL은 Python과 같은 자동 범위 제어를 수행하지 않는다는 점에서 다른 많은 프로그래밍 언어와 다릅니다.이 경우 라인을 사용하고 있습니다.
(테스트 << 상위 부모)[listboxbox( 1 )] << 스크립트 설정(... 목록 상자에 스크립트를 추가합니다.이 스크립트가 실행되면(사용자가 항목을 선택하여) 해당 스크립트 내의 모든 변수를 해결해야 합니다. 여기에서 범위가 시작됩니다.Python에서 각 함수에는 로컬 범위가 있고 각 범위는 상위 범위와 전역 범위(범위는 영구적임)를 인식하므로 함수의 변수가 상위 범위 또는 전역 범위의 변수에 액세스할 수 있습니다.JSL은 이 작업을 수행하지 않습니다. 함수는 범위를 생성 및 기억하지 않으며 생성된 모든 범위는 이를 생성한 범위의 레코드를 유지하지 않습니다.JSL의 경우 범위가 지정되지 않은 변수에 액세스할 때( 네임스페이스:변수 또는 범위 지정( 네임스페이스, 변수 ) 그러면 기본적으로 여기 또는 글로벌 범위 그리고 그것이 전부입니다.
범위가 지정되지 않은 이름에 대한 범위 조회는 다음과 같습니다. 로컬 네임스페이스가 있는 경우 확인합니다( 현지( {}, ... ) 기능 또는 함수( {}, {기본 로컬}, ... ) 기능이 가장 일반적임) 여기 네임스페이스(있는 경우), 전역 네임스페이스를 확인합니다.때로는 열 이름(예: 각 행에 대해() 기능).
파일에서 자동 범위 단축키(예: 이름 기본값은 여기( 1 ) ), 따라서 각 변수는 전역적으로 범위가 지정됩니다.따라서, 언제 리스트 박스 스크립트는 찾을 수 있는 실행 시험 전역 범위에서 보기 때문입니다.그러나 기본적으로 애드인 스크립트는 이름 기본값은 여기( 1 ) 기능 여부 스크립트 파일에 있습니다.이 범위에서 파일 여기 스크립트가 완료되면 네임스페이스가 삭제되고 리스트 박스 스크립트를 찾을 수 없습니다 시험 액세스할 수 있는 모든 범위(즉, 자신의 여기 네임스페이스 및 전역 네임스페이스).당신은 끌 수 있습니다 이름 기본값은 여기( 1 ) 애드인 버전에서는 권장하지만 명시적으로 범위를 제어하는 것이 좋습니다.
즉, 비활성화하려면 이름 기본값은 여기( 1 ) 애드인 버전에서 다음 상자의 선택을 취소합니다.

안녕,
무슨 일이 일어나고 있는지에 대한 완전한 설명과 네임스페이스에 대한 설명에 감사드립니다.
나는 "Names Default to Here (1)"이 실제로 무엇에 관한 것인지 완전히 이해하지 못했습니다. 새로운 것을 배웠습니다.
다시 감사합니다.
앤디