2012-02-13 6 views
8

Tengo un flujo de trabajo personalizado en CRM 2011 que se desencadena manualmente contra registros de entidades personalizadas. Cuando se selecciona un único registro para el procesamiento, el flujo de trabajo siempre es exitoso. Sin embargo, al seleccionar más de un registro, al menos uno fallará. Los errores proporcionados parecen variar de un intento al siguiente, aunque se estén usando los mismos datos.CRM 2011 Flujo de trabajo "Error del puntero no válido"

errores que he encontrado hasta el momento son:

  • ValidateOpen - CrmDbConnection dispuestos encontrados cuando no debería desecharse No se puede crear un SqlExecutionContext de otro
  • SqlExecutionContext en el que OnBeginRequest no ha sido llamado

Y después de reiniciar el servidor de base de datos:

  • puntero no válido

Todo esto ocurre cuando se llama al método Update del IOrganizationService. El error del puntero no válido parece ser el error más común desde que reinicié el servidor de base de datos (se me sugirió que podría ser un problema con un servidor de base de datos excesivamente ocupado). También eliminé cualquier acumulación de tareas asíncronas en caso de que este fuera el problema, pero no ha tenido ningún efecto.

¿Alguien sabe lo que significa este error, por qué podría obtenerlo o cómo puedo solucionar el problema?

¡Muchas gracias!

Respuesta

7

Parece que este mensaje de error es una forma indirecta de decir: 'traté de abrir otra conexión a CRM cuando la anterior estaba abierta', y el motivo intenta hacer esto es muy relevante para el De hecho, solo falla al procesar más de un registro.

referencia este blog:

Parece que cuando un flujo de trabajo se ejecuta en varios registros, se utiliza la misma instancia de la clase, lo que significa que las variables de nivel de clase no se re-instanciados entre ejecuciones. Entonces, cuando las ejecuciones subsiguientes llegan al código que establece la variable de servicio de nivel de clase en una instancia de un IOrganisationService, encuentra que las variables ya tienen una y que está abierta.

La solución que encontré más fácil de implementar para tener la variable de servicio dentro de la función Ejecutar, en lugar de a nivel de clase. Esto ha resuelto el problema en todas partes donde lo he intentado desde entonces.

+1

Este fue el mismo problema que tuve, y su solución también resolvió la mía. –

+0

corrección de clave: 'implementarlo [el IOrganizationService] dentro de la función Execute (y pasarlo a un código dependiente), en lugar de a nivel de clase – mmcrae

Cuestiones relacionadas