예상대로 작동하지 않는 JSL Throw() 관련 도움말여러분 모두에게,
(JMP 프로 16.1.0, Win10)
내 이전 게시물과 관련된 문제가 있습니다. 여기 , "뒷이야기"에 관심이 있다면.
지금 겪고 있는 주요 문제는 Throw() 명령이 예상대로 작동하지 않는다는 것입니다. 내 코드(전체 코드는 끝 부분 참조)에서 현재 열려 있는 그래프 빌더 보고서가 있는지 확인하기 위한 테스트가 몇 군데 있습니다. 다음과 같이 표시되며 Expr() 문으로 래핑됩니다.
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
문제는 코드를 실행할 때마다(마치 도구 모음 핫버튼에서 실행하는 것처럼) 이 줄을 건너뛰고 열려 있는 보고서가 없으면 무시한다는 것입니다. 그러나 "줄 단위로" 코드를 실행하면 열려 있는 보고서가 없음을 올바르게 파악하고 사용자에게 알립니다.
조직 전체의 사용자에게 배포할 코드를 작성하고 다양한 종류의 상황을 처리할 수 있을 만큼 견고하게 만들려고 합니다. 여러 데이터 테이블을 포함할 수 있음).
코드의 개념은 다음과 같습니다(문제는 항목 6에서 발생). 사용자가 Graph Builder에서 그래픽을 만든 다음 그래픽의 일상적인 수정을 원하면(자세한 내용은 위의 링크 참조) 사용자가 도구 모음을 클릭합니다. 해당 작업을 수행하는 핫 버튼.
- 이 코드는 Graphic_Expr 식을 실행하여 그래픽의 위치를 결정합니다. 그래픽이 "독립형" 데이터 테이블에 있는지 또는 프로젝트 내에 있는지(하나의 옵션만 선택할 수 있음). -> (이동)
- 선택한 확인란에 따라 코드는 dt_win_Expr 또는 prj_win_Expr 코드를 실행합니다(지금은 코드를 테스트할 때 데이터 테이블 옵션에 대해서만 설정했지만 이상적으로는 결국 거의 동일하게 작동해야 함) . -> (이동)
- 독립형 데이터 테이블인 경우 dt_win_Expr을 실행하고 사용자가 편집하려는 그래픽이 있는 데이터 테이블을 선택할 수 있는 창을 만듭니다. 사용자는 잠재적으로 둘 이상의 Graph Builder가 열린 상태에서 둘 이상의 데이터 테이블을 열 수 있음을 기억하십시오. | (또는)
- 마찬가지로 사용자가 프로젝트를 선택하면 prj_win_Expr(아직 완료되지 않음)을 실행하여 사용자가 해당 프로젝트 내에서 어떤 프로젝트(둘 이상이 열린 경우)와 후속 데이터 테이블을 선택하도록 합니다. -> (이동)
- 독립 실행형이든 프로젝트 내이든 관계없이 데이터 테이블이 선택되면 코드는 SquarifyWin_Expr 표현식을 실행합니다. 여기에서 가장 먼저 하는 일은 실제로 현재 보고서가 있는지 테스트하는 것입니다. 위의 If() 코드입니다(현재 보고서가 그래프 빌더인지 여부를 수정하고 테스트해야 할 수도 있습니다). **여기에서 코드가 예상대로 작동하지 않습니다. 열려 있는 그래프 빌더가 없더라도 경고를 표시해야 할 때 나머지 코드로 계속 진행됩니다.** 모든 것이 작동한다면....-> (이동)
- 픽셀 치수와 정사화 여부에 따라 코드는 RprtUpdate_Expr 식을 실행하여 그래프 빌더 보고서에 원하는 업데이트를 보냅니다.
이 설명이 의미가 있고 내가 원하는 프로그래밍 경로/기능이 무엇인지 맥락에 넣는 데 도움이 되기를 바랍니다.
해결책을 찾는 데 도움을 주셔서 미리 감사드립니다. 끝에 전체 JSL 코드가 있습니다.
감사해요!,
DS
Names Default To Here( 1 );
Clear Symbols();
RprtUpdate_Expr = Expr(
gb = Current Report()[Outline Box( 1 )] << Get Scriptable Object;
Report( gb )[framebox( 1 )] << FrameSize( widthN, heightN );
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "blue" );
Pen Size( 1 );
Line Style( "solid" );
Line( {xmin, ymin}, {xmax, ymax} );
);
);
SquarifyWin_Expr = Expr(
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
nwin = New Window( "Enter Size of Desired Graph",
<<RETURN result=""></RETURN>대량 맞춤화Re: JSL Throw()가 예상대로 작동하지 않는 문제에 대한 도움말안녕 @jthi 그리고 @David_Burnham ,
귀하의 의견과 아이디어에 감사드립니다. 저는 미니 모달 창을 좋아합니다. ANY Graph Builder가 열려 있는지 테스트할 때 유용했습니다.
나는 상황을 바꾸고 코드를 완전히 다시 작성하기로 결정했습니다. 이제 내가 원하는 것을 수행하지만 그래프 빌더 인스턴스가 어떤 프로젝트에 있는지 연관 배열을 통해 추적합니다. 데이터 테이블을 사용하면 여러 개를 열어도 단일 데이터 테이블 내에서도 그래프 빌더의 다른 인스턴스를 구별하는 데 문제가 없지만 프로젝트에 여러 탭이 있으므로 Grab 빌더의 할당을 확인해야 했습니다. 스크립트 가능한 개체가 올바른 프로젝트와 연결되었습니다. 저는 AA를 사용할 수 있고 그들이 저를 도와줄 수 있어서 매우 기뻤습니다! 새 코드는 또한 데이터 테이블(또는 프로젝트)만 열려 있는지 또는 둘 다 열려 있는지에 따라 첫 번째 창을 변경합니다.
이것은 좋은 작은 노력이었고 나는 그것을 작업하는 것을 즐겼습니다. 좀 더 테스트한 후 조직과 공유하겠습니다. 관심이 있다면 아래 코드입니다. 가능한 모든 프로젝트를 통과한 다음 프로젝트 내의 모든 창을 통과할 때 For Each()가 작동하도록 하는 방법을 알 수 없었기 때문에 대신 For() 루프를 수행했습니다.
감사해요!,
DS
//JSL to add diagonal line and automatically resize to desired size
//Written by SDF1 with help/input from jthi, txnelson, Craige_Hales, David_Burnham, and Mark_Bailey
Names Default To Here( 1 );
Clear Symbols();
lb_width = 80;
Lines_n = 6;
mmw = Function( {title, text, text_icon = "BlankIndex", window_icon = "NewApplication"},
{Default Local},
New Window( title,
<<MODAL></MODAL>Re: JSL Throw()가 예상대로 작동하지 않는 문제에 대한 도움말그래프 빌더 창을 스캔하는 예:
getGraphBuilderWindows = function({},{default local},
lst = {};
winList = getWindowList();
for each({win},winList,
winTitle = win << getWindowTitle;
if (contains(winTitle,"Graph Builder"),
insertinto(lst,win)
)
);
return(lst);
);
lstGBWindows = getGraphBuilderWindows();Re: JSL Throw()가 예상대로 작동하지 않는 문제에 대한 도움말또한 CurrentReport는 생성 중인 창을 포함하여 열려 있는 모든 창을 찾습니다.창을 Graph Builder로 식별하려면 디스플레이 트리(예: OutlineBox(1) )를 검사해야 하며 다른 창을 열었다면 현재 창이 아닐 수 있으므로 열려 있는 창 목록을 통해 검색해야 합니다.
Re: JSL Throw()가 예상대로 작동하지 않는 문제에 대한 도움말코드에 진단을 입력해 보십시오.
나는 넣어
show ( Current Report() );
테스트하기 전에 다음과 같이 보고했습니다.
Current Report() = DisplayBox[HeadBox];
비어 있지 않습니다.
Re: JSL Throw()가 예상대로 작동하지 않는 문제에 대한 도움말JMP Log에 출력물이 있는지 확인하셨나요? Throw가 트리거될 수 있지만 "오류 창"이 없습니다. 적어도 추가 기능으로 작업할 때는 Throw가 스크립트로 실행될 때와 같은 오류 창을 만들지 않기 때문에 사용자 정의 오류 모달 창을 사용합니다.
모달 대화 상자 Throw 대신 사용할 수 있는 매우 간단한 경고 기능이 있습니다(던질 수도 있지만 모달 창을 사용하여 사용자에게 오류를 표시함).
편집하다:
정보 모달 창에 사용한 한 가지 기능을 찾았습니다.
Names Default To Here(1);
mini_modal_window = function({title, text, text_icon = "BlankIndex", window_icon = "NewApplication"}, {Default Local},
New Window(title, <<MODAL></MODAL>