¿Hacer complemento desde la aplicación? ¿Obtener la ruta de la aplicación?¿Hay alguna manera de crear un complemento desde una aplicación que he creado? La aplicación es bastante compleja y todo lo que me gustaría hacer es agruparla en un complemento. Además, este problema podría resolverse si alguien puede ayudarme a resolver el siguiente problema:
Creé una aplicación y la tengo en una carpeta (myApp/) y tengo scripts que me gustaría incluir() desde el directorio de origen (myApp/src/). Sin embargo, cuando intento obtener el directorio predeterminado () desde la aplicación, devuelve "/", lo que no me permitirá encontrar la carpeta de origen si la aplicación se ejecuta en una computadora diferente. ¿Hay alguna forma de consultar la ubicación de la aplicación que se está ejecutando actualmente? Alternativamente, ¿hay alguna forma de agrupar archivos en la aplicación para poder acceder de manera confiable a mis archivos (quizás a través de una variable de ruta predeterminada)?
Mis intentos de poner la aplicación en un complemento han fallado. No puedo ejecutar la aplicación (.jmpappsource o .jmpapp) desde el complemento. Además, dado que la aplicación es bastante compleja, no quiero reconstruirla en el generador de complementos. ¿Hay alguna manera de organizar la aplicación en un complemento? Sería genial si JMP agregara una función "Exportar aplicación como complemento" o "Crear complemento desde la aplicación".
Re: ¿Hacer un complemento desde la aplicación? ¿Obtener la ruta de la aplicación?¡Gracias nascif_jmp por compartir su método y gracias ian_jmp por compartir el artículo! Ambos fueron útiles, pero me conformé con un enfoque diferente: reestructurar mi aplicación/complemento. Estos son los pasos que tomé para asegurarme de que mi aplicación encontraría sus archivos de inclusión, de manera confiable, en diferentes computadoras.
- Coloque todos los archivos/carpetas relevantes para la aplicación en una carpeta (lo llamo directorio raíz de la aplicación o directorio raíz para abreviar)
- Use una variable de ruta para el directorio raíz de la aplicación y rutas relativas para hacer referencia a archivos y directorios en la aplicación.
- Por ejemplo, un directorio "$appRoot/" que contiene una carpeta "src/" con mis scripts y una "lib/" con imágenes e íconos. Me refiero a estos como "$appRoot/src/" y "$appRoot/lib/"
- Guarde su aplicación como un archivo .jmpapp, ubicado en algún lugar debajo del directorio raíz de su aplicación o en uno de sus subdirectorios (no importa dónde, siempre que sea accesible a través de una ruta relativa desde la carpeta raíz)
- Cree un complemento y, en archivos adicionales, agregue el directorio raíz de la aplicación (jmp también importará todos sus archivos y subdirectorios para incluirlos en el complemento).Estos archivos se ubicarán en el directorio del complemento.
- Ahora puede ubicar todos sus archivos consultando el directorio del complemento, que se encuentra en una ubicación predeterminada en cada computadora. Esta ubicación se recupera haciendo getPathVariable("ADDIN_HOME("Mi nombre de complemento")). Use esto para encontrar los archivos y directorios que agregó en el paso anterior. En la secuencia de comandos del complemento, establezca la variable de ruta en el directorio raíz del complemento:
- ADDIN_NAME = "Mi nombre de complemento";
- setPathVariable("appRoot", getPathVariable(evalInsert("ADDIN_HOME(^ADDIN_NAME^)")) || "Directorio raíz de la aplicación/");
- Establecer otras variables de ruta relativas a este directorio raíz
- Ejecute su archivo de aplicación desde la secuencia de comandos de su complemento usando open("$appRoot/pathToMyApp/myApp.jmpapp");
- Para distribuir su aplicación, distribuya el complemento que contiene su aplicación junto con sus archivos necesarios
Re: ¿Hacer un complemento desde la aplicación? ¿Obtener la ruta de la aplicación?Además, este documento de predicción mostraría cómo otros han logrado esto: Mejores prácticas en JMP ® Gestión de complementos
Re: ¿Hacer un complemento desde la aplicación? ¿Obtener la ruta de la aplicación?Tuve un problema similar cuando traté de dividir un marco JSL en varios módulos que se incluirían entre sí. Lo resolví agregando el siguiente código al módulo principal:
// Find the current location in the source tree for the given file
__getThisPath = Function( {this_f},
{Default Local},
this_p = "";
ifl = Include File List();
For( ifli = 1, ifli <= N Items( ifl ), ifli++,
a_path = ifl[ifli];
idx = Contains( a_path, this_f );
If( idx > 0,
this_p = Left( a_path, idx - 1 );
Break();
);
);
If( this_p == "",
Throw( "Unable to find path for " || this_f )
);
Return( this_p );
);
Una vez que determiné la ubicación de mi script en el sistema de archivos, pude usarlo para encontrar e incluir sus dependencias:
// Use the current location in the source tree for this file
// in order to load its dependencies.
__INCLUDE = __getThisPath( "timeit.jsl" );
Set Path Variable( "TI_HOME", __INCLUDE );
Include( "$TI_HOME/../JSLhelpers/mfr.jsl" );