ExceptionHandler (orquestación)
La solución Administración de procesos empresariales usa dos tipos de excepciones: excepciones del sistema y excepciones de aplicación. Las excepciones del sistema incluyen elementos como errores de recursos: por ejemplo, un error en la conexión de red. Es probable que dichos problemas se puedan resolver por sí mismos tras un período y que la solución vuelva a intentar repetir todas las operaciones que provocan excepciones del sistema. Las excepciones de aplicación surgen por problemas con menos probabilidades de resolverse por sí mismos, como los errores lógicos o algunos tipos de incoherencia. La solución usa la orquestación ExceptionHandlerOrch para procesar errores del sistema y de la aplicación.
Las fases de procesamiento de pedidos (CableOrder1, CableOrder2) y sus orquestaciones satélite (Activate, Analyze, Cancel, Change, Complete, Validate) usan ExceptionHandlerOrch.
Nota
Es posible que quiera leer esta sección con la orquestación ExceptionHandlerOrch abierta en Microsoft Visual Studio.
Errores de aplicación
El controlador de excepciones registra primero el error llamando al método PostError del objeto ErrorHandler en el ensamblado Utilities . A continuación, comprueba si se trata de un error del sistema o de un error de aplicación. La siguiente captura de pantalla muestra la rama de la orquestación que procesa las excepciones de aplicación:
Para un error de aplicación, la orquestación construye una cadena que describe el error y llama a la orquestación ErrorHandlerOrch . Esta orquestación envía el error a operaciones en las que un operador decide si corregir el error o finalizar la operación. Si el operador corrige el error, la orquestación ErrorHandlerOrch devuelve el mensaje reparado y se vuelve a intentar repetir la operación. El controlador de excepciones lo hace llamando al método Invoke del objeto Recaller en el ensamblado Utilities . El objeto Recaller usa la reflexión para llamar al código que provocó el error.
Si la llamada a Invoke se realiza correctamente, se cierra el controlador de excepciones. De lo contrario, vuelve a recorrer en bucle e intenta volver a llamar a Invoke . Para obtener más información sobre el objeto Recaller , vea El objeto Recaller.
Errores de sistema
En el diagrama siguiente se muestra la rama de error del sistema de la orquestación ExceptionHandler :
Para un error del sistema, el controlador de excepciones llama primero a la orquestación CheckInterrupt y, a continuación, espera un minuto. Este tiempo de espera permite que desaparezcan los errores a corto plazo temporales, como los problemas de conexión de red, antes de que se vuelva a intentar la operación. Cuando se realizan llamadas remotas, siempre existe la probabilidad de que se produzca un problema de red.
Nota
Como regla general, en un diseño que se puede interrumpir, lo ideal es comprobar si hay interrupciones durante uno de los períodos de espera o justo después de uno de ellos para ver si se ha producido una interrupción.
Después de la espera, el controlador usa el método Invoke del objeto Recaller para ejecutar el código original. Si la llamada se realiza correctamente, el controlador se cierra. En caso contrario, el controlador intentará ejecutar el código original un par de veces más. Si se producen errores en los tres intentos, el controlador crea una cadena de error y llama a la orquestación ErrorHandlerOrch .
Si al procesar una excepción del sistema se genera una excepción, un bloque de excepción la captura:
El controlador de la excepción comprueba el tipo de excepción y reduce el contador de reintentos si se trata de una excepción del sistema o establece un indicador para especificar una excepción de aplicación.
Orquestación ErrorHandlerOrch
En el diagrama siguiente se muestra la primera parte de la orquestación ErrorHandlerOrch :
La orquestación ErrorHandlerOrch prueba primero el parámetro IsBadOrder para ver si el error es un orden incorrecto (IsBadOrder es true) o algún otro error. Si el error es de pedido incorrecto, asigna el destino del mensaje desde el remite del pedido original y vuelve a enviar el mensaje al sistema de atención al cliente. Si no se refiere a un pedido incorrecto, la orquestación crea un mensaje de error de pedido y lo envía al sistema de operaciones.
Después de cualquier error, la orquestación escucha si se genera un mensaje de respuesta o de interrupción:
Si la orquestación recibe una respuesta, vuelve al autor de la llamada. Si la orquestación recibe un mensaje de interrupción, pasa el mensaje a un puerto de interrupción y produce una excepción InterruptException personalizada.
Para obtener más información sobre cómo la solución usa y controla las interrupciones, consulte Control de interrupciones en la solución de administración de procesos empresariales.
Consulte también
Control de excepciones en la solución de administración de procesos empresariales
Excepciones personalizadas
Control de interrupciones en la solución de administración de procesos empresariales
Recaller (objeto)