Compartir a través de


Control de excepciones en complementos

La forma en que se gestionan las excepciones en los complementos depende del tipo de registro de pasos del complemento.

  • Las excepciones para los pasos de complemento síncronos cancelarán y revertirán la operación. Tiene la capacidad de controlar el mensaje devuelto al usuario.
  • Las excepciones de los pasos del complemento asincrónico se registran y agregan a la Tabla de trabajo del sistema, también conocida como Tabla de operación asíncrona.

Cancelación de la operación actual

Dentro de un complemento sincrónico, una de las opciones que tiene es rechazar la solicitud. Si la operación no sigue las reglas que aplica el complemento, puede lanzar una InvalidPluginExecutionException excepción y proporcionar en el mensaje los motivos por los que se rechazó la operación.

Idealmente, debe cancelar solo operaciones que utilicen complementos síncronos registrados en la fase de PreValidation. Esta fase suele producirse fuera de la transacción principal de la base de datos. La cancelación de una operación antes de llegar a la transacción es muy deseable porque la operación cancelada debe revertirse. Revertir la operación requiere recursos significativos y tiene un impacto en el rendimiento en el sistema. Las operaciones de las fases PreOperation y PostOperation siempre están dentro de la transacción de base de datos.

A veces, las etapas PreValidation se encuentran dentro de una transacción cuando son iniciadas por la lógica en otra operación. Por ejemplo, si crea un registro de tarea en la fase PostOperation de la creación de una cuenta, la creación de la tarea pasa a través de la canalización de ejecución de eventos y se produce dentro de la fase PreValidation , pero forma parte de la transacción que está creando el registro de la tabla de cuentas. Puede indicar si una operación está dentro de una transacción por el valor de la propiedad IExecutionContextIsInTransaction.

Cómo las aplicaciones controladas por modelos controlan excepciones de complemento sincrónicas

Cuando lanzas una InvalidPluginExecutionException excepción dentro de un plug-in síncrono, se muestra un cuadro de diálogo de error con tu mensaje al usuario. Si no proporciona un mensaje, se muestra un cuadro de diálogo de error genérico al usuario. Si se produce cualquier otro tipo de excepción, el usuario ve un cuadro de diálogo de error con un mensaje genérico y el mensaje de excepción y el seguimiento de la pila se escriben en la tabla PluginTraceLog.

Nota:

En interfaz unificada, el cuadro de diálogo de error no admite contenido codificado html en el mensaje. Sólo texto por favor.

Errores inesperados

Sin embargo, cuando se produce cualquier excepción en el código del complemento para un paso síncrono, la operación del pipeline que se está procesando en la transacción de la base de datos se cancela y retrocede tanto si lanza una InvalidPluginExecutionException como si no. InvalidPluginExecutionException es la única excepción que proporciona la capacidad de controlar qué mensaje de excepción se muestra al usuario. Esto es cierto si las soluciones de Dynamics 365 usan aplicaciones basadas en modelos.

Eche un vistazo a los InvalidPluginExecutionException constructores disponibles para ver qué tipo de datos relacionados con errores su complemento puede transmitir a la plataforma.

Sugerencia

Se recomienda detectar cualquier error y producir una InvalidPluginExecutionException excepción para que pueda controlar lo que se muestra al usuario. Este error puede ser simplemente "An unexpected error occurred", pero también puede agregar información que ayudará al administrador a solucionar el problema. De este modo, tiene algún control. Si permite que otros tipos de excepciones se propaguen, el error se mostrará como un IsvUnExpected error con el mensaje An unexpected error occurred from ISV code., que no es muy útil.

Cómo se gestionan las excepciones de complementos asincrónicos

El mensaje de excepción para complementos registrados asincrónicos se escribe en una tabla de trabajos del sistema , también conocida como tabla AsyncOperation, que se puede ver en el área Trabajos del sistema de la aplicación web. No se muestra ningún cuadro de diálogo al usuario. Los complementos asincrónicos no participan en la transacción de base de datos que los colocó en la cola, por consiguiente no pueden cancelar la transacción.

Reintentar un complemento asincrónico

Con un paso de complemento asincrónico, puede volver a intentarlo cuando falla un complemento. La causa del error puede deberse a un error de red o a algún otro error reintenible que llama a un recurso externo.

Para intentar de nuevo el complemento, use el constructor InvalidPluginExecutionException(OperationStatus, Int32, String) con el valor del miembro OperationStatus EnumRetry.

Cuando el complemento produce este tipo de excepción, el servicio asincrónico intenta ejecutar el complemento cuatro veces. Si la ejecución del complemento no se realiza correctamente en cuatro intentos, se produce un error en la llamada.