Artículo original: Structured error handling with NEWOBJECT errors
http://www.spacefold.com/colin/posts/2005/10-04TRY-CATCHvsNEWOBJECT.html
Autor: Colin Nicholls
Traducido por: Ana María Bisbé York
Marcus escribió un artículo muy bueno sobre el control de errores estructurado en VFP 8.0 con TRY-CATCH y versiones posteriores. Me llamó la atención una sección en particular debido a que se refiere a un problema que yo tuve recientemente.
[..] el resultado es el contrario al ejemplo anterior. El evento Error() tiene preferencia sobre el Try/Catch y controla el error dentro del objeto llamado.
¿Qué pasaría entonces si agregamos control estructurado al objeto TestClass?
DEFINE CLASS TestClass AS CUSTOM FUNCTION Execute TRY xxxxxx CATCH MESSAGEBOX("EXCEPTION 2!") ENDTRY ENDFUNC FUNCTION ERROR(nError, cMethod, nLine) MESSAGEBOX(MESSAGE()) ENDFUNC ENDDEFINE
En este caso, el nuevo Try/Catch va a controlar el error, ya que fue definido en el nivel superior.
Esto no es estricto en todos los casos. Considere el siguiente código:
PROCEDURE Execute TRY *----------------------------------------- * Esto está controlado por el comando * TRY_CATCH que lo envuelve: *----------------------------------------- Y = NEWOBJECT("invalidClass") *----------------------------------------- * Este ignora el TRY-CATCH y * desencadena el evento .Error(): *----------------------------------------- THIS.NEWOBJECT(SYS(2015), "invalidClass", "invalidLib.vcx" ) CATCH MESSAGEBOX("Capturamos satisfactoriamente el ERROR en el CATCH.",64 ) ENDTRY ENDPROC PROCEDURE ERROR(p1, p2, p3 ) MESSAGEBOX("En su lugar se desencadena el evento ERROR() del objeto!",16) ENDPROC ENDDEFINE
El control de errores estructurado funciona según lo previsto para la función NEWOBJECT(), atrapando satisfactoriamente el error "clase no encontrada". Sin embargo, la llamada al método This.NewObject() va a forzar que se dispare el evento Error del objeto, lo que requiere una configuración completamente diferente de código de control de errores para quitar este error. Esto no es un bug, es la forma en la que trabaja el objeto. Los objetos siempre trasladan a su propio evento Error() el control de errores. Es molesto ¿verdad que si?
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.