<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo uno raro hoy.....
He estado trabajando con varios scripts JSL... cada uno de ellos tiene varias llamadas a Open Database()... y si Open Database falla por algún motivo... Siempre he visto entradas en el archivo de registro sobre el problema...Luego tomé prestado el código de log_execute_sql.jsl que encontré en alguna parte... y básicamente leí las últimas 10 líneas del campo de registro y mostré cuadros de diálogo para los usuarios si ocurría un error...
Cada uno de estos scripts tiene una interfaz de usuario asociada....
hoy comencé a trabajar con un nuevo script, y parece que no escribe los errores de Open Database() en el registro, sino que muestra cuadros de diálogo JMP ALERT... lo cual es algo agradable, pero no lo suficientemente amigable... y me gustaría utilizar mi función para comprobar si hay errores....
¿Existe algún método para controlar si estos van al registro o no? La única diferencia que puedo ver en este nuevo script que heredé es que no realiza ninguna llamada a la base de datos hasta DESPUÉS de que aparezca la interfaz de usuario... Si hago una llamada a Open Database() ANTES de que se represente y defina/llene la nueva ventana... el error está en el registro... ¡¡Interesante!! ¿Cómo puedo hacer para que los escriba TODOS en el registro?
Veo esto tanto en JMP9 como en JMP12...
Es un poco extraño, porque no veo estas cosas en otros scripts de complementos con los que hemos estado trabajando últimamente...
Con respecto a este guión específico… No puedo encontrar nada diferente acerca de las llamadas a la base de datos (Open Database()), pero si la interfaz de usuario aún no se ha presentado, el error va al archivo de registro...
Si se presenta la interfaz de usuario y el usuario interactúa con ella... de repente, estos errores no van al registro, sino que se muestran de forma interactiva.
Lo que, por supuesto, da como resultado más errores, porque no pudimos detectar el error del registro como lo hicimos con todos nuestros otros scripts...
Mientras probaba, agregué una llamada a la base de datos antes de que apareciera la interfaz de usuario (a través de una nueva ventana())
Y claro, el error va al registro y puedo detectarlo….
// Pruebe la conexión de la base de datos e informe si hay un error....
// Curiosamente, este script no escribe TODOS los errores de la base de datos en el archivo de registro, así que al menos asegurémonos de que podemos conectarnos correctamente.
dbTestQuery = "seleccione SYSDATE de dual";
si (Versión <11,
dtTest = Abrir base de datos(
"DSN="||DSN_NAME||"",
consultadepruebabd
);
, /// De lo contrario, podemos usar la directiva Invisible aquí
dtTest = Abrir base de datos(
"DSN="||DSN_NAME||"",
consulta de prueba db,
Invisible // Esta tabla de datos no será visible, pero se mostrará en la lista de ventanas
);
);
_DBError=checkLogForODBCErrors("dbConnectTest");
imprimir("pruebadb DBError=" || char( DBError)) ;
// cerrar la fuente de datos ya que ya hemos recuperado los datos de la tabla
close(dtTest, "nosave");
print("Conexión de base de datos cerrada: dbTest");
Luego puedo presentarle al usuario un mensaje de error más significativo Y usarlo después de la llamada a la base de datos para verificar si tuvimos un error o no...
/*
Verifique el archivo de registro JMP en busca de errores después de las llamadas a la base de datos
*/
checkLogForODBCErrors = Función(,
// OK, estamos listos para partir ahora.
// borrar registro();
// Verifique la ventana de registro para ver si hay errores de ODBC
registro contenido = obtener registro (-10); // Obtiene las últimas 20 líneas del Registro
encontró error = 0;
// Busque errores del [Administrador de controladores ODBC]
// o
// Busca errores [VerticaDSII]
// o
// Busca "autenticación LDAP"
para (i = 1, i <= nitems(_log_contents), i++,
si (contiene(_log_contents , "[Microsoft][Administrador de controladores ODBC]"), // Buscando estos errores
encontró error = 1;
extraErrorMessageText="Compruebe la configuración de su fuente de datos ODBC y asegúrese de haber nombrado su DSN=" || DSN_NOMBRE || "." ||
"También verifique que su nombre de usuario y contraseña sean correctos y que la conexión se pruebe con éxito";
romper();
, // demás
si (contiene(_log_contents , "[Vertica][VerticaDSII]"), // Buscando estos errores
encontró error = 1;
extraErrorMessageText="Parece haber un problema al conectarse a la base de datos usando el nombre de la fuente de datos=" || DSN_NOMBRE || ".";
romper();
, // DEMÁS
si (contiene(_log_contents , "autenticación LDAP"), // Buscando estos errores
encontró error = 1;
extraErrorMessageText="Compruebe la configuración de su fuente de datos ODBC para DSN: " || DSN_NOMBRE || "." ||
"Y verifique que su nombre de usuario y contraseña sean correctos.";
romper();
,
si (contiene(_log_contents , "FATAL "), // Buscando estos errores
encontró error = 1;
extraErrorMessageText="Compruebe la configuración de su fuente de datos ODBC para DSN: " || DSN_NOMBRE || "." ||
"Y verifique que su nombre de usuario y contraseña sean correctos.";
romper();
);
);
);
);
);
si (_found_error,
// entonces
// Imprime información útil en el registro
print("Complemento: " || nombredelcomplemento);
print("DSN: " || DSN_NOMBRE);
print("_Caller: " || _Caller);
_nw = nueva ventana ("MFG360: Error de base de datos", << modal,
cuadro de texto("Se produjo el siguiente error en " || _Caller || ": "),
caja de texto(""),
cuadro de texto (_log_contents ),
caja de texto(""),
cuadro de texto (texto de mensaje de error adicional),
caja de texto(""),
cuadro de texto ("Si se le solicita, envíe por correo electrónico el contenido de la ventana de registro de JMP al soporte técnico." ||
" Para ver la ventana Registro, haga clic en Ver > Registro y luego en Ventana > Registro.")
);
);
encontró error; // Devuelve 1 (Verdadero) o 0 (Falso) ....
);
Acabo de realizar una prueba en uno de nuestros otros scripts basado en lo que estoy averiguando... y veo el mismo comportamiento...
Cualquier llamada a la base de datos DESPUÉS de que la interfaz de usuario esté en funcionamiento, parece presentar alertas JMP interactivas, pero no se envía nada al archivo de registro.
Esto rompe mi manejo de errores... y tendré que agregar más pruebas de validación para verificar el DataTable devuelto, supongo...
A menos que haya una manera de forzar que estos errores vayan al registro para poder proporcionar cuadros de diálogo de error más fáciles de usar...