Compartir a través de


Reducir la pérdida potencial de datos mediante simultaneidad optimista

 

Publicado: enero de 2017

Se aplica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

En un sistema con varios subprocesos y usuarios como Microsoft Dynamics 365, las cambios en operaciones y datos suceden a menudo paralelamente. Un problema surge cuando dos o más operaciones de actualización o de eliminación del mismo dato suceden al mismo tiempo. Esta situación podría producir la pérdida de datos. En este versión de SDK se ofrece una capacidad para que sus aplicaciones detecten si un registro de entidad ha cambiado en el servidor desde el momento en que la aplicación recuperó el registro y cuando intenta actualizar o eliminar ese registro.

La simultaneidad optimista se admite en todas las entidades predefinidas habilitadas para sincronización sin conexión y todas las entidades personalizadas. Puede determinar si una entidad admite simultaneidad optimista recuperando metadatos de la entidad con una llamada de SDK, o viendo los metadatos mediante el explorador de metadatos, y comprobar si el atributo IsOptimisticConcurrencyEnabled está establecido como true. Para las entidades personalizadas, esta propiedad se establece como true de forma predeterminada.Para ver los metadatos de la entidad de su organización, instale la solución Explorador de metadatos que se describe en Examinar los metadatos de la organización. También puede ver los metadatos de una organización no personalizada en una hoja de cálculo de Excel denominada EntityMetadata.xlsx que se incluye en la carpeta de nivel superior de la descarga del SDK.

En este tema

Habilitar simultaneidad optimista

Actualizar o eliminar registros

Administrar excepciones

Habilitar simultaneidad optimista

Puede habilitar el comportamiento de comportamiento de simultaneidad optimista cuando ejecuta una UpdateRequest estableciendo la propiedad ConcurrencyBehavior de la solicitud como IfRowVersionMatches. De igual modo, para una DeleteRequest, establecería la propiedad ConcurrencyBehavior.

Cuando usa el contexto de servicio de la organización para realizar cambios de datos, establezca ConcurrencyBehavior en el objeto OrganizationServiceContext. Este valor se pasará a todos los mensajes de UpdateRequest y DeleteRequest usados por el OrganizationServiceContext cuando se llama a SaveChanges.

El comportamiento de simultaneidad optimista puede configurarse únicamente con una llamada del SDK. Actualmente no existe un valor para él en un formulario de la aplicación web.

Actualizar o eliminar registros

Después de recuperar un registro de la entidad, obtenga acceso al atributo RowVersion para obtener la versión actual de ese registro. En el objeto de entidad que usa como Target en la UpdateRequest, establezca la propiedad RowVersion con el mismo valor del registro recuperado y ejecute la solicitud. De forma similar, en el objeto de referencia de entidad que usa como Target en la DeleteRequest, establezca la propiedad RowVersion con el mismo valor de versión de fila del registro recuperado y ejecute la solicitud.

Si la entidad pasada a la UpdateRequest contiene entidades relacionadas, el mismo comportamiento se aplica a todas las operaciones de actualización que utilicen las versiones de fila proporcionadas con cada entidad individual.

Cuando la solicitud es recibida por la plataforma, se realiza una comparación de la versión de fila del registro de entidad actual y la versión de fila en la solicitud. Si coinciden con las versiones de fila y ConcurrencyBehavior se establece en IfRowVersionMatches, la operación es correcta. De lo contrario, se devuelve una excepción de error.

Administrar excepciones

Hay varias condiciones de error que se pueden devolver en una FaultException<OrganizationServiceFault> desde la llamada de servicio web cuando se usa simultaneidad optimista.

  • ConcurrencyVersionMismatch (código=-2147088254)

    Cuando se proporciona una versión de fila y se indica el comportamiento de IfVersionMatches, si la versión del registro existente no coincide con la versión de fila proporcionada en la solicitud, se devuelve un error.

  • ConcurrencyVersionNotProvided (código= -2147088253

    Cuando se indica el comportamiento IfVersionMatches y no se proporciona un valor para la versión de fila, se devuelve un error.

  • OptimisticConcurrencyNotEnabled (código=-2147088243)

    Cuando el comportamiento IfVersionMatches se indica en una actualización a una entidad, donde simultaneidad optimista no está habilitada, se devuelve un error.

Puede comprobar la propiedad Code del error devuelto para determinar si el error se relaciona con la simultaneidad optimista. Los códigos de las condiciones de error que aparecieron anteriormente se obtuvieron del código auxiliar ErrorCodes.cs.

Ver también

Amplíe Microsoft Dynamics 365 en el servidor
Ejemplo: Uso de simultaneidad optimista con operaciones de actualización y eliminación

Microsoft Dynamics 365

© 2017 Microsoft. Todos los derechos reservados. Copyright