Metodo KnowledgeSyncProvider.ProcessChangeBatch

Quando sottoposto a override in una classe derivata, elabora un set di modifiche tramite il rilevamento di conflitti e l'applicazione di modifiche all'archivio di elementi.

Spazio dei nomi: Microsoft.Synchronization
Assembly: Microsoft.Synchronization (in microsoft.synchronization.dll)

Sintassi

'Dichiarazione
Public MustOverride Sub ProcessChangeBatch ( _
    resolutionPolicy As ConflictResolutionPolicy, _
    sourceChanges As ChangeBatch, _
    changeDataRetriever As Object, _
    syncCallbacks As SyncCallbacks, _
    sessionStatistics As SyncSessionStatistics _
)
'Utilizzo
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
)

Parametri

  • resolutionPolicy
    Criteri di risoluzione dei conflitti da utilizzare quando le modifiche vengono applicate da questo metodo.
  • sourceChanges
    Batch di modifiche del provider di origine da applicare in locale.
  • changeDataRetriever
    Oggetto che può essere utilizzato per recuperare i dati di modifica. Può essere un oggetto IChangeDataRetriever o un oggetto specifico del provider.
  • syncCallbacks
    Oggetto che riceve notifiche degli eventi durante l'applicazione di modifiche.
  • sessionStatistics
    Registra le statistiche relative alle modifiche. Per un provider che utilizza l'applicazione personalizzata delle modifiche, è necessario aggiornare questo oggetto con i risultati dell'applicazione delle modifiche.

Osservazioni

Quando una modifica di origine contiene modifiche delle unità di modifica, il provider di destinazione deve determinare quali versioni delle unità di modifica, se disponibili, includere nel batch di versioni di destinazione inviato all'oggetto di applicazione modifiche. La decisione dipende dal tipo di modifica del provider di origine e dall'eventuale contrassegno di eliminazione presente sull'elemento nella replica di destinazione. Per ulteriori informazioni, vedere Sincronizzazione delle unità di modifica.

Esempio

Nell'esempio seguente viene acquisita la versione di destinazione di tutti gli elementi nel batch di modifiche e viene creato un oggetto NotifyingChangeApplier, utilizzato per gestire il rilevamento dei conflitti e l'applicazione di modifiche.

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

Nell'esempio seguente viene illustrato il metodo GetLocalVersions chiamato nell'esempio precedente. In questo caso vengono enumerate le modifiche nel batch di modifiche di origine e viene creato un elenco di versioni di destinazione.

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

Vedere anche

Riferimento

Classe KnowledgeSyncProvider
Membri KnowledgeSyncProvider
Spazio dei nomi Microsoft.Synchronization