retarder l'exécution du script jusqu'à ce que l'entrée de l'utilisateur soit fournie ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />la première partie de mon script invite l'utilisateur à sélectionner les variables « Y » et « By ».Il génère ensuite un datatable (appelons-le "dt2").
la seconde moitié du code repose sur cette table de données (dt2) qui a été générée une fois que l'utilisateur a effectué les sélections et cliqué sur OK.
Le problème que j'ai est que le code continue de s'exécuter une fois que la fenêtre apparaît et attend l'entrée de l'utilisateur... donc la 2ème moitié du code n'a pas de table de données (dt2) à utiliser donc elle ne produit rien. .
j'ai vu que je pouvais utiliser wait(), mais cela repose sur une valeur temporelle (en secondes), et j'aimerais écrire un script pour qu'il ne continue pas jusqu'à ce que l'entrée de l'utilisateur soit donnée dans la première moitié du code (générant ainsi le nécessaire datatable pour la 2ème moitié du code à exécuter).
merci d'avance pour toute aide/conseil !!
Re : retarder l'exécution du script jusqu'à ce que l'entrée de l'utilisateur soit fournie ?Il existe plusieurs façons de contrôler le comportement des fenêtres non modales :
1. Placez les tâches que vous souhaitez que le bouton OK accomplisse dans une expression plus tôt dans le code.Ensuite, lorsque l'utilisateur clique sur OK, fournissez simplement l'expression.
ok_expr = expression (
entrée_utilisateur = utilisateur_teb << recevoir un texte () ;
imprimer ( "Utilisateur entré" || entrée_utilisateur ) ;
mon gain << Fermer la fenêtre ;
) ;
entrée_utilisateur = "" ;
mon gain = nouvelle fenetre ( "Obtenir la contribution de l'utilisateur" ,
hlistbox (
zone de texte ( "Entrez du texte : " ) ,
utilisateur_teb = zone d'édition de texte () ,
) ,
boîte à boutons ( "D'ACCORD" , ok_expr ) ,
boîte à boutons ( "Annuler" , mon gain << Fermer la fenêtre ; ) ,
) ;
2. Placez les tâches OK dans un fichier JSL séparé et utilisez l'instruction include() pour exécuter les commandes souhaitées :
// ok_commands.jsl
entrée_utilisateur = utilisateur_teb << recevoir un texte () ;
imprimer ( "Utilisateur entré" || entrée_utilisateur ) ;
mon gain << Fermer la fenêtre ;
// Voici les commandes de la boîte de dialogue, je un fichier séparé
entrée_utilisateur = "" ;
mon gain = nouvelle fenetre ( "Obtenir la contribution de l'utilisateur" ,
hlistbox (
zone de texte ( "Entrez du texte : " ) ,
utilisateur_teb = zone d'édition de texte () ,
) ,
boîte à boutons ( "D'ACCORD" , inclure ( "ok_commands.jsl" );) ,
boîte à boutons ( "Annuler" , mon gain << Fermer la fenêtre ; ) ,
) ;
Re : retarder l'exécution du script jusqu'à ce que l'entrée de l'utilisateur soit fournie ?Si les données à coller proviennent de JMP ou peuvent être ouvertes sous forme de table par JMP, l'insertion dans la table de données peut également être scriptée.
Mais pour votre scénario, si l'interaction manuelle est inévitable en raison d'une décision subjective à prendre, j'utiliserais une fenêtre non modale avec un bouton "démarrer" et "terminer" (ou similaire) qui concurrence les actions en 1 et 2, respectivement.
Re : retarder l'exécution du script jusqu'à ce que l'entrée de l'utilisateur soit fournie ?Merci pour votre réponse.
En fait, cela a été très utile pour résoudre un autre problème que j'ai et j'ai l'intention de le faire.
essayez votre solution pour obtenir les données de l'utilisateur afin de le résoudre.
Dans ce cas particulier, l'utilisateur devra très probablement insérer BEAUCOUP de
données et l'idée est qu'il devrait les coller dans le DT.
Actuellement, ma solution exécute les scripts en 2 parties :
1. Toutes les actions nécessaires avant que l'utilisateur soit invité à insérer des données
(les données sont collées dans la DT)
2. Toutes les actions nécessaires après l'insertion des données.
Mais nous comprenons tous les deux que ce n'est pas une façon de travailler, et je ne peux pas non plus demander à l'utilisateur de le faire.
insérer toutes les données manuellement, cela prend trop de temps et est inefficace.
As-tu d'autres idées?
Merci,
Micha
Re : retarder l'exécution du script jusqu'à ce que l'entrée de l'utilisateur soit fournie ?Je ne pense pas que vous puissiez contourner une boîte de dialogue modale. Mais vous pouvez laisser l'utilisateur saisir les limites dans la fenêtre modale qui sont transférées vers la table de données en cliquant sur OK.
Voici un exemple :
dt = Nouveau tableau ( "test" , Nouvelle colonne ( "données" , numérique ) ) ;
Nouvelle fenetre ( "Fixer des limites" ,
<< modal ,
Boîte de table ( Boîte de col de chaîne ( "" , { "Moyenne" , "LCL" , "UCL" } ) , BCN = Zone d'édition de la colonne numérique ( "Limites" , [ . , . , . ] ) ) ,
Boîte à boutons ( "D'ACCORD" ,
L = BNC << obtenir ;
Évaluer (
Expr d'évaluation (
Colonne ( dt , "données" ) << définir la propriété ( "Limites de contrôle" , { Barre X ( Moy. ( Expr ( L [ 1 ] ) ) , LCL ( Expr ( L [ 2 ] ) ) , UCL ( Expr ( L [ 3 ] )) )})))
)
) ;
// Vérifiez si cela a fonctionné
Montrer ( L ) ;
dt : données << Obtenir une propriété ( "Limites de contrôle" ) ;
Re : retarder l'exécution du script jusqu'à ce que l'entrée de l'utilisateur soit fournie ?Je fais quelque chose de similaire et je souffre du même problème.
La fenêtre modale était également ma solution initiale. Malheureusement, cela ne fonctionne pas.
Lorsque la nouvelle fenêtre s'ouvre, elle empêche l'accès aux tables de données (elle reste en haut) :

Existe-t-il un moyen de contourner la valeur par défaut de la fenêtre modale ?
Ou une meilleure idée de mise en œuvre ?
Merci d'avance.
Re : retarder l'exécution du script jusqu'à ce que l'entrée de l'utilisateur soit fournie ?Si vous utilisez une nouvelle fenêtre pour collecter les entrées de l'utilisateur, faites-en une boîte de dialogue modale avec << modale
mon gain = nouvelle fenetre ( "Exemple de boîte de dialogue modale" , << modal ,
zone de texte ( "Ceci est une boîte de dialogue modale" ) ,
boîte à boutons ( "D'ACCORD" , quel_bouton = "D'ACCORD" ) ,
boîte à boutons ( "Annuler" , quel_bouton = "Annuler" ) ,
) ;
imprimer ( "L'utilisateur a cliqué sur" || quel_bouton ) ;