Intégration d'un script Query Builder (avec un script post-query) dans un autre scriptBonjour,
J'utilise le générateur de requêtes et le générateur de graphiques pour assembler des scripts qui extraient constamment des données d'un serveur, tracent et enregistrent les résultats (dans JMP 13). Récemment, j'ai essayé de lier plusieurs de ces scripts en un seul script qui les exécute tous en même temps en utilisant Include(), ce qui fonctionne bien. Le problème auquel je suis confronté maintenant est que tous les répertoires ont été codés en dur, et j'aimerais utiliser quelque chose comme : Get Default Directory() afin que cette collection plus large de scripts puisse être déplacée sur d'autres ordinateurs.
Malheureusement, j'ai rencontré les problèmes suivants :
-Lorsque Get Default Directory() est utilisé dans le 'Post-Query Script', il renvoie '/ ', quel que soit l'endroit où ce script est enregistré.
-Lors de l'enregistrement de tableaux de données/graphiques créés dans le script post-requête dans des variables, ces variables ne semblent pas exister (ou ne sont pas accessibles) en dehors du
script post-requête.
- Toutes les variables créées en dehors du script post-requête ne peuvent pas être utilisées à l'intérieur.
// Main File
directory = Get Default Directory();
fileNames = Files In Directory( directory );
For( iFile = 1, iFile <= N Items( fileNames ), iFile++,
filename = fileNames[iFile];
If( Ends With( filename, ".jsl" ),
Include( directory || script_folder || filename, invisible );
);
);
// Example Post-Query File section
gb = Graph Builder(
// graph details
);
// directory = Get Default Directory(); // Another method attempted
myPath = directory || "Report\";
myName = "Example";
fileName = myPath || myName || ".pptx";
myTemplate = directory || "Template.pptx";
Report( gb ) << save presentation( fileName, Template( myTemplate ), Outline Titles( "Hide" ) );
gb << close window;
Close All( data tables );
Des pensées?
ScriptRe : Intégration d'un script Query Builder (avec un script post-requête) dans un autre scriptVous devriez envisager de créer un complément pour votre application.Cela résoudra votre problème d'emplacement des fichiers.Un complément associe un alias à un emplacement de fichier.Si votre "alias" complémentaire est com.company.dept.mygreatapp, vous pouvez faire référence à des fichiers comme celui-ci :
include("$ADDIN_HOME(com.company.dept.mygreatapp)\DoSomethingGreat.jsl");Re : Intégration d'un script Query Builder (avec un script post-requête) dans un autre scriptVotre message contient plusieurs éléments à traiter :
- Si vous travaillez sous Windows, Get Default Directory() n'obtient pas le dernier répertoire utilisé. Si votre programme vous y invite, utilisez Set Default Directory, puis Get Default Directory() renverra cette valeur.
- Je recommande d'utiliser un espace de noms ou un tableau associatif global, pour conserver les références/variables.Si plusieurs instances de votre programme s'exécutent à la fois, faites-en un espace de noms anonyme, afin qu'il soit unique pour chaque instance.Pour un tableau associatif, ::varRef_aa = Associative Array(); ::varRef_aa << Définir la valeur par défaut (-9999); Ensuite, dans votre script, spécifiez ::varRef_aa[a] = 1; L'un des avantages de l'utilisation d'un NameSpace est qu'un Clear Globals() non intentionnel ne supprime pas l'espace de noms ni son contenu.
- Je ne suis pas fan de Save Presentation car chaque objet est enregistré sur une page différente et il y a très peu de contrôle pour la mise à l'échelle. J'utilise un programme externe gratuit appelé P3ICLI . Donc, généralement, je crée un répertoire de sortie, unique pour la tâche ou le rapport, puis j'enregistre la vue que je veux dans une image de ce répertoire. J'évoque sa méthode, car en enregistrant la sortie que vous voulez, en tant que diapositive 1, 2, etc. , vous pouvez utilisez Enregistrer la présentation, en créant une liste de fichiers dans le répertoire () pour ce répertoire enregistré, et dans une boucle for en les ajoutant à votre PPTX à l'aide de Enregistrer la présentation. De plus, en enregistrant une image, vous pouvez avoir un affichage multi-objets, enregistré et lors de l'utilisation de l'enregistrement de la présentation, tous les éléments sont sur la même page.Il offre un certain contrôle du rapport PPTX.
Enfin, oui, il est ennuyeux que Open Database(connect_str, ...) et Create Database Connection(connect_str) puissent utiliser la même chaîne de connexion qui nécessite la barre oblique finale, mais New SQL Query() nécessite la suppression de la barre oblique finale et un préfixe de ODBC : si connexion à une base de données.
//--- Method 3: New SQL Query platform script -----------------------------------
//remove the trailing slash on importpath
importnoslash = substr(connect_str, 1, length(connect_str)-1 );
nconnect = "ODBC:" || importnoslash
Juste quelques idées.
Re : Intégration d'un script Query Builder (avec un script post-requête) dans un autre scriptAjout d'un autre exemple :
dir = Get Default Directory();
query = Open( dir || "query.jmpquery", Private );
query << Run(
On Run Complete(
queryResult << // some function
a = 1
)
);
Write( a ); // variable is unknown
La création d'une variable dans Run() n'est pas accessible en dehors de Run()