Una de las cosas que más me gustan es la posibilidad de conocer donde se producen las excepciones, así puedo reducir el tiempo de debugging.
En Visual tenía log4net, en power builder no tenía... así que me construi uno ^_`
Para utilizar el objeto log, debemos entender el objeto rutas.
El objeto rutas nos brinda la ruta de cualquier carpeta que este en el sistema y además nos brinda las rutas absolutas de cualquier sección que almacenemos en el archivo .ini (Cabe aclarar que en el archivo .ini se deberá poner una ruta del siguiente formato "NombreCarpeta", o sea sin el nombre del direcotrio raíz.
El objeto log no es más que un objeto que escribe un archivo.
El objetivo fundamental es que el usuario no llegue a ver mensajes de error tales como:
"Invalid datarownumber" o "Primary key...", sino que lea "Error en el guardado de cliente, consulte al administrador del sistema".
La idea es que cuando creemos funciones en objetos no visuales pongamos en la sección Throws exception
Una vez puesto exception, podremos por cada momento que antes escribiamos return -1 para terminar la ejecución. podemos poner las siguientes líneas
declaremos una variable exception ex
y luego en un código como este, perteneciente a una función (ejemplo)
if not isnull(idw.object.id_movcaja[idw.getrow()]) then
// Anulo la caja si es necesario
if of_anularcaja()= -1 then
rollback;
ex.setMessage("Error al anular caja: "+ls_error)
throw ex
end if
end if
Entonces en esta operación primero se hace el rollback , luego se setea el mensaje y luego se eleva la excepción.
originalmente se hubiera hecho
if not isnull(idw.object.id_movcaja[idw.getrow()]) then
// Anulo la caja si es necesario
if of_anularcaja()= -1 then
rollback;
Messagebox("Error al anular caja: "+ls_error)
return -1
end if
end if
Lo cual está mal debido a que los Mesaggebox deberían ser responsabilidad de las ventanas y no de los objetos no visuales.
Una vez implementada la función ejemplo con el código presentado, deberemos utilizarla a dicha función encerrada en un bloque try catch (porque sino no nos deja compilar onda Java)
Ejemplo
TRY
if ls_id_fcnc='AC' then
uo_ar.of_anularanticipo(ls_id_fcnc,'X', rec_pvta,ll_id_recibo)
else
uo_ar.of_anularrecibo( ls_id_fcnc, 'X', rec_pvta, ll_id_recibo)
end if
dw_list.retrieve(date(datetime(em_desdef.text)),date(datetime(em_hastaf.text)))
CATCH(Exception ex)
MessageBox("Error ",ex.GetMessage())
END TRY
El objeto log es global y puede usarse en cualquier lugar sin necesidad de instanciar el objeto.
podemos usarlo en el código de ejemplo 1 antes del throw o en el código de ejmplo 2 en la sección catch.
Por ahora tenemos dos métodos:
Ejemplo1
log.agregar_linea( "Ingreso a ventana Cta Cte") podría servir para auditoría.
Ejemplo2
log.agregar_linea( /*string nombre_clase*/, /*string mensaje_error */) Con este método podemos poner el nombre de la clase.
log.agregar_linea( this.Classname ( ), "Error Fatal")
Extendiendo esto podriamos tener un archivo de log por cada usuario y auditar acciones por un lado y excepciones por el otro.
Estos son algunas líneas generadas.
Fecha:23/10/2008 00:00:00 Usuario: sa--> Inicio de la Aplicación
Fecha:23/10/2008 00:00:00 Usuario: sa--> Fin de la Aplicación
Fecha:23/10/2008 00:00:00 Usuario: sa--> Inicio de la Aplicación
Fecha:23/10/2008 00:00:00 Usuario: sa--> Fin de la Aplicación
Fecha:23/10/2008 00:00:00 Usuario: sa--> Inicio de la Aplicación
Fecha:23/10/2008 00:00:00 Usuario: sa--> Inicio de la Aplicación
Fecha:23/10/2008 00:00:00 Usuario: sa--> Inicio de la Aplicación
Fecha:23/10/2008 00:00:00 Usuario: sa--> Clase: uo_pfu_cajausuarios Error: No se pudo recuperar la información de MOV_CAJA.
Espero que lo puedan utilizar en sus aplicaciones. Disculpen si está muy técnico, cualquier cosa se comunican conmigo y aclaramos todo.
Saludos Power Programmers (que mal lo mío ^_`)
DESCARGAR LIBRERIA
amigo como estas.. lo que yo necesito es que al momento que me sale un error en mi aplicacion, no me la cierre.. mas o menos lo que hace el ON ERROR GO TO en visual basic que cuando encuentre un error redireccionarlo a otra linea de codigo para asi no se cierre mi aplicacion y no hacer que el usuario habra nuevamente la aplicacion..
ResponderEliminarsi puedes ayudarme con eso te quedare eternamente agradecido....
SALUDOS CORDIALES
so es muy facil de hacer, si utilizas tecnicas adecuadas, no se trata de hacer algo complicado solo puedes tener un ventana base de la cual heredas y igual una datawindos base y en esos objetos capturas las excepciones y listo asi no se cerrara tu aplicacion y podras darle el adecuado tratamiento a tus errores.
Eliminareso es muy facil de hacer, si utilizas tecnicas adecuadas, no se trata de hacer algo complicado solo puedes tener un ventana base de la cual heredas y igual una datawindos base y en esos objetos capturas las excepciones y listo asi no se cerrara tu aplicacion y podras darle el adecuado tratamiento a tus errores.
ResponderEliminarbuen dia me sale este error al intentar descargar la libreria, podrias colgarla en otro server?
ResponderEliminarSession Expired
Your session has expired. You will be logged ou