Reduzir a perda de dados potencial usando a simultaneidade otimista

 

Publicado: novembro de 2016

Aplicável a: Dynamics CRM 2015

Em um sistema multi-threaded e de vários usuários, como o Microsoft Dynamics 365, as operações e as alterações de dados com frequência acontecem paralelamente. Ocorre um problema quando duas ou mais operações de atualização ou de exclusão nos mesmos dados acontecem ao mesmo tempo. Essa situação potencialmente poderia resultar em perda de dados. Nesta versão de SDK, foi fornecida a capacidade de seus aplicativos detectarem se um registro de entidade foi alterado no servidor na hora entre o momento em que seu aplicativo recuperou o registro e quando ele tenta atualizá-lo ou excluí-lo.

Observação

Para organizações que utilizam o Microsoft Dynamics CRM Online, esse recurso só estará disponível se a sua organização tiver atualizado para a Atualização 1 do Dynamics CRM Online 2015. Este recurso não está disponível para o Dynamics CRM (local).

A simultaneidade otimista tem suporte nas entidades integradas habilitadas para sincronização offline e em todas as entidades personalizadas. Você pode determinar se a entidade dará suporte à simultaneidade otimista recuperando os metadados da entidade por meio de uma chamada ao SDK, ou então, por meio da exibição dos metadados, usando o Navegador dos Metadados, e verificar se o atributo IsOptimisticConcurrencyEnabled está definido como true. Para entidades personalizadas, essa propriedade está definida como true por padrão.Para exibir os metadados de entidade da sua organização, instale a solução Navegador dos Metadados descrita em Procurar os metadados da sua organização. Também é possível exibir os metadados de uma organização não personalizada no arquivo do Excel chamado EntityMetadata.xlsx, incluído na pasta de nível superior do download do SDK.

Neste tópico

Habilitar a simultaneidade otimista

Atualizar ou excluir um registro

Tratar exceções

Habilitar a simultaneidade otimista

Você pode habilitar o comportamento de verificação da simultaneidade otimista ao executar uma UpdateRequest definindo a propriedade ConcurrencyBehavior da solicitação para IfRowVersionMatches. De modo semelhante, para uma DeleteRequest, você definiria a propriedade ConcurrencyBehavior.

Ao usar o contexto de serviço da organização para fazer alterações de dados, defina ConcurrencyBehavior no objeto OrganizationServiceContext. Esse valor será passado para todas as mensagens UpdateRequest and DeleteRequest usadas pelo OrganizationServiceContext quando SaveChanges é chamado.

O comportamento da simultaneidade otimista só pode ser definido por meio de uma chamada do SDK. No momento, não há configuração para ele em um formulário do aplicativo Web.

Atualizar ou excluir um registro

Após a recuperação de um registro de entidade, acesse o atributo RowVersion para obter a versão atual desse registro. No objeto da entidade usado como a Target na UpdateRequest, defina a propriedade RowVersion com o mesmo valor do registro recuperado e execute a solicitação. De forma semelhante, no objeto de referência da entidade usado como o Target na DeleteRequest, defina a propriedade RowVersion com o mesmo valor de versão da linha do registro recuperado e execute a solicitação.

Se a entidade passada para a UpdateRequest contiver entidades relacionadas, o mesmo comportamento será aplicado a todas as operações de atualização usando as versões de linha fornecidas com cada entidade individual.

Quando a solicitação for recebida pela plataforma, será executada uma comparação da versão atual de linha do registro da entidade e a versão de linha na solicitação. Se as versões de linha corresponderem e se ConcurrencyBehavior estiver definido como IfRowVersionMatches, a operação obterá êxito. Caso contrário, uma exceção de falha será retornada.

Tratar exceções

Há várias condições de erro que podem ser retornadas em uma FaultException<OrganizationServiceFault> a partir da chamada do serviço Web quando a simultaneidade otimista estiver sendo usada.

  • ConcurrencyVersionMismatch (código=-2147088254)

    Quando uma versão de linha for fornecida e o comportamento de IfVersionMatches for indicado, se a versão do registro existente não corresponder à versão de linha fornecida na solicitação, uma falha será retornada.

  • ConcurrencyVersionNotProvided (código= -2147088253

    Quando o comportamento IfVersionMatches for indicado e nenhum valor for fornecido para a linha, uma falha será retornada.

  • OptimisticConcurrencyNotEnabled (código=-2147088243)

    Haverá uma falha quando o comportamento IfVersionMatches for indicado em uma atualização para uma entidade, onde a simultaneidade otimista não esteja habilitada.

Você pode verificar a propriedade Código da falha retornada para determinar se a falha está relacionada à simultaneidade otimista. Os códigos das condições de erro que foram exibidas anteriormente foram obtidos do código auxiliar ErrorCodes.cs.

Confira Também

Crie aplicativos e extensões do servidor
Exemplo: Use a simultaneidade otimista com as operações de atualização e exclusão

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais