GetLocalVersions 方法
在衍生類別中覆寫時,會取得包含此複寫內儲存之項目和變更單位版本的變更批次。這些項目和變更單元對應到從某些其他提供者所傳送變更批次中參考的項目和變更單元。
命名空間: Microsoft.Synchronization.MetadataStorage
組件: Microsoft.Synchronization.MetadataStorage (在 Microsoft.Synchronization.MetadataStorage.dll 中)
語法
'宣告
Public MustOverride Function GetLocalVersions ( _
sourceChanges As ChangeBatch _
) As IEnumerable(Of ItemChange)
'用途
Dim instance As ReplicaMetadata
Dim sourceChanges As ChangeBatch
Dim returnValue As IEnumerable(Of ItemChange)
returnValue = instance.GetLocalVersions(sourceChanges)
public abstract IEnumerable<ItemChange> GetLocalVersions(
ChangeBatch sourceChanges
)
public:
virtual IEnumerable<ItemChange^>^ GetLocalVersions(
ChangeBatch^ sourceChanges
) abstract
abstract GetLocalVersions :
sourceChanges:ChangeBatch -> IEnumerable<ItemChange>
public abstract function GetLocalVersions(
sourceChanges : ChangeBatch
) : IEnumerable<ItemChange>
參數
- sourceChanges
型別:Microsoft.Synchronization. . :: . .ChangeBatch
即將套用到與此複寫有關之項目存放區的另一個提供者所傳送的變更批次。
傳回值
型別:System.Collections.Generic. . :: . .IEnumerable< (Of < ( <'ItemChange> ) > ) >
包含此複寫內所儲存之項目和變更單位版本的變更批次,這些項目和變更單位會對應到變更批次內傳送自某個其他提供者的項目和變更單位。
例外
例外狀況 | 條件 |
---|---|
ObjectDisposedException | 此物件已被處置,或是未正確初始化。 |
ArgumentNullException | sourceChanges 是 null Nothing nullptr unit null 參考 (在 Visual Basic 中為 Nothing) 。 |
備註
這個方法可協助同步處理提供者實作它的 ProcessChangeBatch 方法。
變更套用者會使用這個方法所傳回之變更批次內的版本進行衝突偵測。
實作器注意事項
對於 sourceChanges 中的每一個項目 (包括變更單位項目) 而言,從這個方法傳回的變更批次都必須包含一個項目。如果項目存放區內有項目存在,它的項目必須包含它對於這個複寫的版本資訊。如果項目不存在,它的版本必須設定為 SyncVersion.UnknownVersion,而它的 ItemChange.ChangeKind 屬性必須設定為 UnknownItem。
範例
下列範例會使用 GetLocalVersions 來取得來源變更的目的地版本,並將結果傳遞給 NotifyingChangeApplier..::..ApplyChanges,藉以實作 KnowledgeSyncProvider..::..ProcessChangeBatch:
public override void ProcessChangeBatch(ConflictResolutionPolicy resolutionPolicy, ChangeBatch sourceChanges, object changeDataRetriever, SyncCallbacks syncCallbacks, SyncSessionStatistics sessionStatistics)
{
// Use the metadata storage service to get the local versions of changes received from the source provider.
IEnumerable<ItemChange> localVersions = _ContactStore.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(ContactStore.ContactIdFormatGroup);
changeApplier.ApplyChanges(resolutionPolicy, sourceChanges, (IChangeDataRetriever)changeDataRetriever,
localVersions, _ContactStore.ContactReplicaMetadata.GetKnowledge(),
_ContactStore.ContactReplicaMetadata.GetForgottenKnowledge(), this, _sessionContext, syncCallbacks);
}