Chiedere all'utente di selezionare le colonne è un'operazione molto comune negli script JMP . Durante la fase di preparazione dello script, è importante considerare alcuni aspetti per decidere quale metodo sia l'opzione migliore.
Per iniziare, pensa a come vuoi che appaia la tua finestra. Oltre a selezionare le colonne, la finestra dovrebbe consentire all'utente di specificare altre opzioni? E, soprattutto, come vuoi che si comporti la finestra?
Finestre modali vs. finestre non modali
L'apertura di una finestra modale interrompe l'esecuzione dello script, che attende l'interazione dell'utente. Una volta che l'utente interagisce con la finestra e la chiude, il resto dello script verrà eseguito. Un esempio di finestra modale è la finestra delle Preferenze (File > Preferenze). JMP non eseguirà altre operazioni finché la finestra delle Preferenze non verrà chiusa.
Con una finestra non modale, la finestra rimane aperta e consente allo script di completarsi senza attendere alcuna interazione da parte dell'utente. Si pensi alla finestra di avvio della piattaforma Fit Model (Analizza > Fit Model). Si noti che è possibile lasciare la finestra aperta ed eseguire altre attività in JMP. È presente anche una casella di controllo per mantenere la finestra di dialogo aperta dopo la creazione dell'analisi. Questo è un esempio di finestra non modale. Si potrebbe scegliere di utilizzare una finestra non modale che rimane aperta in modo che l'utente possa effettuare una selezione diversa di colonne e ruoli.
Come si decide quindi se utilizzare una finestra modale o non modale? La considerazione principale è se si desidera che JMP attenda l'input dell'utente oppure no. Se il resto dello script dipende dalle selezioni dell'utente, allora è consigliabile utilizzare una finestra modale. Poiché esistono due metodi utili per creare finestre modali, analizziamoli.
Dialogo colonna()
La funzione Column Dialog() è una funzione integrata che consente di generare rapidamente una finestra di dialogo modale per chiedere agli utenti di selezionare le colonne dalla tabella dati corrente. L'autore dello script seleziona semplicemente i tipi di caselle di visualizzazione da mostrare nella finestra di dialogo, ma ha un controllo limitato sul layout. Ecco uno script di esempio che chiede all'utente di selezionare due colonne X e due colonne Y.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
dlg = Column Dialog(
yList = Col List( "Y",
Min Col( 2 ),
Max Col( 2 ),
Data Type( "Numeric" )
),
effectList = Col List( "Effects",
Min Col( 2 ),
Max Col( 3 ),
Data Type( "Numeric" )
)
);
La finestra visualizzata all'utente si presenta in questo modo:

