Freigeben über


KnowledgeSyncProvider.GetChangeBatch-Methode

Ruft, wenn in einer abgeleiteten Klasse überschrieben, einen Änderungsbatch mit Elementmetadaten für Elemente ab, die nicht im angegebenen Wissen des Zielanbieters enthalten sind.

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

Syntax

'Declaration
Public MustOverride Function GetChangeBatch ( _
    batchSize As UInteger, _
    destinationKnowledge As SyncKnowledge, _
    <OutAttribute> ByRef changeDataRetriever As Object _
) As ChangeBatch
'Usage
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.

Parameter

  • batchSize
    Die Anzahl von Änderungen, die der Änderungsbatch umfassen soll.
  • destinationKnowledge
    Das Wissen des Zielanbieters. Dieses Wissen muss durch Aufrufen von MapRemoteKnowledgeToLocal für das Quellwissen zugeordnet werden, bevor es für die Änderungsenumeration verwendet werden kann.
  • changeDataRetriever
    Gibt ein Objekt zurück, mit dem Änderungsdaten abgerufen werden können. Hierbei kann es sich um ein IChangeDataRetriever-Objekt oder ein anbieterspezifisches Objekt handeln.

Rückgabewert

Ein Änderungsbatch mit Elementmetadaten für Elemente, die nicht im angegebenen Wissen des Zielanbieters enthalten sind. Darf nicht NULL sein.

Hinweise

Die gleiche Änderung ist nicht in mehreren Batches enthalten.

Wenn weniger Änderungen als die von batchSize angegebene Anzahl verbleiben, wird ein kleinerer Batch zurückgegeben.

Wenn diese Methode aufgerufen wird, obwohl keine Änderungen mehr vorhanden sind, wird InvalidOperationException ausgelöst.

Hinweise für Implementierer: Wenn nach diesem Batch keine zu sendenden Änderungen mehr vorliegen, muss IsLastBatch für den zurückgegebenen Änderungsbatch auf true festgelegt werden. Andernfalls wird GetChangeBatch von Sync Framework erneut aufgerufen, um einen weiteren Änderungsbatch abzurufen.

Beispiel

Im folgenden Beispiel wird ein Änderungsbatch vom Metadatenspeicher abgerufen.

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

Im folgenden Beispiel wird die GetChangeBatch-Methode veranschaulicht, die im vorherigen Beispiel aufgerufen wird. In diesem Beispiel wird ein ChangeBatch-Objekt erstellt und eine geordnete Gruppe gestartet. Der geordneten Gruppe wird ein Element hinzugefügt, wenn das Element nicht im Zielwissen enthalten ist.

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

Siehe auch

Verweis

KnowledgeSyncProvider-Klasse
KnowledgeSyncProvider-Member
Microsoft.Synchronization-Namespace