Поделиться через


Метод ReplicaMetadata.GetFilteredChangeBatch

При переопределении в производном классе этот метод возвращает пакет изменений, содержащий метаданные элементов, которые отсутствовали в указанном наборе знаний от поставщика назначения и были приняты указанным фильтром.

Пространство имен: Microsoft.Synchronization.MetadataStorage
Сборка: Microsoft.Synchronization.MetadataStorage (в microsoft.synchronization.metadatastorage.dll)

Синтаксис

'Декларация
Public MustOverride Function GetFilteredChangeBatch ( _
    batchSize As UInteger, _
    destinationKnowledge As SyncKnowledge, _
    filterInfo As FilterInfo, _
    filterCallback As ItemFilterCallback _
) As ChangeBatch
'Применение
Dim instance As ReplicaMetadata
Dim batchSize As UInteger
Dim destinationKnowledge As SyncKnowledge
Dim filterInfo As FilterInfo
Dim filterCallback As ItemFilterCallback
Dim returnValue As ChangeBatch

returnValue = instance.GetFilteredChangeBatch(batchSize, destinationKnowledge, filterInfo, filterCallback)
public abstract ChangeBatch GetFilteredChangeBatch (
    uint batchSize,
    SyncKnowledge destinationKnowledge,
    FilterInfo filterInfo,
    ItemFilterCallback filterCallback
)
public:
virtual ChangeBatch^ GetFilteredChangeBatch (
    unsigned int batchSize, 
    SyncKnowledge^ destinationKnowledge, 
    FilterInfo^ filterInfo, 
    ItemFilterCallback^ filterCallback
) abstract
public abstract ChangeBatch GetFilteredChangeBatch (
    UInt32 batchSize, 
    SyncKnowledge destinationKnowledge, 
    FilterInfo filterInfo, 
    ItemFilterCallback filterCallback
)
public abstract function GetFilteredChangeBatch (
    batchSize : uint, 
    destinationKnowledge : SyncKnowledge, 
    filterInfo : FilterInfo, 
    filterCallback : ItemFilterCallback
) : ChangeBatch

Параметры

  • batchSize
    Размер создаваемого пакета.
  • destinationKnowledge
    Набор знаний от поставщика назначения.
  • filterInfo
    Сведения о фильтре, который управляет включением элементов в пакет изменений.
  • filterCallback
    Делегат, который вызывается для определения необходимости добавления элемента в пакет.

Возвращаемое значение

Пакет изменений, содержащий метаданные элементов, которые отсутствовали в указанном наборе знаний от поставщика назначения и были приняты указанным фильтром.

Исключения

Тип исключения Условие

ObjectDisposedException

Объект удален или неправильно инициализирован.

ArgumentOutOfRangeException

Параметр batchSize равен 0.

ArgumentNullException

Параметр destinationKnowledge равен пустая ссылка (Nothing в Visual Basic), или параметр filterInfo равен пустая ссылка (Nothing в Visual Basic).

Замечания

Этот метод упрощает реализацию метода GetChangeBatch для службы синхронизации, если задана выборочная синхронизация.

Делегат filterCallback вызывается перед добавлением каждого элемента в пакет. Если делегат вернул значение true, то элемент добавляется в пакет. В противном случае добавление элемента не производится.

Перед вызовом этого метода поставщик должен убедиться, что версии в хранилище метаданных отражают все локальные изменения, включая операции удаления. Это достигается с помощью явного этапа обслуживания метаданных, в котором перечисляются элементы и обновляются их метаданные.

Реализация этого класса, которая возможна через класс SqlMetadataStore, добавляет изменения в пакет в порядке глобальных идентификаторов.

Реализация этого класса, которая возможна через класс SqlMetadataStore, устанавливает свойство IsLastBatch в значение true для возвращаемого пакета изменений, если отсутствуют неотправленные изменения.

Примечания по реализации. Чтобы упростить задачу поставщика, использующего порядок глобальных идентификаторов и имеющего возможность использования диапазонов, изменения следует перечислить и добавить в пакет изменений в порядке глобальных идентификаторов. Первое изменение в возвращаемом пакете открывает новый диапазон. Если после этого пакета не осталось ни одного не переданного изменения, то в возвращаемом пакете изменений необходимо установить свойство IsLastBatch в значение true. В противном случае платформа Sync Framework повторно вызовет метод GetChangeBatch, чтобы получить следующий пакет изменений.

Пример

В следующем примере показано создание и использование объекта ItemListFilterInfo, а также реализация метода ReplicaMetadata.ItemFilterCallback для получения пакета изменений с фильтрацией. Реализация метода ReplicaMetadata.ItemFilterCallback также включена.

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);
}

См. также

Справочник

Класс ReplicaMetadata
Элементы ReplicaMetadata
Пространство имен Microsoft.Synchronization.MetadataStorage