Si noti che l'autore dello script ha fornito solo le opzioni per le due caselle di visualizzazione Elenco colonne. L'elenco delle colonne della tabella dati corrente a sinistra è fornito come parte della funzionalità integrata.
Dopo che l'utente ha effettuato le proprie selezioni e cliccato su OK, il risultato è un elenco delle scelte dell'utente, come in questo esempio:
dlg = {yList = {:Age, :Oxy}, effectList = {:RunPulse, :RstPulse}, Button(1)};
Le singole espressioni nell'elenco non vengono valutate. Pertanto, per utilizzare le colonne selezionate, è possibile scaricare l'elenco delle colonne da utilizzare nell'analisi in un paio di modi. Ad esempio, è possibile utilizzare un indice per la variabile dlg list e assegnare l'elenco delle colonne a una nuova variabile, oppure è possibile utilizzare lo stesso nome:
yList = dlg["yList"];
effectList = dlg["effectList"];
Un altro metodo per scaricare l'elenco delle colonne è utilizzare Eval List() per valutare gli elementi nella variabile dlg list. L'ultimo elemento in dlg list viene rimosso prima di valutare gli altri elementi nell'elenco perché Pulsante (1) non necessita di alcuna valutazione.
Eval List( Remove( dlg, -1 ) )
Ora, se esegui Mostra simboli (), vedrai tutte le variabili definite e che le selezioni delle colonne sono memorizzate nelle variabili yList e effectList.
// Here
dlg = {yList = {:Age, :Oxy}, effectList = {:RunPulse, :RstPulse}, Button( 1 )};
dt = Data Table( "Fitness" );
effectList = {:RunPulse, :RstPulse};
yList = {:Age, :Oxy};
// 4 Here
Entrambi i metodi che sceglierai per scaricare i valori ti permetteranno di utilizzare le variabili yList e effectList nella tua analisi:
fm = dt << Fit Model(
Y( Eval( yList ) ),
Effects( Eval( effectList ) ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run
);
Quali sono dunque le considerazioni principali da tenere presenti quando si utilizza Column Dialog()?
- È sempre presente un selettore di colonne dalla tabella dati corrente. Sebbene ciò sia utile quando si desidera che l'utente selezioni le colonne, limita l'utilizzo di questo tipo di finestra modale.
- La quantità di codice script da scrivere è piuttosto breve. Potreste scoprire che le funzionalità integrate soddisfano pienamente le vostre esigenze. Tuttavia, le possibilità di personalizzazione sono limitate. Ad esempio, sono disponibili solo tre costruttori per controllare la disposizione delle caselle di visualizzazione all'interno della finestra: HList(), VList() e Line Up Box().
- Il valore restituito da Column Dialog() è coerente. Come autore dello script, sai che Column Dialog() restituirà sempre un elenco di valori che devono essere estratti. Lo svantaggio è che è necessario un passaggio aggiuntivo per scaricare i valori e c'è meno flessibilità per quanto riguarda il modo in cui si recuperano le selezioni dell'utente.
Per un elenco completo dei costruttori disponibili per Column Dialog(), consultare la sezione Costruttori per le finestre di dialogo a colonne del capitolo Alberi di visualizzazione nella Guida alla programmazione .
Nuova finestra()
La funzione `New Window()` è integrata e consente di generare una finestra modale o non modale, utilizzabile per svariati scopi, dalla richiesta all'utente di selezionare delle colonne alla visualizzazione di informazioni importanti. Grazie alla varietà di caselle di visualizzazione disponibili, è possibile creare finestre modali altamente personalizzate utilizzando `New Window()`.
Con l'aumento delle opzioni di personalizzazione, aumenta anche la quantità di codice da scrivere. L'esempio seguente mostra una finestra simile alla Column Dialog() mostrata sopra. Si noti che alcune caselle di visualizzazione hanno nomi simili. Ad esempio, V List Box(), H List Box(), Panel Box() e Lineup Box() vengono utilizzate per controllare il layout della finestra. Le restanti caselle di visualizzazione sono gli elementi visibili nella finestra, come i pulsanti e l'elenco delle colonne.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
nw = New Window( "Launch Dialog",
<
<MODAL>
V List Box( Align( "right" ),
<STRONG>H List Box</STRONG>(
<STRONG>Panel Box</STRONG>( "Select Columns", clb = Filter Col Selector( dt, all ) ),
<STRONG>Panel Box</STRONG>( "Cast Selected Columns into Fit Model Roles",
<STRONG>Lineup Box</STRONG>( N Col( 2 ), Spacing( 5 ), Button Box( "Y", clbY << Append( clb << Get Selected ) ), clbY = Col List Box( "Numeric", MinItems( 2 ), MaxItems( 2 ), nlines( 3 ) ), Button Box( "Effects", clbEffects << Append( clb << Get Selected ) ), clbEffects = Col List Box( "Numeric", MinItems( 2 ), MaxItems( 3 ), nlines( 4 ) ), Button Box( "Remove", clbY << Remove Selected; clbEffects << Remove Selected; ) ) ) ),
<STRONG>H List Box</STRONG>( Button Box( "OK", yVars = clby << Get Items( "Column Reference" ); eVars = clbEffects << Get Items( "Column Reference" ); ), Button Box( "Cancel" ) ) ) );
</MODAL>
La finestra visualizzata all'utente si presenta in questo modo:

Nel modo in cui è programmata questa finestra di esempio, le colonne selezionate vengono assegnate a variabili JSL nel pulsante OK. Potreste pensare che, in alternativa, le colonne potrebbero essere assegnate anche negli script dei pulsanti Y ed Effetti. Questo è vero. Tuttavia, poiché l'utente può trascinare e rilasciare le colonne nelle caselle di riepilogo delle colonne, questi pulsanti potrebbero non essere mai effettivamente cliccati. Pertanto, lo script del pulsante non verrebbe mai eseguito. Per metodi alternativi, consultare la sezione Estrazione di valori da una finestra del capitolo Materiali espositivi nella Guida alla programmazione .
Eseguendo Spettacolo ( yVars, eVars ); verranno elencati i valori nel registro (Visualizza > Registro):
yVars = {:Age, :Oxy};
eVars = {:RunPulse, :RstPulse};
Queste variabili possono essere utilizzate nell'avvio del modello Fit senza dover essere scaricate.
fm = dt << Fit Model(
Y( Eval( yVars ) ),
Effects( Eval( eVars ) ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run
);
Non lasciatevi scoraggiare dalla quantità di codice script. Diamo invece un'occhiata ad alcune delle personalizzazioni disponibili in questa finestra modale New Window(). Gli elementi seguenti corrispondono ai numeri mostrati nell'immagine qui sopra.
- La funzione New Window() consente di specificare un titolo per la finestra che sia significativo per il progetto di scripting. In questo esempio, viene utilizzato il semplice titolo "Avvia finestra di dialogo".
- Il testo visualizzato sopra i gruppi è personalizzabile. Ciò consente di fornire all'utente una breve istruzione o descrizione del gruppo.
- Il numero di righe visualizzate può essere specificato come argomento facoltativo per la Col List Box() che contiene le colonne selezionate. Ciò consente di controllare il numero di colonne visualizzate nella casella di testo. È inoltre possibile aggiungere spazio extra per motivi estetici, come mostrato sopra.
- L'elenco delle colonne può provenire da qualsiasi tabella di dati aperta, non solo dalla tabella corrente. Ricorda che la funzione New Window() può essere utilizzata per diversi tipi di messaggi di dialogo. Pertanto, la visualizzazione dell'elenco delle colonne è facoltativa.
- Il pulsante OK può avere funzionalità personalizzate. Inoltre, il pulsante Annulla è opzionale.
New Window() dispone di molti più costruttori di quelli qui illustrati, come slider, pulsanti radio, immagini, grafici e altro ancora! Per un elenco dei costruttori disponibili per New Window(), consultare la sezione "Costruisci caselle di visualizzazione per New Windows" del capitolo " Materiali espositivi" della Guida alla programmazione .
In sintesi, Column Dialog() offre un modo rapido e semplice per creare la finestra, ma ha un supporto limitato per la personalizzazione. D'altra parte, una finestra modale New Window() offre una notevole flessibilità di personalizzazione, ma richiede più riflessione e script per essere creata. Chiaramente, entrambe le opzioni hanno vantaggi significativi e presumo che troverai un utilizzo per entrambe. Per fortuna, c'è spazio nella tua cassetta degli attrezzi per entrambe!