Compartilhar via


Método GetFilteredChangeBatch

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

Namespace:  Microsoft.Synchronization.MetadataStorage
Assembly:  Microsoft.Synchronization.MetadataStorage (em Microsoft.Synchronization.MetadataStorage.dll)

Sintaxe

'Declaração
Public MustOverride Function GetFilteredChangeBatch ( _
    batchSize As UInteger, _
    destinationKnowledge As SyncKnowledge, _
    filterInfo As FilterInfo, _
    filterCallback As ReplicaMetadata..::..ItemFilterCallback _
) As ChangeBatch
'Uso
Dim instance As ReplicaMetadata
Dim batchSize As UInteger
Dim destinationKnowledge As SyncKnowledge
Dim filterInfo As FilterInfo
Dim filterCallback As ReplicaMetadata..::..ItemFilterCallback
Dim returnValue As ChangeBatch

returnValue = instance.GetFilteredChangeBatch(batchSize, _
    destinationKnowledge, filterInfo, _
    filterCallback)
public abstract ChangeBatch GetFilteredChangeBatch(
    uint batchSize,
    SyncKnowledge destinationKnowledge,
    FilterInfo filterInfo,
    ReplicaMetadata..::..ItemFilterCallback filterCallback
)
public:
virtual ChangeBatch^ GetFilteredChangeBatch(
    unsigned int batchSize, 
    SyncKnowledge^ destinationKnowledge, 
    FilterInfo^ filterInfo, 
    ReplicaMetadata..::..ItemFilterCallback^ filterCallback
) abstract
abstract GetFilteredChangeBatch : 
        batchSize:uint32 * 
        destinationKnowledge:SyncKnowledge * 
        filterInfo:FilterInfo * 
        filterCallback:ReplicaMetadata..::..ItemFilterCallback -> ChangeBatch 
public abstract function GetFilteredChangeBatch(
    batchSize : uint, 
    destinationKnowledge : SyncKnowledge, 
    filterInfo : FilterInfo, 
    filterCallback : ReplicaMetadata..::..ItemFilterCallback
) : ChangeBatch

Parâmetros

Valor de retorno

Tipo: Microsoft.Synchronization. . :: . .ChangeBatch
Um lote de alterações que contém metadados dos itens que não estão contidos no conhecimento especificado do provedor de destino e que são aceitos pelo filtro especificado.

Exceções

Exceção Condição
ObjectDisposedException

O objeto foi descartado ou não foi inicializado corretamente.

ArgumentOutOfRangeException

batchSize é 0.

ArgumentNullException

destinationKnowledge é um null Nothing nullptr unit uma referência nula (Nothing no Visual Basic) ou filterInfo é um null Nothing nullptr unit uma referência nula (Nothing no Visual Basic) .

Comentários

Este método ajuda um provedor de sincronização a implementar seu método GetChangeBatch quando uma sincronização filtrada foi especificada.

O representante de filterCallback será chamado antes de cada item ser adicionado a um lote. Se o representante retornar true, o item será adicionado ao lote; caso contrário, ele não será adicionado.

Antes de os provedores chamarem este método, eles devem garantir que as versões no repositório de metadados reflitam todas as alterações locais, inclusive exclusões. Isso pode ser feito por uma passagem de manutenção de metadados explícita para enumerar itens e atualizar seus metadados.

A implementação desta classe, que está disponível através de SqlMetadataStore, adiciona as alterações ao lote de alterações na ordem da ID global.

A implementação desta classe, que está disponível através de SqlMetadataStore, define IsLastBatch como true no lote de alterações retornado quando não há mais nenhuma alteração a ser enviada.

Observações para implementadores

Para ajudar um provedor que usa ordenação da ID global e tem a habilidade de usar intervalos, as alterações devem ser enumeradas e adicionadas ao lote de alterações na ordem da ID global. A primeira alteração do lote de alterações retornado inicia um novo intervalo.

Se não houver mais nenhuma alteração a ser enviada depois deste lote, IsLastBatch deverá ser definido como true no lote de alterações retornado ou o Sync Framework chamará GetChangeBatch()()()() novamente para recuperar outro lote de alterações.

Exemplos

O exemplo a seguir cria um objeto ItemListFilterInfo e o usa, junto com uma implementação de ReplicaMetadata..::..ItemFilterCallback, para recuperar um lote de alterações filtrado. A implementação de ReplicaMetadata..::..ItemFilterCallback também está incluída.

Public Overrides Function GetChangeBatch(ByVal batchSize As UInteger, ByVal destinationKnowledge As SyncKnowledge, ByRef changeDataRetriever As Object) As ChangeBatch
    ' Return this object as the IChangeDataRetriever object that is called to retrieve item data.
    changeDataRetriever = Me

    ' Use the metadata storage service to get a batch of changes.
    Dim retrievedBatch As ChangeBatch
    If _isFiltered Then
        ' If a filter is set, get a filtered change batch from the metadata storage service.
        ' The BirthdateFilterCallback method indicates whether an item passes the filter.
        Dim filterInfo As New ItemListFilterInfo(IdFormats)
        retrievedBatch = _ContactStore.ContactReplicaMetadata.GetFilteredChangeBatch(batchSize, destinationKnowledge, filterInfo, AddressOf BirthdateFilterCallback)
    Else
        retrievedBatch = _ContactStore.ContactReplicaMetadata.GetChangeBatch(batchSize, destinationKnowledge)
    End If

    Return retrievedBatch
End Function
Public Function BirthdateFilterCallback(ByVal itemMeta As ItemMetadata) As Boolean
    ' An item passes the filter only if its birthdate field is less than the maximum birthdate
    ' specified by the filter.
    Return (_ContactStore.ContactList(itemMeta.GlobalId).Birthdate < _maxBirthdateFilter)
End Function
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;

    // Use the metadata storage service to get a batch of changes.
    ChangeBatch retrievedBatch;
    if (_isFiltered)
    {
        // If a filter is set, get a filtered change batch from the metadata storage service.
        // The BirthdateFilterCallback method indicates whether an item passes the filter.
        ItemListFilterInfo filterInfo = new ItemListFilterInfo(IdFormats);
        retrievedBatch = _ContactStore.ContactReplicaMetadata.GetFilteredChangeBatch(batchSize, destinationKnowledge,
            filterInfo, BirthdateFilterCallback);
    }
    else
    {
        retrievedBatch = _ContactStore.ContactReplicaMetadata.GetChangeBatch(batchSize, destinationKnowledge);
    }

    return retrievedBatch;
}
public bool BirthdateFilterCallback(ItemMetadata itemMeta)
{
    // An item passes the filter only if its birthdate field is less than the maximum birthdate
    // specified by the filter.
    return (_ContactStore.ContactList[itemMeta.GlobalId].Birthdate < _maxBirthdateFilter);
}

Consulte também

Referência

ReplicaMetadata Classe

Membros ReplicaMetadata

Namespace Microsoft.Synchronization.MetadataStorage