Concorrência otimista

Em um sistema multithreaded e multiusuário, como Power Apps, as operações e as alterações de dados geralmente ocorrem em paralelo. Um problema ocorre quando duas ou mais operações de atualização ou exclusão na mesma parte dos dados ocorrem ao mesmo tempo. Essa situação pode resultar potencialmente em perda de dados. O recurso de simultaneidade otimista fornece a capacidade de seus aplicativos detectarem se um registro de tabela foi alterado no servidor no tempo entre quando seu aplicativo recuperou o registro e quando ele tenta atualizar ou excluir esse registro.

Há suporte para simultaneidade otimista em todas as tabelas prontas para uso habilitadas para sincronização offline e todas as tabelas personalizadas. Você pode determinar se uma tabela dá suporte à simultaneidade otimista recuperando os metadados da tabela usando o código ou exibindo os metadados usando o Navegador de Metadados e verificar se a coluna IsOptimisticConcurrencyEnabled está definida truecomo . Para tabelas personalizadas, essa propriedade é definida true como por padrão.

Habilitar concorrência otimista

Você pode habilitar o comportamento de verificação de simultaneidade otimista ao executar um UpdateRequest definindo a ConcurrencyBehavior propriedade da solicitação como IfRowVersionMatches. Da mesma forma, para um DeleteRequest, você definiria a ConcurrencyBehavior propriedade.

Ao usar o contexto do SDK para .NET para fazer alterações nos dados, defina ConcurrencyBehavior no objeto OrganizationServiceContext. Esse valor passa para todas as mensagens UpdateRequest e DeleteRequest usadas pelo OrganizationServiceContext quando SaveChanges() é chamado.

Você só pode definir o comportamento de simultaneidade otimista por meio de uma chamada à API do SDK. Atualmente, não há nenhuma configuração para isso em um formulário da aplicação web.

Aplicar simultaneidade otimista usando a API Web

Para obter informações sobre como usar a API Web para aplicar simultaneidade otimista, consulte Aplicar simultaneidade otimista.

Aplicar concorrência otimista usando o SDK para .NET

Para saber mais sobre como usar o SDK para .NET para aplicar simultaneidade otimista, consulte Comportamento da simultaneidade otimista.

Tratar exceções

Quando você usa concorrência otimista, a chamada do serviço da Web pode retornar várias condições de erro em uma exceção de falha <OrganizationServiceFault>.

  • ConcurrencyVersionMismatch (code=-2147088254)

    Você recebe esse erro quando fornece uma versão de linha e especifica o comportamento IfVersionMatches , mas a versão do registro existente não corresponde à versão da linha em sua solicitação.

  • ConcurrencyVersionNotProvided (code= -2147088253)

    Você recebe esse erro quando especifica o comportamento ifVersionMatches , mas não fornece um valor para a versão da linha.

  • OptimisticConcurrencyNotEnabled (code=-2147088243)

    Você recebe esse erro quando especifica o comportamento ifVersionMatches em uma atualização para uma tabela, mas a simultaneidade otimista não está habilitada.

    Verifique a propriedade Code da falha retornada para ver se a falha está relacionada à simultaneidade otimista. Os códigos para essas condições de erro vêm do ErrorCodes.cs código auxiliar.