Compartilhar via


Reduzir a perda de dados potencial usando a simultaneidade otimista

 

Publicado: janeiro de 2017

Aplicável a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

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.

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

Estender o Microsoft Dynamics 365 no servidor
Exemplo: Use a simultaneidade otimista com as operações de atualização e exclusão

Microsoft Dynamics 365

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais