여러분 모두에게,
(JMP 프로 16.1.0, Win10)
내 이전 게시물과 관련된 문제가 있습니다. 여기 , "비하인드 스토리"에 관심이 있다면.
지금 겪고 있는 주요 문제는 Throw() 명령이 예상대로 작동하지 않는다는 것입니다. 내 코드(전체 코드는 끝 부분 참조)에서 현재 열려 있는 그래프 빌더 보고서가 있는지 확인하기 위한 테스트가 몇 군데 있습니다.
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
문제는 코드를 실행할 때마다(도구 모음 핫버튼에서 실행하는 것처럼) 보고서가 열려 있지 않으면 이 줄을 건너뛰고 무시한다는 것입니다. 그러나 코드를 "줄 단위로" 실행하면 열려 있는 보고서가 없음을 올바르게 파악하고 사용자에게 알립니다.
내 조직 전체의 사용자에게 배포할 코드를 작성하려고 하고 다양한 상황을 처리할 수 있을 만큼 충분히 강력하게 만들려고 노력 중입니다. 예를 들어 사용자에게 하나 이상의 데이터 테이블이 열려 있거나 하나 이상의 프로젝트가 열려 있는 경우( 여러 데이터 테이블을 포함할 수 있음).
다음은 코드의 개념입니다(항목 6에서 문제 발생): 사용자가 그래프 빌더에서 그래픽을 생성한 다음 그래픽을 일상적으로 수정하려는 경우(자세한 내용은 위 링크 참조), 사용자가 도구 모음을 클릭합니다. 핫버튼을 눌러 해당 작업을 수행합니다.
- 이 코드는 Graphic_Expr 표현식을 실행하여 그래픽의 위치를 결정합니다. "독립 실행형" 데이터 테이블에 있는지, 아니면 프로젝트 내에 있는지(하나의 옵션만 선택할 수 있음) -> (로 이동)
- 선택한 확인란에 따라 코드는 dt_win_Expr 또는 prj_win_Expr 코드를 실행합니다(지금은 코드를 테스트할 때 데이터 테이블 옵션에 대해서만 설정했지만 이상적으로는 결국 거의 동일하게 작동해야 함) . -> (로 이동)
- 독립 실행형 데이터 테이블인 경우 dt_win_Expr을 실행하고 사용자가 편집하려는 그래픽이 있는 데이터 테이블을 선택할 수 있는 창을 만듭니다. 사용자는 잠재적으로 둘 이상의 그래프 빌더가 열려 있는 상태에서 둘 이상의 데이터 테이블을 열 수 있음을 기억하십시오. | (또는)
- 유사하게, 사용자가 프로젝트를 선택하면 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>