Ciao, è da un po 'che cerco di scrivere un codice in JSL dove a seconda del valore di una certa variabile, il grafico ottenuto dal costruttore di grafici cambia.
Il mio esempio particolare in questo momento è piuttosto semplice, ho una casella di controllo e, a seconda della selezione dell'utente (selezionata / deselezionata), voglio aggiungere o rimuovere gruppi nel grafico utilizzando il filtro locale. Ecco un esempio molto semplice
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value<BR /><BR />// Check box to Remove group A from the graph
usw = New Window("Ignore A?", << Modal,
//Check Box defaulted to checked ignore
checkIgnore = check box({"Ignore A?"},
<< Set(1,1),
cb = checkIgnore << Get())
);
// Answer to Cancel or close buttons
If( usw["button"] == -1, throw("User cancelled") );
show(cb); // I can see how the value of cb changes between 0 and 1
nw = New Window( "Example Report",
// Box plot with dots
dot_box_plot = dt << Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Title( 0 ),
Variables( X(:drug ), Y( :pain ), Color(:drug ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
Elements( Position( 2, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
SendToReport( Dispatch( {}, "X title", TextEditBox, {Set Text( "" )} ) ),
/* This is the part that I'd like to make interactive
to keep or remove A-group from the plot depending on
user selection */
if(cb == 1,
Local Data Filter(
Close Outline( 1 ),
Add Filter( columns( :drug ),
Where( :Drug != "A" )
)
)
)
)
);Come puoi vedere, dovrebbe esserci qualcosa di sbagliato dalle mie parti con l'istruzione if perché non cambia nulla, la trama mantiene tutti i gruppi. E, naturalmente, quando rimuovo solo la parte IF (), la mia trama ignora il gruppo A.
Sarei molto grato per qualsiasi suggerimento.
Il modo migliore per gestire le modifiche al codice della piattaforma è passare i messaggi alla piattaforma dopo l'elaborazione iniziale della piattaforma.Il tentativo di modificare le istruzioni della piattaforma diventa troppo disordinato e troppo irregolare.
Di seguito è riportato lo script modificato per aggiungere il filtro dopo l'esecuzione della piattaforma Graph Builder.E poi per nascondere la visualizzazione effettiva del filtro dati locale

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value// Check box to Remove group A from the graph
usw = New Window( "Ignore A?",
<<MODAL></MODAL>