Inviter l'utilisateur à sélectionner des colonnes est une tâche très courante pour un script JMP . Lors de la préparation de votre script, plusieurs éléments sont à prendre en compte pour vous aider à choisir la méthode la plus appropriée.
Pour commencer, réfléchissez à l'apparence que vous souhaitez donner à votre fenêtre. Outre la sélection des colonnes, doit-elle permettre à l'utilisateur de spécifier d'autres options ? Et surtout, quel comportement souhaitez-vous lui attribuer ?
Fenêtres modales vs. non modales
L'ouverture d'une fenêtre modale interrompt l'exécution du script et attend une interaction de l'utilisateur. Une fois la fenêtre fermée, le reste du script s'exécute. La fenêtre Préférences (Fichier > Préférences) est un exemple de fenêtre modale. JMP ne réalise aucune autre action tant que la fenêtre Préférences est active.
Avec une fenêtre non modale, celle-ci reste ouverte et permet au script de s'exécuter sans intervention de l'utilisateur. Prenons l'exemple de la fenêtre de lancement de la plateforme Fit Model (Analyser > Fit Model). Notez que vous pouvez laisser la fenêtre ouverte et effectuer d'autres tâches dans JMP. Une case à cocher permet même de conserver la boîte de dialogue ouverte après la création de l'analyse. Il s'agit d'un exemple de fenêtre non modale. Vous pouvez également opter pour une fenêtre non modale qui reste ouverte afin de permettre à l'utilisateur de sélectionner d'autres colonnes et rôles.
Comment choisir entre une fenêtre modale et une fenêtre non modale ? Le principal critère est de savoir si vous souhaitez que JMP attende une action de l’utilisateur. Si la suite du script dépend des choix de l’utilisateur, une fenêtre modale est alors préférable. Puisqu’il existe deux méthodes efficaces pour créer des fenêtres modales, examinons-les.
Boîte de dialogue de colonne()
La fonction intégrée Column Dialog() permet de générer rapidement une boîte de dialogue modale invitant l'utilisateur à sélectionner des colonnes dans le tableau de données actuel. L'auteur du script choisit simplement le type de boîtes de dialogue à afficher, mais dispose de peu de contrôle sur leur mise en page. Voici un exemple de script invitant l'utilisateur à sélectionner deux colonnes X et deux colonnes 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 fenêtre présentée à l'utilisateur ressemble à ceci :

