안녕하세요, Graph Builder 개체에서 로컬 데이터 필터를 사용하는 스크립트가 있습니다. 로컬 데이터 필터에서 선택을 전환할 때 차트에 다른 선을 그리는 함수를 작성했습니다. Graph Builder 창에서는 제대로 작동하지만 새 창이나 JMP 앱에 넣으려고 하면 함수를 무시하고 선을 그리지 않습니다.
왜 그런지 아는 사람?
편집: 내 코드에 합류했습니다.
gb = dt << Graph Builder(
Size( 865, 775 ),
Show Control Panel( 0 ),
Fit to Window( "Off" ),
Variables( X( :TIME_col ), X( :col2 ), Y( :col1 ), Y( :col2 ), Group X( :group_leg ), Overlay( :leg_col ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 36 ) ), Smoother( X, Y, Legend( 48 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 38 ) ), Smoother( X, Y, Legend( 49 ) ) ),
Elements( Position( 2, 1 ), Points( X, Y, Legend( 40 ) ), Line Of Fit( X, Y, Legend( 24 ), R²( 1 ) ) ),
Elements( Position( 2, 2 ), Points( X, Y, Legend( 42 ) ), Smoother( X, Y, Legend( 51 ) ) ),
);
ldf = gb << Local Data Filter(
Add Filter(
columns( :leg_col, :group_col ),
Display( :leg_col, Size( 160, 60 ), List Display ),
Display( :group_col, Size( 160, 60 ), List Display ),
Order By Count( :group_col )
)
);
cso1 = gb << Column Switcher( :leg_col, legend_cls ); // legend_cls is list of cols
cso2 = gb << Column Switcher( :col1, num_cls ); // num_cls is list of cols
cso3 = gb << Column Switcher( :col2, num_cls );
cso4 = gb << Column Switcher( :TIME_col, time_cls );// time_cls is list of cols
cso1 << Set Size( 200 );
cso1 << Set NLines( 6 );
cso2 << Set Size( 200 );
cso2 << Set NLines( 15 );
cso3 << Set Size( 200 );
cso3 << Set NLines( 15 );
cso4 << Set Size( 200 );
cso4 << Set NLines( 10 );
// Row state handler function
doSomethingWithSelection = Function( {x},
{Default Local},
currentScript = ldf << getScript;
Clear Log();
str = Char( Name Expr( currentScript ) );
prodi = Left( Substr( str, Contains( str, "Where(:Prod == " ) + 16 ), 4 );
response = cso2 << Get current;
predictor = cso3 << Get Current;
// dt_lims is data table of control limits
TR1_row = dt_lims << get rows where( :Label == response & :Prod == prodi );
::TR_res = Column( dt_lims, "CL" )[TR1_row];
Try( gbreport[FrameBox( 1 )] << Add Graphics Script( H Line( TR_res ) ) );
TR2_row = dt_lims << get rows where( :Label == predictor & :Prod == prodi );
::TR_pred = Column( dt_lims, "CL" )[TR2_row];
Show( TR_pred );
Try( gbreport[FrameBox( 2 )] << Add Graphics Script( H Line( TR_pred ) ) );
);
// Get a reference to the report
gbReport = Report( gb );
// Assign the row state handler to the local data filter display box
rsh1 = gbReport[Outline Box( 1 )] << MakeRowStateHandler( doSomethingWithSelection );
내 생각에 Frame Box()에 대한 상대 참조를 사용하고 있으며 추가 개체(새 창)에 캡슐화되면 참조가 더 이상 유효하지 않습니다.
다른 일이 진행 중일 수 있으므로 코드에 대한 보다 구체적인 정보를 제공하거나 코드 자체를 제공할 수 있다면 매우 도움이 될 것입니다.