Comment afficher la fenêtre modale quel script exécute une fois ouverte ?J'ai passé du temps à créer un script jsl, qui fournit une interface utilisateur pour spécifier certains critères et extraire des données d'Amazon Redshift en fonction des entrées de l'utilisateur. Le script fonctionne bien mais rencontre un petit problème.
Une fois que l'utilisateur clique sur le bouton de requête dans une fenêtre modale, il définit une variable isValid = 1, se ferme pour exécuter le script suivant, qui créera ensuite une fenêtre de progression affichant un message du type "extraction de données, veuillez patienter..." et démarrer le requête à l'ouverture. Il devrait se fermer une fois la requête terminée.
Le problème est que cette fenêtre de progression n'est pas visible (ne s'affiche pas) sur mon écran. Il semble que JMP exécute le script de requête immédiatement après la création de la fenêtre avant qu'elle ne soit mise au premier plan, bien que la requête réussisse.
J'essaie d'insérer wait(0) ou de mettre la fenêtre au premier plan avant le script de requête, toujours pas de chance. Je ne peux voir la fenêtre de progression que si je remarque la partie requête.
Que puis-je faire pour que la fenêtre s'affiche et exécute le script de requête en même temps ?
/*scripts before this line are not related to the issue, hence not included*/<BR /><BR /><BR />If(isValid == 1,
nwQuery = New Window( "Query", <<SHOW menu=""></SHOW> window show up if remark below lines */
mySQL = Eval Insert(tpSQL);
dbc = Create Database Connection("DSN=Amazon Redshift; UID=***; PSW=***");
dt = Execute SQL (dbc, mySQL, "Query");
close database connection(dbc);<BR /> // add wait(2); if remark above lines
bbOk << Close Window;
))),
bbOk << Click;
);
);Automatisation et scriptsRe : Comment afficher la fenêtre modale quel script exécute après son ouverture ?La raison d'utiliser la fenêtre modale est qu'elle sera affichée au centre de l'écran et qu'elle est censée être affichée en haut par défaut. J'ai déjà essayé la fenêtre normale et elle ne s'affiche pas non plus.
Quoi qu'il en soit, je vais rassembler plus d'informations et explorer la nouvelle méthode de requête SQL. Je vous répondrai à nouveau après cela.
Très apprécié pour votre précieux avis et suggestion, merci !Re : Comment afficher la fenêtre modale quel script exécute après son ouverture ?Vous n'avez pas besoin d'utiliser une fenêtre modale pour indiquer que la requête est en cours d'exécution. Utilisez la fenêtre normale, ouvrez-la avant le démarrage de la requête et fermez-la une fois la requête terminée.
Names Default To Here(1);
isValid = 1;
If(isValid == 1,
nw = New Window("Query",
<<SHOW menu=""></SHOW>
<P>Je vous suggère également de passer de Créer une connexion à la base de données, Exécuter SQL, Fermer la connexion à la base de données vers Nouvelle requête SQL car c'est la méthode préférée pour les requêtes (c'est plus ennuyeux à utiliser, manque de documentation mais quand même... c'est la voie à suivre avant).</P>
<P> </P>
<P>Modifier:</P>
<P>Si vous décidez de passer à New SQL Query(), n'oubliez pas d'utiliser << Run Foreground with it SI vous souhaitez que le script attende la fin de la requête.</P>Re : Comment afficher la fenêtre modale quel script exécute après son ouverture ?Après quelques essais et erreurs, je trouve du code pour que le script se comporte comme je le souhaite.
Comme suggestion, j'utilise la fenêtre normale pour montrer que la requête est en cours d'exécution + la nouvelle fonction de requête SQL. Étant donné que la fenêtre normale n'apparaîtra pas au centre de l'écran, je crée une fonction pour capturer la taille de l'écran du moniteur (je ne veux pas appeler un script Power Shell externe pour cela), puis je calcule où elle devrait apparaître.
Cependant, il y a un petit inconvénient : la boîte à lumière occupée ne tourne pas lorsque la requête est en cours d'exécution - nous ne pouvons rien y faire, n'est-ce pas ?
Names Default To Here(1);
GetWinConsoleSize = Function({},
nW = New Window("Get Win Console Size", << Window View("Invisible"), << Maximize Window(1));
theSize = nW << Get Window Size();
nW << Close Window();
Return(theSize);
);
drawWinProgress = Function({scrSize},
xSize = 250;
ySize = 50;
cpX = (scrSize[1]/2)-(xSize/2);
cpY = (scrSize[2]/2)-(ySize/2);
nW = New Window("Query Data", << Show Menu(0), << Show Toolbars(0), << Size(xSize,ySize), << Show Window (0),
Lineup Box(N Col(2), Busy Light(<< Automatic, size(40,40)), Text Box(" Pulling data, please wait ...")),
);
nW << Move Window(cpX, cpY);
nW << Show Window (1);
Return(nW);
);
nwMain = New Window("UI for user to input query criteria", << Modal, << Return Result,
// All display box goes here
H List Box(
Spacer Box(),
bbQuery = Button Box("Query",
isValid = 1;
bbQuery << Close Window;
,
isValid = 0;
bbCancel = Button Box("Cancel", Stop()),
),
);
If(isValid == 1,
wcSize = GetWinConsoleSize();
wProg = drawWinProgress(wcSize);
Wait(0);<BR /> // Generating SQL based on user criteria
dt = New SQL Query(Connection(strOdbcConnection), CustomSQL(mySQL)) << Run Foreground;
wProg << Close Window;
);
Re : Comment afficher la fenêtre modale quel script exécute après son ouverture ?Vous pouvez utiliser << Run Background mais cela entraînerait de nombreux problèmes différents que vous devrez résoudre.
Re : Comment afficher la fenêtre modale quel script exécute après son ouverture ?Je vous suggère également de passer de Créer une connexion à la base de données, Exécuter SQL, Fermer la connexion à la base de données vers Nouvelle requête SQL car c'est la méthode préférée pour les requêtes (c'est plus ennuyeux à utiliser, manque de documentation mais quand même... c'est la voie à suivre avant).
J'utilise créer une connexion à la base de données/exécuter SQL/fermer la connexion à la base de données car j'ai souvent de nombreuses requêtes SQL à exécuter. La création de la connexion à la base de données entraîne une surcharge. L’appel répété d’une nouvelle requête SQL pourrait être plus lent.
Je suis curieux de savoir pourquoi vous pensez que la nouvelle requête SQL est la voie à suivre ?
Re : Comment afficher la fenêtre modale quel script exécute après son ouverture ?Ma suggestion est basée sur cet article . Quelle direction dois-je prendre pour interroger la base de données ? et le commentaire de Brian. Je n'aime pas vraiment utiliser New SQL Query() en raison de nombreux problèmes, mais je déplace quand même de plus en plus de mes scripts pour l'utiliser, espérons-le, pour la pérennité de mes scripts.
Re : Comment afficher la fenêtre modale quel script exécute après son ouverture ?J'utilise new sql query() tout le temps, car la fonctionnalité est la meilleure pour la plupart de mes scripts, et JMP le recommande comme "la bonne manière". Cela vaudrait peut-être la peine d'écrire une liste des avantages et des inconvénients et de l'utiliser comme indice pour un développement futur, par exemple en la mettant sur la liste de souhaits. Pourquoi ne pas améliorer la nouvelle requête SQL() pour plusieurs instructions.
Peut-être pourrions-nous en parler au Scripters Club.
Cordialement,
Re : Comment afficher la fenêtre modale quel script exécute après son ouverture ?Nous avons au moins un élément de liste de souhaits pour améliorer la documentation sur "nouvelle requête SQL ()", mais il y en a certainement quelques autres qui seraient nécessaires. Recueillir les frustrations et les problèmes est une bonne idée (je pense avoir publié quelques articles à ce sujet plus tôt).