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