No se pueden ejecutar complementos dentro del proyectoHemos organizado muchos scripts en un complemento para nuestra empresa.El complemento responde, pero los scripts no se ejecutarán cuando se invoquen dentro de 'Proyecto'.¿Es esto algo que se puede remediar a través de secuencias de comandos adicionales o la secuencia de comandos en sí tiene que estar contenida por separado dentro del proyecto?
secuencias de comandosRe: No se pueden ejecutar complementos dentro del proyectoCada proyecto en JMP tiene su propia lista global y de espacio de nombres. Esto también es cierto para la parte de JMP que no es un proyecto. Entonces, si crea un global:a fuera de un proyecto, no será visible en ningún proyecto. Y si crea un global:b dentro de Project01, no será visible fuera de ese proyecto ni en ningún otro proyecto. Además, si crea un espacio de nombres "A" fuera de un proyecto, no será visible (por su nombre, como en A:símbolo) dentro de ningún proyecto. Y similar para crear un espacio de nombres en un proyecto. Esto se hace para mantener los proyectos aislados entre sí y de los que no son proyectos. Y permite ejecutar varias copias del mismo script en varios proyectos sin que colisionen entre sí, incluso si usan globales.
Si necesita comunicarse entre proyectos o entre proyectos y no proyectos, la mejor manera es en el espacio de nombres raíz (::: o sintaxis As Root). Los símbolos en este espacio de nombres son únicos en la instancia de JMP en ejecución.
Entonces, como sugirió Craig, podría asignar un espacio de nombres a un símbolo en el espacio de nombres raíz. Luego use ese espacio de nombres por símbolo, como As Root(myNsSym):x, en lugar de por nombre.
Si solo necesita respuestas a los elementos y botones del menú, entonces la sugerencia anterior para retrasar la inicialización del complemento hasta que cada uno de estos sea una buena opción. Luego, el complemento se inicializará en cada proyecto cuando se use por primera vez. Y puede usar un global para verificar la inicialización previa. He hecho esto para varios complementos en el pasado. Sin embargo, significa que sus secuencias de comandos de inicio y salida deben ser bastante básicas porque no está haciendo mucho cuando JMP se inicia o finaliza. Esto tampoco funciona si necesita algo más que respuestas a los menús o si necesita comunicarse entre proyectos. En estos casos, el espacio de nombres raíz probablemente sea el mejor.
Finalmente, puede usar el script Project OnOpen o el script de inicio de Workspace para inicializar las cosas también. Ver https://www.jmp.com/support/help/en/16.0/index.shtml#page/jmp/write-a-project-on-open-script-2.shtml y https://www.jmp.com/support/help/en/16.0/index.shtml#page/jmp/run-startup-scripts-to-control-workspaces.shtml#ww632187 para obtener más información sobre esos. Si ya no hace mucho en sus secuencias de comandos de inicio/salida para su complemento, incluso puede intentar Try(Get Addin("...")<<
Re: No se pueden ejecutar complementos dentro del proyectoNo estoy seguro; @aaron_andersen sabrá la respuesta correcta. Mi prueba rápida sugiere que necesitará un global variable sosteniendo un espacio de nombres; las diversas funciones de espacio de nombres (y funciones de clase) parecen ciegas a los espacios de nombres fuera del proyecto. Lo que hice que parece que funcionará: desde fuera del proyecto, asigne un archivo global. Usé ::: pero creo que eso solo es especial en un proyecto.
:::myNameSpace = namespace("myNameSpace"); // "globalize" a namespaceDesde dentro del proyecto, :::myNameSpace parece funcionar.
No estoy seguro de cuándo se ejecuta el script OnOpen del proyecto y en qué contexto se ejecuta, pero podría ser parte de la solución. Posiblemente podría ejecutar el complemento para volver a crear las funciones dentro del alcance del proyecto. (Jugué con él antes y parecía que podría ser útil para organizar las ventanas cuando se abría el proyecto. No necesitaba eso.)
Entiendo el motivo de mantener las funciones JSL aisladas en un espacio de nombres sin crear una variable global. Espero que haya una manera de mantener eso funcionando. (Por supuesto, los nombres de los espacios de nombres son otro espacio global... y supongo que eso es lo que el proyecto puede estar combatiendo).
Re: No se pueden ejecutar complementos dentro del proyectoHola Craig,
Escribí los complementos que Lynn está usando en su pregunta.Creé un espacio de nombres para cada complemento para evitar colisiones de variables.¿Estos espacios de nombres solo existen dentro del alcance global que no es del proyecto?¿Hay alguna manera de que pueda crear espacios de nombres dentro del alcance global ":::"?
Muchas gracias,
John
Re: No se pueden ejecutar complementos dentro del proyectoLa idea de Craige es lo primero que miraría también. (Si eso no funciona, necesitaría ver el complemento, o al menos saber más sobre lo que hace, para hacer sugerencias adicionales).
Automóvil club británico
Re: No se pueden ejecutar complementos dentro del proyectoEncontré esto:
https://www.jmp.com/support/help/en/16.0/?os=win&source=application&utm_source=helpmenu&utm_medium=application#page/jmp/ejecutar-scripts-en-un-proyecto.shtml
"JMP puede tener varios proyecto s abiertos al mismo tiempo, así como elementos que no se abren en ningún proyecto.Cada proyecto tiene su propio global alcance, que evita conflictos causados por variables con nombres idénticos en diferentes proyecto s. En el raro caso de que desee compartir variables específicas entre todos los proyecto S, usa el ::: operador raíz".
Creo que si su complemento carga secuencias de comandos que desea usar de un proyecto, el ::: puede ser lo que necesita. no lo he probado
@aaron_andersen
Re: No se pueden ejecutar complementos dentro del proyectoSupongo que su complemento se basa en variables globales que se definen cuando se carga el complemento y se hace referencia a ellas más adelante cuando se invoca la funcionalidad del complemento.En los proyectos, el contexto global es diferente al de otros proyectos y al resto de JMP, y no se puede acceder a nada definido por el complemento desde dentro del proyecto.Para combatir esto, puede configurar todas las opciones del menú para abrir archivos o ejecutar secuencias de comandos que incluyan una verificación si el complemento ya está cargado (por ejemplo, verificar si existen globales apropiados) y si no está cargado, para volver a cargar el complemento. De esa forma, el espacio de nombres y las variables del complemento se cargan la primera vez que el usuario invoca el complemento dentro de un proyecto.
Si no confía en variables globales en su complemento, ¿puede brindar más detalles sobre qué funcionalidad no funciona?
Re: No se pueden ejecutar complementos dentro del proyectoEspacios de nombres y proyectos: lamentablemente más complicados de lo que se analiza aquí...
Pensé que sería una buena idea crear las funciones de la biblioteca de funciones de recuperación como funciones personalizadas y cargarlas a través de un complemento cuando se inicia JMP. De esta manera, la funcionalidad está bien documentada a través del índice de secuencias de comandos y ningún usuario tiene que molestarse en incluir la biblioteca en su complemento o proyecto: ya está allí.
Luego me di cuenta de que el espacio de nombres original solo se creó en el espacio de nombres global de JMP y que tenía que globalizar el espacio de nombres a través de
:::myNameSpace = namespace("myNameSpace"); // "globalize" a namespacepara hacerlo accesible desde los proyectos.
Lamentablemente, me encontré con problemas adicionales que documenté aquí:
Espacios de nombres y proyectos
Re: No se pueden ejecutar complementos dentro del proyectoUn truco genial, gracias @Jasean :
Localizar el espacio de nombres raíz para usarlo en Proyectos
myVar = :::myNs
myVar:x // success
¿Por qué mi problema no se discutió en 2021?
¿Alguien tiene una licencia que funcione con JMP16 y versiones anteriores y pueda verificar si HUBO algún problema en 2021?
¿O usaste el truco de @Jasean "por defecto"?