Compartir a través de


ProcessChangeBatch Método

Cuando se invalida en una clase derivada, procesa un conjunto de cambios detectando conflictos y aplicando cambios al almacén de elementos.

Espacio de nombres:  Microsoft.Synchronization
Ensamblado:  Microsoft.Synchronization (en Microsoft.Synchronization.dll)

Sintaxis

'Declaración
Public MustOverride Sub ProcessChangeBatch ( _
    resolutionPolicy As ConflictResolutionPolicy, _
    sourceChanges As ChangeBatch, _
    changeDataRetriever As Object, _
    syncCallbacks As SyncCallbacks, _
    sessionStatistics As SyncSessionStatistics _
)
'Uso
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
abstract ProcessChangeBatch : 
        resolutionPolicy:ConflictResolutionPolicy * 
        sourceChanges:ChangeBatch * 
        changeDataRetriever:Object * 
        syncCallbacks:SyncCallbacks * 
        sessionStatistics:SyncSessionStatistics -> unit 
public abstract function ProcessChangeBatch(
    resolutionPolicy : ConflictResolutionPolicy, 
    sourceChanges : ChangeBatch, 
    changeDataRetriever : Object, 
    syncCallbacks : SyncCallbacks, 
    sessionStatistics : SyncSessionStatistics
)

Parámetros

Notas

Cuando un cambio de origen contiene cambios de unidades de cambio, el proveedor de destino debe determinar qué versiones de las unidades de cambio, si las hay, se han de incluir en el lote de versiones de destino que se envía al aplicador de cambios. Esta decisión depende del tipo de cambio del proveedor de origen y de si el elemento se ha marcado como eliminado en la réplica de destino. Para obtener más información, vea Sincronizar las unidades de cambio.

Ejemplos

En el ejemplo siguiente se obtiene la versión de destino de todos los elementos del lote de cambios, se crea un objeto NotifyingChangeApplier y se utiliza para controlar la detección de conflictos y la aplicación de cambios.

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

En el ejemplo siguiente se muestra el método GetLocalVersions al que se llama en el ejemplo anterior. En este ejemplo se enumeran los cambios del lote de cambios de origen y se crea una lista de versiones de destino.

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

Vea también

Referencia

KnowledgeSyncProvider Clase

KnowledgeSyncProvider Miembros

Microsoft.Synchronization Espacio de nombres