¿Comprobar si la tabla es de solo lectura?Ey,
Tengo un script jsl grande en el que en una etapa abre un par de tablas de datos, pone datos en ellas, las guarda y las cierra.
Ahora, normalmente funciona bien sin ningún problema. Pero las tablas de datos que abre están en el servidor de la empresa y, en ocasiones, alguien más tiene el archivo abierto, lo que significa que el script abre una versión de solo lectura y no puede guardarlo.
¿Hay alguna forma en que pueda agregar al script una forma de verificar si el archivo está abierto en modo de solo lectura, para poder cancelar el script y advertir al usuario? Algo similar a Excel, donde si abre un archivo en uso por otra persona, recibe un mensaje "Archivo en uso por X, ¿quiere abrir una versión de solo lectura?".
Gracias,
edvinRe: ¿Verificar si la tabla es de solo lectura?Finalmente encontré una solución que funciona, así que la publico en caso de que alguien más encuentre este hilo en el futuro.
dt = Data Table("Untitled");
Try(test = LogCapture(dt << save));
If(Contains(test, "problem"),
New Window("Error",
<<MODAL></MODAL>Si la tabla es de solo lectura y no se puede bloquear, la prueba se convertirá en
test = "
I/O problem.
File not open in Write mode.
";
por lo tanto, por qué contiene (prueba, "problema") funciona.
Re: ¿Verificar si la tabla es de solo lectura?Sí, también tengo la sensación de que es algo simple que nos falta, gracias de todos modos. ¿Alguien más tiene una idea?
Re: ¿Verificar si la tabla es de solo lectura?Lo siento, me he quedado sin ideas. Tal vez otro colaborador pueda pensar en una manera. (Probablemente es algo simple que no se me ha ocurrido).
Re: ¿Verificar si la tabla es de solo lectura?Ey,
Probé esta solución e intenté construir la función Try de un par de maneras diferentes, pero parece que nunca llega a la segunda expresión, aunque la primera genera un error. La tabla sigue cerrada, pero no guardada. Así es como se ve el archivo de registro:
Names Default to Here(1);
dt = Data Table("CharData G4 v3.0");
dt << add rows(1);
Try(
Close( dt, Save ),
Print( "Data table locked" );
);
I/O problem.
File not open in Write mode. Re: ¿Verificar si la tabla es de solo lectura?OK, tal vez use la función Try (expr1, expr2). El primer argumento es una expresión que siempre se evalúa. Use su operación de guardar para el primer argumento. El segundo argumento es una expresión que solo se evalúa si el primer argumento genera un error. De esta manera puedes atrapar el error.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// changes made to data table, save table
Try(
Close( dt, Save ),
Print( "Data table locked" );
);
// rest of script
Re: ¿Verificar si la tabla es de solo lectura?Oye, muchas gracias por las respuestas. Desafortunadamente, ninguna de las soluciones me funciona, << Get Lock devuelve '0' y << Get Edit Lock devuelve 'Empty()'.
Ahora tengo una mesa abierta en una computadora diferente y por mi cuenta. Puedo editarlo tanto como quiera en mi propia computadora, nada está bloqueado. Pero cuando trato de guardarlo, no puedo y aparece el mismo mensaje de error que antes, "Problema de E/S. El archivo no se abre en modo de escritura".Re: ¿Verificar si la tabla es de solo lectura?Olvida mi sugerencia anterior. Los bloqueos de edición son independientes del mecanismo de bloqueo anterior. Un enfoque simple es abrir la tabla de datos y enviar el mensaje << Obtener bloqueo a cualquier columna. Si la tabla de datos está bloqueada, también lo estarán todas las columnas. El resultado debe ser verdadero (1).
Re: ¿Verificar si la tabla es de solo lectura?Consulte Ayuda > Índice de secuencias de comandos. Busque "bloqueo" y busque los mensajes Obtener bloqueo de edición y Establecer bloqueo de edición. El primero obtendrá la información de estado que desea. El segundo describirá las opciones que podrían devolverse.
Re: ¿Verificar si la tabla es de solo lectura?Solo quería aclarar un poco más, el usuario recibe un mensaje de error que dice "Problema de E/S. El archivo no se abre en el modo de escritura".
Solo aparece cuando el script intenta guardar la tabla, por lo que puede guardar las tablas 1 y 2, pero no puede guardar la tabla 3, lo que interfiere con mi manejo de datos.
Quiero agregar algo que verifique el modo de escritura antes de intentar guardar cualquiera de las tablas. Estoy usando JMP 13.