Chers tous,
(JMP Pro 16.1.0, Win10)
J'ai un problème lié à un de mes précédents messages ici , si vous êtes intéressé par une "histoire en arrière".
Le principal problème que j'ai maintenant est que la commande Throw() ne fonctionne pas comme prévu. Dans mon code (voir à la fin pour le code complet), j'ai à quelques endroits un test pour voir s'il existe actuellement un rapport de générateur de graphes ouvert, ressemble à ceci, et il est enveloppé dans une instruction Expr() :
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
Le problème est que chaque fois que j'exécute le code (comme si je l'exécutais à partir d'un bouton de la barre d'outils), il semble ignorer ces lignes et ignore s'il n'y a pas de rapport ouvert. Mais, lorsque j'exécute le code "ligne par ligne", il détecte correctement qu'aucun rapport n'est ouvert et avertit l'utilisateur.
J'essaie d'écrire du code à distribuer aux utilisateurs de mon organisation et d'essayer de le rendre suffisamment robuste pour gérer différents types de situations, par exemple si un utilisateur a une ou plusieurs tables de données ouvertes et/ou un ou plusieurs projets ouverts (qui peut contenir plusieurs tables de données).
Voici le concept du code (le problème se produit au point 6) : un utilisateur crée un graphique dans Graph Builder, puis souhaite effectuer une modification de routine du graphique (voir le lien ci-dessus pour plus de détails à ce sujet), l'utilisateur clique alors sur la barre d'outils bouton de raccourci pour effectuer ladite action.
- Le code exécute l'expression Graphic_Expr pour déterminer l'emplacement du graphique -- est-ce dans une table de données "autonome" ou dans un projet (une seule option peut être sélectionnée). -> (aller à)
- En fonction de la case à cocher sélectionnée, le code exécute ensuite le code dt_win_Expr ou prj_win_Expr (pour le moment, je ne l'ai configuré que pour l'option de table de données lorsque je teste le code, mais idéalement, il devrait fonctionner plus ou moins la même chose à la fin) . -> (aller à)
- S'il s'agit d'une table de données autonome, il exécute dt_win_Expr et crée une fenêtre permettant à l'utilisateur de sélectionner la table de données dans laquelle réside le graphique qu'il souhaite modifier. Rappelez-vous que l'utilisateur peut avoir plus d'une table de données ouverte avec potentiellement plus d'un Graph Builder ouvert. | (ou)
- De même, si l'utilisateur sélectionne un projet, il exécutera le prj_win_Expr (pas encore terminé) pour que l'utilisateur sélectionne quel projet (si plusieurs sont ouverts) et les tables de données suivantes dans ce projet. -> (aller à)
- Une fois qu'une table de données est sélectionnée, qu'elle soit autonome ou dans un projet, le code exécute l'expression SquarifyWin_Expr. La première chose qu'il fait ici est de tester s'il existe en fait un rapport actuel - le code If() ci-dessus (je devrai peut-être modifier et tester si le rapport actuel est un générateur de graphiques ou non). ** C'est là que le code ne fonctionne PAS comme prévu. Même s'il n'y a pas de Graph Builder ouvert, il continuera avec le reste du code lorsqu'il devrait lancer l'avertissement.** Si tout fonctionne....-> (aller à)
- En fonction des dimensions en pixels et de la mise au carré ou non, le code exécute ensuite l'expression RprtUpdate_Expr, où il envoie les mises à jour souhaitées au rapport du Générateur de graphiques.
J'espère que cette description a du sens et aide à mettre en contexte le chemin/la fonctionnalité de programmation que je souhaite.
Un grand merci d'avance pour toute aide dans la recherche d'une solution. Code JSL complet à la fin.
Merci!,
DS
Names Default To Here( 1 );
Clear Symbols();
RprtUpdate_Expr = Expr(
gb = Current Report()[Outline Box( 1 )] << Get Scriptable Object;
Report( gb )[framebox( 1 )] << FrameSize( widthN, heightN );
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "blue" );
Pen Size( 1 );
Line Style( "solid" );
Line( {xmin, ymin}, {xmax, ymax} );
);
);
SquarifyWin_Expr = Expr(
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
nwin = New Window( "Enter Size of Desired Graph",
<<RETURN result=""></RETURN>