Метод 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
Делегат, который вызывается для определения необходимости добавления элемента в пакет.
Возвращаемое значение
Пакет изменений, содержащий метаданные элементов, которые отсутствовали в указанном наборе знаний от поставщика назначения и были приняты указанным фильтром.
Исключения
Тип исключения | Условие |
---|---|
Объект удален или неправильно инициализирован. |
|
Параметр batchSize равен 0. |
|
Параметр 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