Administrar las excepciones en complementos

La forma en que se administran las excepciones en los complementos depende del tipo de registro de paso de 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 que se devuelve al usuario.
  • Las excepciones para los pasos del complemento asincrónico se registrarán y agregarán a la tabla Trabajo del sistema, también conocida como Tabla AsyncOperation.

Cancelar la operación actual

En un complemento síncrono, una de las opciones que tiene es rechazar la solicitud. Si la operación no sigue las reglas impuestas por su complemento, simplemente puede lance una excepción InvalidPluginExecutionException y proporcione las razones por las que se rechazó la operación en el mensaje.

Idealmente, debe cancelar solo operaciones que utilicen complementos síncronos registrados en la fase de PreValidation. Esta fase normalmente se produce fuera de la transacción de la base de datos principal. La cancelación de una operación antes de que alcance la transacción es muy deseable porque la operación cancelada tiene que revertirse. La reversión de la operación requiere recursos significado y tiene un impacto en el rendimiento del sistema. Las operaciones en las fases PreOperation y PostOperation están siempre en la transacción de la base de datos.

Las fases PreValidation a veces estarán en una transacción cuando las inicie la lógica en otra operación. Por ejemplo, si crea un registro de entidad de tarea en la fase PostOperation de la creación de una cuenta, la creación de tarea pasará a través de la canalización de ejecuciones de eventos y se producirá en la fase PreValidation, pero será parte de la transacción que está creando el registro de la tabla de cuenta. Puede saber si una operación está en una transacción para el valor de la propiedad IExecutionContext.IsInTransaction .

Cómo administran las aplicaciones basadas en modelo las excepciones de complementos síncronos

Cuando lanza una excepción InvalidPluginExecutionException en un complemento sincrónico se mostrará al usuario un diálogo de error con el mensaje. Si no proporciona un mensaje, se mostrará un diálogo de error genérico al usuario. Si se produce cualquier otro tipo de excepción, el usuario verá 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 escribirán en la Tabla PluginTraceLog.

Nota

En la interfaz unificada, el cuadro de diálogo de error no admite contenido código HTML en el mensaje. Solo texto.

Errores inesperados

Sin embargo, cuando se produce alguna excepción en el código del complemento para un paso síncrono, la operación se cancelará y se revertirá bien si lanza una excepción InvalidPluginExecutionException o no. InvalidPluginExecutionException es la única excepción que le ofrece la capacidad de controlar qué mensaje de excepción se mostrará al usuario. Esto es particularmente cierto en el caso de las aplicaciones basadas en modelo utilizadas por las soluciones de Dynamics 365.

Sugerencia

Le recomendamos que identifique cualquier error y lance una excepción InvalidPluginExecutionException para que pueda controlar lo que se esté mostrando al usuario. Esto puede ser simplemente "An unexpected error occurred", pero también puede agregar información que ayude al administrador a solucionar el problema. De esta manera, tiene parte del control. Si permite que aparezcan otros tipos de excepciones, el error se presentará como un error IsvUnExpected con el mensaje An unexpected error occurred from ISV code., que no es muy útil.

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

El mensaje de excepción para los complementos asincrónicos registrados se escribe en una tabla Trabajo 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 mostrará ningún 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. Esto puede deberse a un error de red o algún otro error que se puede volver a probar al llamar a un recurso externo.

Para volver a intentar su complemento, utilice el constructor InvalidPluginExecutionException (OperationStatus, Int32, String) usando el valor de miembro OperationStatus Enum Retry.

Cuando su complemento arroja este tipo de excepción, el servicio asincrónico intentará ejecutar su complemento cuatro veces. Si no tiene éxito en cuatro intentos, fallará.

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).