Chemin d'identification JSL du script en cours d'exécutionLors de l'exécution d'un script (soit à partir de la fenêtre de script, soit en le déclenchant à partir du complément), j'aimerais pouvoir (1) obtenir l'emplacement du répertoire dans lequel se trouve la fenêtre de script ou (2) obtenir le id du complément qui contient le script. JMP le sait car il a dû ouvrir le script pour commencer à l'exécuter. Y a-t-il un moyen de faire cela?
Je sais que je peux le faire dans un contexte de complément en utilisant $ADDIN_HOME(id). Le problème ici est que j'ai une inclusion commune que j'emballe dans plusieurs compléments, et je préfère ne pas avoir à modifier le fichier pour chaque complément différent. Je peux me voir faire accidentellement une copie de l'inclusion commune du complément n°1 au complément n°2 et oublier de modifier l'identifiant dans l'inclusion afin qu'il utilise le bon chemin dans le complément n°2.
Re : JSL identifie le chemin du script en cours d'exécutionIl existe également une fonction intégrée pour traduire entre le délimiteur de chemin POSIX et Windows :

Re : JSL identifie le chemin du script en cours d'exécutionMerci Jeff, c'est super !
J'ai cependant trouvé une autre solution : j'ai enregistré mon script dans le même répertoire que la table de données actuelle, puis j'obtiens le chemin de ma table de données :
dt = Current Data Table();
path = dt<< getpath;
Le "chemin" résultant est mon chemin de répertoire avec des barres obliques inverses
Re : JSL identifie le chemin du script en cours d'exécutionJ'aime la solution de Jeff. Mais il existe également une fonction utilitaire dédiée à cet effet. Voici un exemple:
Convert File Path( "$HOME", Windows );
Il peut faire plus que changer le format de POSIX à Windows. Voir Aide > Index des scripts > Fonctions > POSIX.
Re : JSL identifie le chemin du script en cours d'exécutionJMP et JSL ne se soucient pas de l'orientation des barres obliques. Ils fonctionneront de toute façon.
Si vous devez utiliser la chaîne de chemin en dehors de JMP, vous pouvez utiliser Remplacer dans() :
foo="c:/my directory/my directory/my directory";
substitute into(foo, "/", "\");
show(foo);
Re : JSL identifie le chemin du script en cours d'exécutionLa solution ne fonctionne pas pour moi, le chemin résultant est avec des barres obliques /, j'en ai besoin avec une barre oblique inverse \. Est-ce que quelqu'un connaît une solution?
Re : JSL identifie le chemin du script en cours d'exécutionObtenir le répertoire par défaut combiné à la localisation du fichier DEF semble fonctionner, mais semble être un hack inconfortable.Le retour sur investissement en vaut probablement la peine - j'ai un fichier d'inclusion standard pour toutes mes définitions de chemin de fichier mais avec des révisions distinctes pour chaque complément (c'est-à-dire le même problème que vous décrivez), donc être capable de découvrir dynamiquement l'ID du complément parent serait extrêmement utile fonctionnalité.Tant et si bien, le hack commence à sembler attrayant - je n'avais pas pensé à lire le fichier DEF ...
Re : JSL identifie le chemin du script en cours d'exécutionJ'utilise généralement la fonction Get Default Directory ou la fonction Convert File Path avec une chaîne vide pour obtenir le chemin du script actuel.
path1 = Get Default Directory();
path2 = Convert File Path( "" );
Show( path1, path2 );
Voici le journal lorsque j'exécute ce script à partir d'un fichier situé dans mon dossier "C:\Public":
path1 = "/C:/Public/";
path2 = "/C:/Public/";
Re : JSL identifie le chemin du script en cours d'exécutionSi je ne peux pas obtenir que com.cmpny.dept.addin1 l'appelle, et que je n'utilise PAS l'approche de complément commune suggérée par pmroz, alors savoir dans quel dossier se trouvait ce script est suffisant car je peux ouvrir le complément .def du même dossier et extrayez l'identifiant à partir de là.
Cela me donne en fait une deuxième application potentielle. Si je peux entrer dans le addin.def d'un complément en cours d'exécution (mais pour le moment, je n'arrive pas à le faire), je pourrais faire une vérification de version en obtenant l'id et addinVersion de addin.def puis comparer cela à une liste des dernières versions de compléments que je pourrais obtenir en utilisant Internet Open. Je pourrais alors savoir si l'addinVersion locale de l'utilisateur est la plus récente et la plus performante.
Re : JSL identifie le chemin du script en cours d'exécutionOui, mais je souhaite inclure une ligne dans General Functions.jsl qui identifie quel autre complément appelle une fonction dans General Functions.jsl.
En d'autres termes, dans com.cmpny.dept.addin1, un script peut appeler une fonction dans General Functions.jsl. Je veux faire référence à une variable dans General Functions.jsl qui révélera que com.cmpny.dept.addin1 l'a appelée.
Re : JSL identifie le chemin du script en cours d'exécutionPourquoi ne pas faire du fichier d'inclusion commun son propre complément.De cette façon, vous pouvez l'inclure via quelque chose comme:
// Load functions common to various apps
include("$ADDIN_HOME(com.cmpny.dept.common)\General Functions.jsl");