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


Метод GetChangeBatch

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

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

Синтаксис

'Декларация
Public MustOverride Function GetChangeBatch ( _
    batchSize As UInteger, _
    destinationKnowledge As SyncKnowledge, _
    <OutAttribute> ByRef changeDataRetriever As Object _
) As ChangeBatch
'Применение
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
abstract GetChangeBatch : 
        batchSize:uint32 * 
        destinationKnowledge:SyncKnowledge * 
        changeDataRetriever:Object byref -> ChangeBatch 
public abstract function GetChangeBatch(
    batchSize : uint, 
    destinationKnowledge : SyncKnowledge, 
    changeDataRetriever : Object
) : ChangeBatch

Параметры

  • destinationKnowledge
    Тип Microsoft.Synchronization. . :: . .SyncKnowledge
    Набор знаний от поставщика назначения. Прежде чем набор знаний можно будет использовать для перечисления изменений, необходимо выполнить сопоставление набора знаний путем вызова метода MapRemoteKnowledgeToLocal в отношении набора знаний источника.
  • changeDataRetriever
    Тип System. . :: . .Object%
    Возвращает объект, который может использоваться для получения информации об изменениях. Этот объект может иметь тип IChangeDataRetriever или определяться поставщиком.

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

Тип Microsoft.Synchronization. . :: . .ChangeBatch
Пакет изменений, содержащий метаданные элементов, которые отсутствовали в указанном наборе знаний от поставщика назначения. Не может иметь значение nullNothingnullptrunitпустая ссылка (Nothing в Visual Basic).

Замечания

Одно и то же изменение не может появляться в нескольких пакетах.

Если число оставшихся изменений меньше, чем задано параметром batchSize, возвращается меньший пакет.

Если этот метод вызывается при отсутствии оставшихся изменений, возникает исключение InvalidOperationException.

Примечания по реализации

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

Примеры

В следующем примере извлекается пакет изменений из хранилища метаданных.

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

В следующем примере показан метод GetChangeBatch, который вызывается в предыдущем примере. В этом примере создается объект ChangeBatch и запускается упорядоченная группа. В нем к упорядоченной группе добавляется элемент (при условии, что этот элемент не содержится в наборе знаний назначения).

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

См. также

Справочник

KnowledgeSyncProvider Класс

Элементы KnowledgeSyncProvider

Пространство имен Microsoft.Synchronization