Freigeben über


KnowledgeSyncProvider.ProcessChangeBatch-Methode

Verarbeitet, wenn in einer abgeleiteten Klasse überschrieben, eine Gruppe von Änderungen, indem Konflikte ermittelt und Änderungen auf den Elementspeicher angewendet werden.

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

Syntax

'Declaration
Public MustOverride Sub ProcessChangeBatch ( _
    resolutionPolicy As ConflictResolutionPolicy, _
    sourceChanges As ChangeBatch, _
    changeDataRetriever As Object, _
    syncCallbacks As SyncCallbacks, _
    sessionStatistics As SyncSessionStatistics _
)
'Usage
Dim instance As KnowledgeSyncProvider
Dim resolutionPolicy As ConflictResolutionPolicy
Dim sourceChanges As ChangeBatch
Dim changeDataRetriever As Object
Dim syncCallbacks As SyncCallbacks
Dim sessionStatistics As SyncSessionStatistics

instance.ProcessChangeBatch(resolutionPolicy, sourceChanges, changeDataRetriever, syncCallbacks, sessionStatistics)
public abstract void ProcessChangeBatch (
    ConflictResolutionPolicy resolutionPolicy,
    ChangeBatch sourceChanges,
    Object changeDataRetriever,
    SyncCallbacks syncCallbacks,
    SyncSessionStatistics sessionStatistics
)
public:
virtual void ProcessChangeBatch (
    ConflictResolutionPolicy resolutionPolicy, 
    ChangeBatch^ sourceChanges, 
    Object^ changeDataRetriever, 
    SyncCallbacks^ syncCallbacks, 
    SyncSessionStatistics^ sessionStatistics
) abstract
public abstract void ProcessChangeBatch (
    ConflictResolutionPolicy resolutionPolicy, 
    ChangeBatch sourceChanges, 
    Object changeDataRetriever, 
    SyncCallbacks syncCallbacks, 
    SyncSessionStatistics sessionStatistics
)
public abstract function ProcessChangeBatch (
    resolutionPolicy : ConflictResolutionPolicy, 
    sourceChanges : ChangeBatch, 
    changeDataRetriever : Object, 
    syncCallbacks : SyncCallbacks, 
    sessionStatistics : SyncSessionStatistics
)

Parameter

  • resolutionPolicy
    Die zu verwendende Richtlinie zur Konfliktauflösung, wenn durch diese Methode Änderungen angewendet werden.
  • sourceChanges
    Ein Batch der Änderungen vom Quellenanbieter, die lokal übernommen werden sollen.
  • changeDataRetriever
    Ein Objekt, mit dem Änderungsdaten abgerufen werden können. Hierbei kann es sich um ein IChangeDataRetriever-Objekt oder ein anbieterspezifisches Objekt handeln.
  • syncCallbacks
    Ein Objekt, das während dem Übernehmen von Änderungen Ereignisbenachrichtigungen empfängt.
  • sessionStatistics
    Wird zum Nachverfolgen von Änderungsstatistiken verwendet. Bei einem Anbieter, der Änderungen benutzerdefiniert anwendet, muss dieses Objekt mit den Ergebnissen der angewendeten Änderungen aktualisiert werden.

Hinweise

Wenn eine Quelländerung Änderungen an Änderungseinheiten enthält, muss vom Zielanbieter festgestellt werden, welche Änderungseinheitversionen im an den Änderungsanwender gesendeten Batch mit Zielversionen enthalten sein sollen. Diese Entscheidung hängt sowohl vom Änderungstyp des Quellenanbieters als auch davon ab, ob das Element im Zielreplikat als gelöscht markiert ist. Weitere Informationen finden Sie unter Synchronisieren von Änderungseinheiten.

Beispiel

Im folgenden Beispiel wird die Zielversion aller Elemente im Änderungsbatch abgerufen. Ein NotifyingChangeApplier-Objekt wird erstellt, das zur Behandlung von Fehlererkennung und Änderungsanwendung verwendet wird.

public override void ProcessChangeBatch(ConflictResolutionPolicy resolutionPolicy, ChangeBatch sourceChanges, object changeDataRetriever, SyncCallbacks syncCallbacks, SyncSessionStatistics sessionStatistics)
{
    // Use the metadata store to get the local versions of changes received from the source provider.
    IEnumerable<ItemChange> destVersions = _itemStore.ContactReplicaMetadata.GetLocalVersions(sourceChanges);

    // Use a NotifyingChangeApplier object to process the changes. Note that this object is passed as the INotifyingChangeApplierTarget
    // object that will be called to apply changes to the item store.
    NotifyingChangeApplier changeApplier = new NotifyingChangeApplier(IdFormats);
    changeApplier.ApplyChanges(resolutionPolicy, sourceChanges, (IChangeDataRetriever)changeDataRetriever, destVersions,
        _itemStore.ContactReplicaMetadata.GetKnowledge(), _itemStore.ContactReplicaMetadata.GetForgottenKnowledge(), 
        this, _sessionContext, syncCallbacks);
}

Im folgenden Beispiel wird die GetLocalVersions-Methode veranschaulicht, die im vorherigen Beispiel aufgerufen wird. In diesem Beispiel werden die Änderungen im Quelländerungsbatch aufgelistet, und eine Liste von Zielversionen wird erstellt.

public override IEnumerable<ItemChange> GetLocalVersions(ChangeBatch sourceChanges)
{
    List<ItemChange> localVersions = new List<ItemChange>();

    // Enumerate the source changes and retrieve the destination version for each source change. 
    foreach (ItemChange srcItem in sourceChanges)
    {
        ItemChange localVer;

        // When the source item exists in the destination metadata store, retrieve the destination version of the item.
        if (_items.ContainsKey(srcItem.ItemId))
        {
            XmlItemMetadata localMeta = _items[srcItem.ItemId];
            ChangeKind kind = (localMeta.IsDeleted) ? ChangeKind.Deleted : ChangeKind.Update;
            localVer = new ItemChange(IdFormats, ReplicaId, srcItem.ItemId, kind, localMeta.CreationVersion, localMeta.ChangeVersion);
        }
        // When the source item does not exist in the destination metadata store, create a new change with unknown
        // version information.
        else
        {
            localVer = new ItemChange(IdFormats, ReplicaId, srcItem.ItemId, ChangeKind.UnknownItem, SyncVersion.UnknownVersion, SyncVersion.UnknownVersion);
        }

        localVersions.Add(localVer);
    }

    return localVersions;
}

Siehe auch

Verweis

KnowledgeSyncProvider-Klasse
KnowledgeSyncProvider-Member
Microsoft.Synchronization-Namespace