JSL Identifica la ruta del script actualmente en ejecuciónAl ejecutar un script (ya sea desde la ventana del script o al activarlo desde el complemento), me gustaría poder (1) llegar a la ubicación del directorio en el que se encuentra la ventana del script o (2) obtener el ID del complemento que contiene el script. JMP lo sabe porque tuvo que abrir el script para comenzar a ejecutarlo. ¿Hay alguna forma de hacer esto?
Sé que puedo hacer esto en un contexto de complemento usando $ADDIN_HOME(id). El problema aquí es que tengo una inclusión común que estoy empaquetando en varios complementos, y preferiría no tener que cambiar el archivo para cada complemento diferente. Puedo verme accidentalmente haciendo una copia de la inclusión común del complemento n.º 1 al complemento n.º 2 y me olvido de cambiar la identificación en la inclusión para que use la ruta correcta en el complemento n.º 2.
Re: JSL Identificar la ruta del script actualmente en ejecuciónTambién hay una función incorporada para traducir entre el delimitador de ruta POSIX y Windows:

Re: JSL Identificar la ruta del script actualmente en ejecuciónGracias Jeff, esto es genial!
Sin embargo, encontré otra solución: guardé mi script en el mismo directorio que la tabla de datos actual, luego obtuve la ruta de mi tabla de datos:
dt = Current Data Table();
path = dt<< getpath;
La "ruta" resultante es la ruta de mi directorio con barras inclinadas hacia atrás
Re: JSL Identificar la ruta del script actualmente en ejecuciónMe gusta la solución de Jeff. Pero también hay una función de utilidad dedicada para este propósito. Aquí hay un ejemplo:
Convert File Path( "$HOME", Windows );
Puede hacer más que cambiar el formato de POSIX a Windows. Consulte Ayuda > Índice de secuencias de comandos > Funciones > POSIX.
Re: JSL Identificar la ruta del script actualmente en ejecuciónA JMP y JSL no les importa la orientación de las barras. Funcionarán de cualquier manera.
Si necesita usar la cadena de ruta fuera de JMP, puede usar Sustituir en ():
foo="c:/my directory/my directory/my directory";
substitute into(foo, "/", "\");
show(foo);
Re: JSL Identificar la ruta del script actualmente en ejecuciónLa solución no funciona para mí, la ruta resultante es con barras inclinadas /, la necesito con barra inclinada hacia atrás \. ¿Alguien sabe una solución?
Re: JSL Identificar la ruta del script actualmente en ejecuciónObtener el directorio predeterminado combinado con la ubicación del archivo DEF parece que funcionaría, pero parece un truco incómodo.La recuperación probablemente valga la pena: tengo un archivo de inclusión estándar para todas mis definiciones de ruta de archivo pero con revisiones separadas para cada complemento (es decir, el mismo problema que describe), por lo que poder descubrir dinámicamente la ID del complemento principal sería extremadamente útil característica.Tanto es así, que el truco empieza a sonar atractivo: no había pensado en leer el archivo DEF...
Re: JSL Identificar la ruta del script actualmente en ejecuciónPor lo general, uso la función Obtener directorio predeterminado o la función Convertir ruta de archivo con una cadena vacía para obtener la ruta del script actual.
path1 = Get Default Directory();
path2 = Convert File Path( "" );
Show( path1, path2 );
Aquí está el registro cuando ejecuto este script desde un archivo ubicado dentro de mi carpeta "C:\Public":
path1 = "/C:/Public/";
path2 = "/C:/Public/";
Re: JSL Identificar la ruta del script actualmente en ejecuciónSi no puedo hacer que com.cmpny.dept.addin1 lo llame, y NO uso el enfoque de complemento común que sugiere pmroz, entonces saber en qué carpeta estaba ese script es lo suficientemente bueno porque puedo abrir el complemento .def de la misma carpeta y extraiga la identificación de allí.
Esto realmente me da una segunda aplicación potencial. Si puedo ingresar el addin.def de un complemento que se está ejecutando actualmente (pero en este momento parece que no puedo hacer esto), podría hacer una verificación de versión obteniendo la identificación y addinVersion de addin.def y luego comparar eso a una lista de las últimas versiones de complementos que podría obtener usando Internet Open. Luego podría averiguar si la addinVersion local del usuario es la última y la mejor.
Re: JSL Identificar la ruta del script actualmente en ejecuciónSí, pero quiero incluir una línea en General Functions.jsl que identifique qué otro complemento llama a una función en General Functions.jsl.
En otras palabras, en com.cmpny.dept.addin1, un script podría llamar a una función en General Functions.jsl. Quiero referirme a una variable en General Functions.jsl que revelará que com.cmpny.dept.addin1 la llamó.
Re: JSL Identificar la ruta del script actualmente en ejecución¿Por qué no hacer que el archivo de inclusión común sea su propio complemento?De esa manera puedes incluirlo a través de algo como:
// Load functions common to various apps
include("$ADDIN_HOME(com.cmpny.dept.common)\General Functions.jsl");