Compartilhar via


Método KnowledgeSyncProvider.GetChangeBatch

Quando substituído em uma classe derivada, obtém um lote de alterações que contém metadados para os itens que não estão contidos no conhecimento especificado do provedor de destino.

Namespace: Microsoft.Synchronization
Assembly: Microsoft.Synchronization (em microsoft.synchronization.dll)

Sintaxe

'Declaração
Public MustOverride Function GetChangeBatch ( _
    batchSize As UInteger, _
    destinationKnowledge As SyncKnowledge, _
    <OutAttribute> ByRef changeDataRetriever As Object _
) As ChangeBatch
'Uso
Dim instance As KnowledgeSyncProvider
Dim batchSize As UInteger
Dim destinationKnowledge As SyncKnowledge
Dim changeDataRetriever As Object
Dim returnValue As ChangeBatch

returnValue = instance.GetChangeBatch(batchSize, destinationKnowledge, changeDataRetriever)
public abstract ChangeBatch GetChangeBatch (
    uint batchSize,
    SyncKnowledge destinationKnowledge,
    out Object changeDataRetriever
)
public:
virtual ChangeBatch^ GetChangeBatch (
    unsigned int batchSize, 
    SyncKnowledge^ destinationKnowledge, 
    [OutAttribute] Object^% changeDataRetriever
) abstract
public abstract ChangeBatch GetChangeBatch (
    UInt32 batchSize, 
    SyncKnowledge destinationKnowledge, 
    /** @attribute OutAttribute() */ /** @ref */ Object changeDataRetriever
)
JScript does not support passing value-type arguments by reference.

Parâmetros

  • batchSize
    O número de alterações a serem incluídas no lote de alterações.
  • destinationKnowledge
    O conhecimento do provedor de destino. Esse conhecimento deve ser mapeado chamando MapRemoteKnowledgeToLocal no conhecimento de origem para que possa ser usado para a enumeração de alterações.
  • changeDataRetriever
    Retorna um objeto que pode ser usado para recuperar dados de alteração. Pode ser um objeto IChangeDataRetriever ou um objeto específico ao provedor.

Valor de retorno

Um lote de alterações que contém metadados dos itens que não estão contidos no conhecimento especificado do provedor de destino. Não pode ser um referência nula (Nothing no Visual Basic).

Comentários

A mesma alteração não aparecerá em vários lotes.

Se restarem menos alterações que o número especificado pelo batchSize, um lote menor será retornado.

Se esse método for chamado quando não restar nenhuma alteração, InvalidOperationException será lançada.

Observações para implementadores: Se não houver mais nenhuma alteração para enviar depois deste lote, IsLastBatch deve ser definido como true no lote de alterações retornado. Caso contrário, o Sync Framework chamará GetChangeBatch novamente para recuperar outro lote de alterações.

Exemplo

O exemplo a seguir obtém um lote de alterações do repositório de metadados.

public override ChangeBatch GetChangeBatch(uint batchSize, SyncKnowledge destinationKnowledge, out object changeDataRetriever)
{
    // Return this object as the IChangeDataRetriever object that is called to retrieve item data.
    changeDataRetriever = this;

    // Call the metadata store to get a batch of changes.
    return _itemStore.ContactReplicaMetadata.GetChangeBatch(batchSize, destinationKnowledge);
}

O exemplo a seguir mostra o método GetChangeBatch que foi chamado no exemplo anterior. Este exemplo cria um objeto ChangeBatch e inicia um grupo ordenado. Ele acrescenta um item ao grupo ordenado quando o item não está contido no conhecimento de destino.

public override ChangeBatch GetChangeBatch(uint batchSize, SyncKnowledge destinationKnowledge)
{
    // The destination knowledge must be converted to be compatible with the source replica
    // before it can be used.
    SyncKnowledge mappedDestKnowledge = _knowledge.MapRemoteKnowledgeToLocal(destinationKnowledge);

    // Create a new change batch, initialized by using the current knowledge of the source replica
    // and a new ForgottenKnowledge object.
    ChangeBatch changeBatch = new ChangeBatch(IdFormats, GetKnowledge(), new ForgottenKnowledge());

    // Start a group of changes in the change batch. The group is ordered by item ID.
    // _getChangeBatchCurrent is 0 the first time GetChangeBatch is called, and is used to track the
    // position in the metadata store for subsequent calls to GetChangeBatch.
    changeBatch.BeginOrderedGroup(_items.Values[_getChangeBatchCurrent].GlobalId);
    
    // itemsAdded is incremented each time a change is added to the change batch. When itemsAdded
    // is greater than the requested batch size, enumeration stops and the change batch is returned.
    int itemsAdded = 0;
    
    ItemMetadata itemMeta;

    // Enumerate items and add a change to the change batch if it is not contained in the 
    // destination knowledge.
    // _items is a SortedList that contains ItemMetadata objects that are ordered by item ID.
    for (; itemsAdded <= batchSize && _getChangeBatchCurrent < _items.Count; _getChangeBatchCurrent++)
    {
        itemMeta = _items.Values[_getChangeBatchCurrent];
        ChangeKind kind = (itemMeta.IsDeleted) ? ChangeKind.Deleted : ChangeKind.Update;
        ItemChange change = new ItemChange(IdFormats, ReplicaId, itemMeta.GlobalId, kind, itemMeta.CreationVersion, 
            itemMeta.ChangeVersion);

        // If the change is not contained in the destination knowledge, add it to the change batch.
        if (!mappedDestKnowledge.Contains(change))
        {
            changeBatch.AddChange(change);
            itemsAdded++;
        }
    }

    // End the group of changes in the change batch. Pass the current source knowledge.
    changeBatch.EndOrderedGroup(_items.Values[_getChangeBatchCurrent - 1].GlobalId, _knowledge);

    // When all items in the metadata store have been enumerated, set this batch as the
    // last batch.
    if (_getChangeBatchCurrent == _items.Count)
    {
        changeBatch.SetLastBatch();
    }

    return changeBatch;
}

Consulte também

Referência

Classe KnowledgeSyncProvider
Membros KnowledgeSyncProvider
Namespace Microsoft.Synchronization