Control de excepciones en complementos

La forma en que Dataverse gestiona las excepciones del plugin depende del tipo de registro del paso del plugin.

  • Las excepciones para los pasos de complemento síncronos cancelarán y revertirán la operación. Puede 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, puede rechazar la solicitud de mensaje. Si la operación no sigue las reglas impuestas por tu complemento, genere una excepción InvalidPluginExecutionException e incluya los motivos en el mensaje.

Lo ideal es cancelar las operaciones mediante complementos sincrónicos registrados en la fase PreValidation. Esta fase suele producirse fuera de la transacción principal de la base de datos. Cancela la operación antes de que alcance la transacción para evitar tener que revertirla. Revertir la operación requiere recursos significativos y afecta al rendimiento del sistema. Las operaciones de las fases PreOperation y PostOperation siempre se producen dentro de la transacción de base de datos.

A veces, las fases PreValidation se ejecutan dentro de una transacción si otra operación las inicia. 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 crea el registro de la tabla de cuentas. Compruebe el valor de la propiedad IExecutionContext.IsInTransaction para ver si una operación está dentro de una transacción.

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 produce algún otro tipo de excepción, el usuario ve un cuadro de diálogo de error con un mensaje genérico. El mensaje de excepción y el seguimiento de pila se escriben en la tabla PluginTraceLog.

Nota:

En interfaz unificada, el cuadro de diálogo de error no admite el contenido codificado en HTML en el mensaje. Use solo texto.

Errores inesperados

Si se produce una excepción en el código del complemento para un paso sincrónico, la operación de canalización que se procesa en la transacción de base de datos se cancela y se revierte, independientemente de si inicia o InvalidPluginExecutionException no. InvalidPluginExecutionException es la única excepción que proporciona la capacidad de controlar qué mensaje de excepción se muestra al usuario. Este comportamiento se aplica a las aplicaciones controladas por modelos que usan las soluciones de Dynamics 365.

Para ver qué tipo de datos relacionados con errores puede devolver el complemento a la plataforma, consulte los constructores InvalidPluginExecutionException disponibles.

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.