Problemas para crear enlaces específicos de usuario dentro de una tabla jmpProblema: tengo un archivo jmp que se encuentra en una carpeta compartida de OneDrive. Otros colegas sincronizan esta carpeta de OneDrive con su escritorio para que todos tengamos fácil acceso al archivo jmp compartido. Dentro del archivo jmp hay enlaces a otros archivos que se encuentran en la misma carpeta compartida que el archivo jmp. Debido a que cada persona tiene una ruta de archivo de OneDrive específica del usuario, mis enlaces son en realidad fórmulas que detectan la ruta del archivo específico del usuario para luego establecer el enlace apropiado específico del usuario. Desafortunadamente, estas fórmulas no se vuelven a ejecutar automáticamente cuando alguien nuevo abre el archivo jmp. He explorado dos opciones para resolver esto y no soy partidario de ninguna de ellas:
1. tener un script para 'volver a ejecutar fórmulas' que debes ejecutar antes de usar un enlace: desafortunadamente, la gente se olvida de este script. Además, la gente suele crear subconjuntos de datos y luego intentar ejecutar el script 'volver a ejecutar fórmulas', pero no funciona porque las evaluaciones de fórmulas se suprimen de forma predeterminada.
2. guarde un script de 'volver a ejecutar fórmulas' como 'OnOpen' para que se ejecute tan pronto como alguien abra la tabla jmp: desafortunadamente, esto da como resultado que aparezca un mensaje (adjunto) y la gente tiene demasiado miedo para decir 'sí' cuando se abre porque tienen miedo de que arruine algo (ni siquiera saben para qué sirve)
Preguntas
1. ¿Existe alguna manera de realizar una actualización del hipervínculo tan pronto como se hace clic en él?
2. ¿Puedo suprimir la ventana emergente 'OnOpen' o editarla para explicar lo que debe hacer el usuario?
3. ¿Existe otra forma además de un script 'OnOpen' que permita que las fórmulas se actualicen tan pronto como se abre una tabla jmp?
Se agradece cualquier ayuda. ¡Gracias!
Mate
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmpHola @Matt_Converse . Buena pregunta. Estoy pensando que su mejor opción sería generalizar las rutas en el archivo compartido de modo que se creen en tiempo de ejecución. Sin conocer los detalles de este archivo, sería imposible dar detalles específicos, pero es muy posible que implique el manejo de expresiones. En cuanto a tus otras tres opciones:
- Los hipervínculos suelen estar codificados. Tendría que saber más sobre cómo y dónde los estás usando.
- Sí. El problema es que necesitarías modificar las preferencias de usuario de los usuarios antes de ejecutar OnOpen.
- No que yo supiese
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmpEy @DonMcCormack !
Gracias por la pronta respuesta. Estoy feliz de agregar más detalles. Aquí hay un ejemplo de cómo varían los enlaces (es decir, rutas a archivos/carpetas):
- mi ruta de archivo a una carpeta de imágenes SEM: C:\Users\ mconvers \OneDrive - WL Gore & Associates, Inc\Ejemplo de base de datos compartida\Biblioteca SEM\4391
- La ruta del archivo de mis colegas está en la misma carpeta: C:\Users\ mjohnson \OneDrive - WL Gore & Associates, Inc\Ejemplo de base de datos compartida\Biblioteca SEM\4391
En la tabla de ejemplo ("Table1.jmp", adjunta), verá cómo uso una fórmula en la columna "Ruta de la carpeta SEM" para determinar una ruta de carpeta específica del usuario. Básicamente, lee la ruta del archivo de la tabla principal ("Table1.jmp") para obtener el directorio específico del usuario y luego agrega "Biblioteca SEM..."
dt_name = "Tabla1";
dt = Tabla de datos( dt_name );
path_full = dt << Obtener ruta();
nombre_archivo = dt_nombre || ".jmp";
n = Munger( ruta_completa, 1, nombre_archivo );
carpeta_ruta = Substr( ruta_completa, 1, n - 1 );
ruta = ruta_carpeta || "Biblioteca SEM" || "\" || Char(:Número de base de datos);
Luego utilizo un controlador de eventos para configurar el hipervínculo (columna "Enlace de carpeta SEM"). Adjunté una carpeta completamente comprimida en caso de que también le ayude a tener una idea de la estructura general del archivo.
Me encantaría saber más sobre cómo podría " generalizar las rutas en el archivo compartido de manera que se construyan en tiempo de ejecución". ¡Gracias!
Mate
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmpPuede utilizar la variable de sistema de Windows %OneDrive% para obtener la ruta del usuario a la carpeta de la unidad base;
utilice Obtener variable de entorno ("ONEDRIVE"); para llamarlo y usarlo en la URL.
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmp¿Qué tal algo como el adjunto? Acorté la ruta de la carpeta para que contenga la parte común a todos los usuarios y cambié el controlador de eventos para construir la parte restante (es decir, la parte única) de la ruta.
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmpTambién puede utilizar Obtener variable de entorno ("ONEDRIVE"); en el controlador de eventos... ya que no quieres que se ejecute para cada fila, sólo cuando sea necesario 
Además, probablemente no funcione para máquinas Mac y Linux a menos que la variable del sistema OneDrive esté configurada...
Si el archivo JMP va a estar solo en un lugar de la red (por ejemplo, en la carpeta "Ejemplo de base de datos compartida"), también puede usar una URL formateada como ruta relativa.
es decir, ruta = "..\Biblioteca SEM\" || Char(:Número de base de datos);
Esto debería funcionar incluso en Mac... pero el archivo jmp tiene que estar en la carpeta directamente desde "Biblioteca SEM"
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmpdoh... la ruta relativa sería un solo punto para la carpeta actual...
camino = ".\Biblioteca SEM\" || Char(:Número de base de datos);
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmp@DonMcCormack ¡Eso funcionó muy bien! (Sólo tuve que cambiar una barra diagonal por una barra invertida)
Creo que su script editado aborda la primera parte de mi problema, es decir, los enlaces se crean en tiempo de ejecución. Sin embargo, el segundo desafío que comúnmente enfrentan mis usuarios es que crean subconjuntos de esta tabla y luego esperan seguir enlaces. Lamentablemente, los subconjuntos no se guardan y, por lo tanto, no tienen una ruta de archivo para leer. ¿Alguna sugerencia aquí?
Podría usar @DByss sugerencia de obtener el entorno específico de onedrive del usuario, pero hay una estructura de ruta de archivo entre eso y "Tabla1" que he visto que algunos usuarios cambian (por lo que incluso eso puede no ser consistente de un usuario a otro).
¡Gracias por toda la ayuda!
Mate
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmpHe aquí una idea. Guarde las columnas necesarias para acceder a las listas de directorios. Agregue una columna de ID (numerada secuencialmente del 1 al N filas) como primera columna. Reemplace el script del controlador de eventos con esto
Function( {thisTable, thisColumn, iRow},{rowID},
If(!Namespace Exists("myCustomFunctionNamespace"),
New Namespace("myCustomFunctionNamespace");
myCustomFunctionNamespace:thisPath = Substr(thisTable << Get Path,1,Contains(thisTable << Get Path,"/",-1));
myCustomFunctionNamespace:semFolderPath = Column(thisTable,"SEM Folder Path << Get Values");
);
rowID = Column(thisTable,1);
Open(Char(myCustomFunctionNamespace:thisPath || "/" || myCustomFunctionNamespace:semFolderPath[ rowID] ));
);
Los valores de las columnas se cargan en listas y todas las operaciones se basan en estos valores en lugar de algo que deba buscarse en una tabla (excepto el valor de ID, que hace referencia al número de fila de la tabla original).
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmpGracias, @DonMcCormack ! Agregué una columna de ID y reemplacé el controlador de eventos; sin embargo, aparece este error al hacer clic en el enlace de la fila 1: "Problema de subíndice en la fila 1 en el acceso o evaluación de 'myCustomFunctionNamespace:semFolderPath[ /*###*/rowID]'". ¿Entiendes a qué se refiere "/*###*/"? Sé que estamos cerca porque puedo hacer que el script se ejecute fuera de una función (consulte mi script guardado). Tenga en cuenta que solo estoy probando el enlace antes de crear un subconjunto (todavía no lo he probado con un subconjunto).
Realmente aprecio tu ayuda.
Mate
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmpLo lamento @Matt_Converse . La penúltima línea de código debe ser
rowID = Column(thisTable,1)[iRow]
Quiere hacer referencia al valor de la primera columna de la fila seleccionada (del subconjunto). Tal como lo tenía, hacía referencia a toda la columna.
Re: Problemas al crear enlaces específicos de usuario dentro de una tabla jmp@DonMcCormack ¡Debería haberlo captado! ¡Gracias! ¡Esto también funciona para subconjuntos ahora! ¡Tendré que empezar a utilizar controladores de eventos con más frecuencia! Realmente aprecio la ayuda.