Ciao, ho uno script che utilizza il filtro dati locali nell'oggetto Graph Builder. Ho scritto una funzione che disegna una linea diversa nel grafico quando cambio la selezione nel filtro dati locale. Funziona bene nella finestra di Graph Builder, ma se provo a inserire una nuova finestra o nell'app JMP, ignora la funzione e non traccia la linea.
Qualcuno sa perché?
Modifica: ho aderito al mio codice.
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 );
La mia ipotesi sarebbe che tu stia usando un riferimento relativo a Frame Box(), e quando è incapsulato in un oggetto aggiuntivo (Nuova finestra), il riferimento non è più valido.
Potrebbero succedere altre cose, quindi sarebbe molto utile se potessi fornire più specifiche del tuo codice o, ancora meglio, il codice stesso.