Notez que l'auteur du script n'a fourni que les options des deux zones d'affichage de la liste des colonnes. La liste des colonnes du tableau de données actuel, située à gauche, fait partie des fonctionnalités intégrées.
Une fois que l'utilisateur a effectué ses sélections et cliqué sur OK, le résultat est une liste des choix de l'utilisateur, comme dans :
dlg = {yList = {:Age, :Oxy}, effectList = {:RunPulse, :RstPulse}, Button(1)};
Les expressions individuelles de la liste ne sont pas évaluées. Par conséquent, pour utiliser les colonnes sélectionnées, vous pouvez extraire la liste des colonnes pour votre analyse de plusieurs manières. Par exemple, vous pouvez indexer la variable de liste dlg et affecter la liste des colonnes à une nouvelle variable, ou vous pouvez utiliser le même nom :
yList = dlg["yList"];
effectList = dlg["effectList"];
Une autre méthode pour décharger la liste des colonnes consiste à utiliser Eval List() pour évaluer les éléments de la variable dlg list. Le dernier élément de dlg list est supprimé avant l'évaluation des autres, car Bouton(1) ne nécessite aucune évaluation.
Eval List( Remove( dlg, -1 ) )
Maintenant, si vous exécutez Afficher les symboles (), vous verrez toutes les variables définies et que les sélections de colonnes sont stockées dans les variables yList et effectList.
// Here
dlg = {yList = {:Age, :Oxy}, effectList = {:RunPulse, :RstPulse}, Button( 1 )};
dt = Data Table( "Fitness" );
effectList = {:RunPulse, :RstPulse};
yList = {:Age, :Oxy};
// 4 Here
Quelle que soit la méthode choisie pour décharger les valeurs, vous pourrez utiliser les variables yList et effectList dans votre analyse :
fm = dt << Fit Model(
Y( Eval( yList ) ),
Effects( Eval( effectList ) ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run
);
Quels sont donc les principaux éléments à prendre en compte lors de l'utilisation de Column Dialog() ?
- Un sélecteur de colonnes permettant de choisir parmi les colonnes du tableau de données actuel est toujours présent. Bien que pratique pour permettre à l'utilisateur de sélectionner des colonnes, cette fonctionnalité limite l'utilisation de ce type de fenêtre modale.
- La quantité de code à écrire est relativement faible. Les fonctionnalités intégrées répondront probablement à tous vos besoins. Cependant, les possibilités de personnalisation sont limitées. Par exemple, seuls trois constructeurs permettent de contrôler la disposition des boîtes d'affichage dans la fenêtre : HList(), VList() et Line Up Box().
- La valeur renvoyée par Column Dialog() est toujours la même. En tant qu'auteur du script, vous savez que Column Dialog() renverra systématiquement une liste de valeurs à extraire. L'inconvénient est qu'il faut effectuer une étape supplémentaire pour décharger ces valeurs et que la méthode de récupération des sélections de l'utilisateur est moins flexible.
Pour obtenir la liste complète des constructeurs disponibles pour Column Dialog(), consultez la section Constructeurs pour les boîtes de dialogue de colonnes du chapitre Arborescences d'affichage du Guide de script .
Nouvelle fenêtre()
La fonction intégrée `NewWindow()` permet de générer une fenêtre modale ou non modale pouvant servir à diverses fins, comme inviter l'utilisateur à sélectionner des colonnes ou afficher des informations importantes. Grâce à la variété de boîtes d'affichage disponibles, vous pouvez créer des fenêtres modales hautement personnalisées avec `NewWindow()`.
Avec l'augmentation des options de personnalisation, la quantité de code à écrire augmente également. L'exemple suivant présente une fenêtre similaire à la boîte de dialogue Column Dialog() illustrée ci-dessus. Notez que certaines boîtes d'affichage ont des noms similaires. Par exemple, V List Box(), H List Box(), Panel Box() et Lineup Box() servent à contrôler la mise en page de la fenêtre. Les autres boîtes d'affichage correspondent aux éléments visibles dans la fenêtre, tels que les boutons et la liste des colonnes.
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 fenêtre présentée à l'utilisateur ressemble à ceci :

Dans la configuration de cette fenêtre d'exemple, les colonnes sélectionnées sont assignées à des variables JSL dans le bouton OK. On pourrait également assigner ces colonnes dans les scripts des boutons Y et Effets. C'est possible. Cependant, comme l'utilisateur peut glisser-déposer les colonnes dans les listes déroulantes, ces boutons risquent de ne jamais être cliqués. Par conséquent, leur script ne serait jamais exécuté. Pour d'autres méthodes, consultez la section « Extraire les valeurs d'une fenêtre » du chapitre « Arbres d'affichage » du Guide de programmation .
L'exécution de Montrer ( yVars, eVars ); affichera les valeurs dans le journal (Affichage > Journal) :
yVars = {:Age, :Oxy};
eVars = {:RunPulse, :RstPulse};
Ces variables peuvent être utilisées lors du lancement du modèle d'ajustement sans avoir besoin d'être déchargées.
fm = dt << Fit Model(
Y( Eval( yVars ) ),
Effects( Eval( eVars ) ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run
);
Ne vous laissez pas impressionner par la quantité de code. Examinons plutôt quelques options de personnalisation disponibles dans cette fenêtre modale `New Window()`. Les éléments suivants correspondent aux numéros affichés dans l'image ci-dessus.
- La fonction New Window() vous permet de définir un titre de fenêtre pertinent pour votre projet de script. Dans cet exemple, le titre simple « Lancer la boîte de dialogue » est utilisé.
- Le texte affiché au-dessus des groupes est personnalisable. Cela vous permet de fournir une brève instruction ou une description du groupe à l'utilisateur.
- Le nombre de lignes affichées peut être spécifié comme argument optionnel de la fonction Col List Box() qui contient les colonnes sélectionnées. Cela vous permet de contrôler le nombre de colonnes affichées. Vous pouvez également ajouter de l'espace supplémentaire à des fins esthétiques, comme illustré ci-dessus.
- La liste des colonnes peut provenir de n'importe quelle table de données ouverte, et pas seulement de la table active. N'oubliez pas que la fonction Nouvelle fenêtre() permet d'afficher différents types de messages. L'affichage de la liste des colonnes est donc facultatif.
- Le bouton OK peut être personnalisé. De plus, le bouton Annuler est optionnel.
La fonction New Window() dispose de bien plus de constructeurs que ceux présentés ici, tels que des curseurs, des boutons radio, des images, des graphiques, et bien plus encore ! Pour obtenir la liste des constructeurs disponibles pour New Window(), consultez la section « Construction de boîtes d’affichage pour les nouvelles fenêtres » du chapitre « Arbres d’affichage » du Guide de programmation .
En résumé, la fonction Column Dialog() permet de créer rapidement et facilement une fenêtre, mais ses options de personnalisation sont limitées. À l'inverse, la fonction modale New Window() offre une grande flexibilité de personnalisation, mais sa création exige davantage de réflexion et de code. De toute évidence, les deux options présentent des avantages significatifs et je suis persuadé que vous trouverez des utilités à chacune. Heureusement, vous avez la place pour les deux !