동일한 스크립트를 여러 번 실행할 때 "닫을 때"로 올바른 테이블을 닫는 방법은 무엇입니까?안녕하세요,
배경에 여러 테이블이 숨겨져 있는 그래프를 출력하는 추가 기능이 있습니다.
창을 닫을 때 다음과 같이 "On Close" 기능을 사용하여 관련 데이터 테이블을 닫습니다.
New window() << On close(
Close(TableA, nosave);
Close(TableB, nosave);
) ;
문제는 스크립트를 두 번 실행하면 두 번째 스크립트 실행 중에 첫 번째 실행의 TableA가 덮어쓰여진다는 것입니다.
다음과 같이 각 스크립트 실행 시 생성된 고유 ID를 사용하여 문제를 해결해 보았습니다.
NewWindow() << On Close(
For(i = NItems(GetWindowList() << Get Window Title()), i > 0, i--,
win = GetWindow((GetWindowList() << Get Window Title())[i]);
If(Contains(win << get window title, Eval(uniqueID)) != 0,
win << closewindow()
);
)
)
불행하게도 동일한 문제가 남아 있습니다. UniqueID를 덮어씁니다.
창을 닫으면 올바른 테이블이 닫히도록 테이블을 올바르게 참조하는 방법이 있습니까?
당신의 도움에 미리 감사드립니다!
자동화 및 스크립팅Re: 동일한 스크립트를 여러 번 실행할 때 "닫을 때"로 올바른 테이블을 닫는 방법은 무엇입니까?On Close에 대한 테이블 평가
Eval(EvalExpr(
New Window() << On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
));
Re: 동일한 스크립트를 여러 번 실행할 때 "닫을 때"로 올바른 테이블을 닫는 방법은 무엇입니까?작동 방식: 원래 예에서는
New window() << On close(
Close(TableA, nosave);
Close(TableB, nosave);
) ;
TableA와 TableB는 테이블에 대한 포인터를 보유하는 변수입니다. 인스턴스가 여러 개인 경우 변수는 할당된 마지막 인스턴스를 가리킵니다.
@jthi 예에서는
Eval(EvalExpr(
New Window() << On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
));
변수를 해당 값으로 바꾸기 위해 Eval(EvalExpr( ... Expr(...) ) ) 코드로 스크립트를 전처리하고 있습니다. 이제 close() 호출이 상수 값(훨씬 이전에 변수에서 얻은)을 사용하기 때문에 이로 인해 스크립트가 더 이상 변수의 현재 변수에 종속되지 않게 됩니다.
읽는 방법: EvalExpr(...)은 Expr(...)에 대한 인수를 살펴보고 이를 평가하고 Expr() 대신 평가된 결과를 남겨 둡니다. EvalExpr이 완료되면 OnClose(...) 메서드를 실행하기 위해 평가해야 하는 표현식이 반환됩니다.
Expr(...) 마커를 올바른 위치에 배치하는 것이 중요합니다. 돌로 던져야 할 부분은 변수의 값일 뿐입니다. 예를 들어 Expr(close(tableA,nosave))를 사용하는 경우 close() 함수가 너무 빨리 실행됩니다.
Re: 동일한 스크립트를 여러 번 실행할 때 "닫을 때"로 올바른 테이블을 닫는 방법은 무엇입니까?정말 고마워요!
Re: 동일한 스크립트를 여러 번 실행할 때 "닫을 때"로 올바른 테이블을 닫는 방법은 무엇입니까?설명해주신 Craige에게 감사드립니다. 매우 도움이 되었습니다! 나는 이것을 일반화했으며 창을 닫을 때 올바른 테이블이 닫혀서 기쁩니다.
여전히 어떤 식으로든 관련이 있는 문제가 있습니다. 이 창에서 드릴다운을 허용하기 위해 메뉴 스크립트를 설정했는데 이제 Eval(EvalExpr(...Expr(...))) 덕분에 올바른 인수를 호출합니다. 암호. 그럼에도 불구하고 데이터 조작 목적으로 이러한 스크립트 내에 변수를 정의했는데 덮어쓰는 것을 방지하는 방법을 모르겠습니다. 이러한 변수를 이 스크립트에 대해 로컬로 선언하는 방법이 있습니까?
예:
Eval(
EvalExpr(
NewWindow("Example", Outline = OutlineBox("Add-ins", Tabs = TabBox())) <<
On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
)
);
Outline << Set Menu Script(
{"Script1", Eval(EvalExpr(Add_in_table = Expr(TableA) << Subset(Selected Rows))) ;
// some code
TableD = Add_in_table << Summary(...) ;
Eval(
EvalExpr(
NewWindow(Graph builder()) << OnClose(
Try(Close(Expr(Add_in_table), nosave));
Try(Close(Expr(TableD), nosave));
)
)
)}
);감사합니다
Re: 동일한 스크립트를 여러 번 실행할 때 "닫을 때"로 올바른 테이블을 닫는 방법은 무엇입니까?이름의 기본값은 여기에 있습니다(1); 스크립트 시작 시 또는 창 범위(또는 상자)를 사용할 수도 있습니다. 스크립팅 가이드에는 네임스페이스 및 범위에 관한 몇 가지 정보가 있습니다.
왼쪽 메뉴에서 다른 페이지로 이동할 수 있습니다

또는 오른쪽 상단 화살표
