다음을 통해 공유


KnowledgeSyncProvider.ProcessChangeBatch 메서드

파생 클래스에서 재정의되면 충돌을 검색하고 항목 저장소에 변경 내용을 적용함으로써 변경 내용 집합을 처리합니다.

네임스페이스: Microsoft.Synchronization
어셈블리: microsoft.synchronization.dll의 Microsoft.Synchronization

구문

‘선언
Public MustOverride Sub ProcessChangeBatch ( _
    resolutionPolicy As ConflictResolutionPolicy, _
    sourceChanges As ChangeBatch, _
    changeDataRetriever As Object, _
    syncCallbacks As SyncCallbacks, _
    sessionStatistics As SyncSessionStatistics _
)
‘사용 방법
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
)

매개 변수

  • resolutionPolicy
    이 메서드가 변경 내용을 적용할 때 사용할 충돌 해결 정책입니다.
  • sourceChanges
    로컬에 적용할 원본 공급자의 일괄 변경 내용입니다.
  • changeDataRetriever
    변경 내용 데이터를 검색하는 데 사용할 수 있는 개체입니다. IChangeDataRetriever 개체이거나 공급자 관련 개체일 수 있습니다.
  • syncCallbacks
    변경 내용 적용 중에 이벤트 알림을 받는 개체입니다.
  • sessionStatistics
    변경 내용 통계를 추적합니다. 사용자 지정 변경 내용 적용을 사용하는 공급자의 경우 이 개체는 변경 내용 적용 결과로 업데이트되어야 합니다.

주의

원본 변경 내용에 변경 단위의 변경 내용이 포함된 경우 대상 공급자는 변경 적용자에게 보낸 대상 버전의 일괄 처리에 포함할 변경 단위 버전을 결정해야 합니다(변경 단위 버전이 있는 경우). 포함할 변경 단위 버전은 원본 공급자의 변경 내용 유형 및 해당 항목이 대상 복제본에서 삭제된 것으로 표시되는지 여부에 따라 결정됩니다. 자세한 내용은 변경 단위 동기화를 참조하십시오.

예제

다음 예제에서는 일괄 변경 내용에 있는 모든 항목의 대상 버전을 가져오고 NotifyingChangeApplier 개체를 만들어 충돌 검색 및 변경 내용 적용을 처리하는 데 사용합니다.

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

다음 예제에서는 이전 예제에서 호출되는 GetLocalVersions 메서드를 보여 줍니다. 이 예제에서는 원본 일괄 변경 내용에 있는 변경 내용을 열거하고 대상 버전의 목록을 만듭니다.

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

참고 항목

참조

KnowledgeSyncProvider 클래스
KnowledgeSyncProvider 멤버
Microsoft.Synchronization 네임스페이스