En muchos casos tenemos errores de excepciones tipo CLR que no aportan mucha información para saber la causa de estos, y realizar el correcto seguimiento y ajuste de nuestro código, estas excepciones o errores ocurren cuando estamos trabajando con el framework de .net que no son manejados por el framework y son pasados a Dynamics AX.
Por ejemplo tenemos estos errores:
Object ‘CLRObject’ could not be created
ClrObject static method invocation error
o
Error de invocacion al metodo estatico CLRObject
Para realizar el seguimiento a este proceso vamos a utilizar las secuencias try y catch para capturar el detalle de la excepción, para esto primero debemos ubicar la linea que esta causando el error o excepción de CLR, para esto hacemos doble clic sobre el error generalmente nos lleva al código y la linea donde se produce el error.
Una vez identificada la linea que provoca el error usamos la sentencia try y catch para capturar la excepción de tipo Exception::CLRError, luego de esto dentro de la clausula catch vamos a capturar el mensaje usando la funcion CLRInterop::getLastException() y luego usando la función toString para mostrar la información en un mensaje, a continuación un pequeño job para ver como podemos capturar mas información adicional para saber que esta pasando:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | static void pruebaCLRException(Args _args) { ; // Esta parte si ejecutamos en el AOS new InteropPermission(InteropKind::ClrInterop).assert(); try { //Esta parte causa la excepcion System.Int32::Parse("DynamicsAxLatino"); } catch(Exception::CLRError) { //Mostrar la ultima excepcion CLR info(CLRInterop::getLastException().ToString()); // Otra opcion que puedes usar es //AifUtil::getClrErrorMessage } //Restaurar los permisos CodeAccessPermission::revertAssert(); } |
No olvidemos asignar los permisos necesarios si ejecutamos este código en el servidor o en el AOS usando Code Access Permission Assert para ClrInterop.
Cualquier duda o inquietud no olvides usar los comentarios.