Compartilhar via


Resolving Conflicts

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Um estar em conflito com ocorre quando um objeto é alterado em ambos os o Windows Embedded CE-Based dispositivo and o área de trabalho desde a última sincronização. O estar em conflito com for resolvido pelo avisar o usuário a escolher qual objeto para salvar.

Resolução de conflito começa quando o Gerenciador serviço chama IReplObjHandler::GetPacket Sobre o Windows Embedded CE com dispositivo para enviar um copiar do objeto para o área de trabalho. O área de trabalho Gerenciador serviço, em seguida, chama IReplObjHandler::SetPacket Para criar um objeto temporário. Durante as duas o Windows Embedded CE-com base dispositivo e o área de trabalho chamar, o Gerenciador serviço passa RSF_CONFLICT_OBJECT in REPLSETUP::dwFlags.

A seguinte ilustração mostra a seqüência chamar para resolução estar em conflito com.

Após o serviço Gerenciador recebe os dados do Windows Embedded CE com dispositivo, ele chama IReplStore::GetConflictInfo e transmite um identificador para ambos os o original área de trabalho objeto e o objeto dispositivo temporário. Próximo, o área de trabalho provedor preenche a CONFINFO estrutura para personalizar o texto descrição exibido em um padrão A resolução de conflito caixa diálogo, que é fornecida pelo Gerenciador serviço.

O seguinte mostra exemplo de código como para implementar IReplStore::GetConflictInfo.

STDMETHODIMP CStore::GetConflictInfo
(
      PCONFINFO pConfInfo  // pointer to a CONFINFO structure
)
{
   // Verify that you have the right version of OBJUIDATA.
   if (pConfInfo->cbStruct != sizeof (CONFINFO))
       return E_INVALIDARG;

   // Copy "Stock" to szLocalName and szRemoteName. You can use your
      // own local and remote object names to replace "Stock".
   lstrcpy (pConfInfo->szLocalName,  "Stock");
   lstrcpy (pConfInfo->szRemoteName, "Stock");

   CItem *pLocalItem  = (CItem*)pConfInfo->hLocalItem;
   CItem *pRemoteItem = (CItem*)pConfInfo->hRemoteItem;

   // Find the local object, then the remote object.
      // pLocalObject  points to the local  object.
   // pRemoteObject points to the remote object.

   // If both the local and remote objects are found
   if (pLocalObject && pRemoteObject)
   {
      // Compare local and remote objects.
      // If identical, return RERR_IGNORE.
   }

   // if local object  found
   if (pLocalObject)
      // Store information for local object in pConfInfo->szLocalDesc.

   // if remote object found
   if (pRemoteObject)
      // Store information for remote object in pConfInfo->szRemoteDesc.

   return NOERROR;
}

Se o área de trabalho provedor não pode gravar um objeto temporário sobre o área de trabalho, ele pode salvar os pacotes na memória e retornar HREPLITEM Com um ponteiro para a localidade memória. Neste maiúsculas e minúsculas, área de trabalho o provedor deve implementar esse identificador em todos os IReplStore Métodos que aceitar um HREPLITEM identificador, como CopyObject ou ISpTTSEngine::Speak. FreeObject. Quando o Gerenciador serviço chama IReplStore::GetConflictInfo, torna-se o identificador CONFINFO::hRemoteItem. O área de trabalho provedor, em seguida, pode extrair texto descritivo a partir de identificador e salvar em CONFINFO.

The A resolução de conflito caixa diálogo solicita que o usuário a escolher uma do seguinte ações:

  • Substituir o área de trabalho objeto com o objeto dispositivo modificado.
    O Gerenciador serviço marca o área de trabalho objeto como atualizado e o objeto dispositivo como alterado. Isso garante que o objeto dispositivo é transferido para o área de trabalho durante o próximo sincronização.
  • Substitua o objeto dispositivo o objeto dispositivo modificado.
    O Gerenciador serviço marca o objeto dispositivo como atualizado.
  • Deixe as informações não resolvido item.
    Tipo de informações não está sincronizado. Essa opção permitirá que o Gerenciador serviço ao identificador de resolução.

Em ambos os maiúsculas e minúsculas, Gerenciador de serviço chama IReplObjHandler::DeleteObject Para excluir o objeto temporário.

Situações de conflito sempre não exigem um A resolução de conflito caixa diálogo. A seguinte tabela descreve especial valores de erro que IReplStore::GetConflictInfo poderá retornar ao resolver o estar em conflito com automaticamente.

Value Ação

RERR_IGNORE

O área de trabalho provedor compara duas alças em CONFINFO, determina que eles são idênticos e não leva nenhuma ação.

RERR_DISCARD

O Gerenciador serviço determina que a área de trabalho objeto representado por um identificador já é excluído e exclui o objeto dispositivo de acordo.

RERR_DISCARD_LOCAL

O Gerenciador serviço resolve o estar em conflito com, excluindo um área de trabalho objeto instead of permitindo o área de trabalho provedor para excluir o objeto.

See Also

Concepts

Sending and Receiving Changed Objects