KnowledgeSyncProvider.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
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
)

Parámetros

  • resolutionPolicy
    Directiva de resolución de conflictos que se utiliza cuando este método aplica cambios.
  • sourceChanges
    Lote de cambios del proveedor de origen que se va a aplicar localmente.
  • changeDataRetriever
    Objeto que se puede usar para recuperar datos de cambio. Puede ser un objeto IChangeDataRetriever o un objeto específico del proveedor.
  • syncCallbacks
    Objeto que recibe notificaciones de eventos durante la aplicación de cambios.
  • sessionStatistics
    Estadísticas de seguimientos de cambios. Para un proveedor que usa una aplicación de cambios personalizada, este objeto se debe actualizar con los resultados de la aplicación de cambios.

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.

Ejemplo

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