Bonjour, j'ai un script qui utilise le filtre de données local dans l'objet Graph Builder. J'ai écrit une fonction qui dessine une ligne différente dans le graphique lorsque je change de sélection dans le filtre de données local. Cela fonctionne bien dans la fenêtre Graph Builder, mais si j'essaie de mettre dans une nouvelle fenêtre ou dans l'application JMP, il ignore la fonction et ne trace pas la ligne.
Quelqu'un sait pourquoi?
Edit : j'ai joint mon code.
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 );
Je suppose que vous utilisez une référence relative à Frame Box(), et lorsqu'elle est encapsulée dans un objet supplémentaire (Nouvelle fenêtre), la référence n'est plus valide.
D'autres choses peuvent se passer, il serait donc très utile si vous pouviez fournir plus de détails sur votre code, ou mieux encore, le code lui-même.