共用方式為


ReplicaMetadata.GetFilteredChangeBatch 方法

在衍生類別中覆寫時,會取得變更批次,其中包含目的地提供者之指定知識內未包含而且指定之篩選所接受之項目的項目中繼資料。

命名空間: Microsoft.Synchronization.MetadataStorage
組件: Microsoft.Synchronization.MetadataStorage (在 microsoft.synchronization.metadatastorage.dll)

語法

'宣告
Public MustOverride Function GetFilteredChangeBatch ( _
    batchSize As UInteger, _
    destinationKnowledge As SyncKnowledge, _
    filterInfo As FilterInfo, _
    filterCallback As ItemFilterCallback _
) As ChangeBatch
'用途
Dim instance As ReplicaMetadata
Dim batchSize As UInteger
Dim destinationKnowledge As SyncKnowledge
Dim filterInfo As FilterInfo
Dim filterCallback As ItemFilterCallback
Dim returnValue As ChangeBatch

returnValue = instance.GetFilteredChangeBatch(batchSize, destinationKnowledge, filterInfo, filterCallback)
public abstract ChangeBatch GetFilteredChangeBatch (
    uint batchSize,
    SyncKnowledge destinationKnowledge,
    FilterInfo filterInfo,
    ItemFilterCallback filterCallback
)
public:
virtual ChangeBatch^ GetFilteredChangeBatch (
    unsigned int batchSize, 
    SyncKnowledge^ destinationKnowledge, 
    FilterInfo^ filterInfo, 
    ItemFilterCallback^ filterCallback
) abstract
public abstract ChangeBatch GetFilteredChangeBatch (
    UInt32 batchSize, 
    SyncKnowledge destinationKnowledge, 
    FilterInfo filterInfo, 
    ItemFilterCallback filterCallback
)
public abstract function GetFilteredChangeBatch (
    batchSize : uint, 
    destinationKnowledge : SyncKnowledge, 
    filterInfo : FilterInfo, 
    filterCallback : ItemFilterCallback
) : ChangeBatch

參數

  • batchSize
    要建立之批次的大小。
  • destinationKnowledge
    目的地提供者的知識。
  • filterInfo
    控制此變更批次要包含哪些項目之篩選的相關資訊。
  • filterCallback
    所呼叫的委派,可用來判斷是否應該將此項目加入批次中。

傳回值

變更批次,其中包含目的地提供者之指定知識內未包含而且指定之篩選所接受之項目的項目中繼資料。

例外

例外狀況型別 條件

ObjectDisposedException

此物件已被處置,或是未正確初始化。

ArgumentOutOfRangeException

batchSize 是 0。

ArgumentNullException

destinationKnowledge 是 null 參考 (在 Visual Basic 中為 Nothing) 或 filterInfo 是 null 參考 (在 Visual Basic 中為 Nothing)。

備註

已經指定篩選的同步處理時,這個方法可協助同步處理提供者實作它的 GetChangeBatch 方法。

在每一個項目加入至批次之前,將會呼叫 filterCallback 委派。如果此委派傳回 true,此項目會加入批次中,否則就不會加入。

當提供者呼叫這個方法之前,他們必須先確定中繼資料存放區內的版本可反映所有的本機變更,包括刪除在內。這是透過明確的中繼資料維護通過來完成,以便列舉項目及更新項目的中繼資料。

透過 SqlMetadataStore 取得之這個類別的實作,會依照全域識別碼順序將變更加入到變更批次。

當沒有其他變更要傳送時,透過 SqlMetadataStore 取得之這個類別的實作會在傳回的變更批次上將 IsLastBatch 設定為 true

實作器注意事項: 為了幫助使用全域識別碼順序且能夠使用範圍的提供者,應該要列舉變更,並依照全域識別碼順序將變更加入到變更批次。傳回之變更批次內的第一個變更會開始新的範圍。 如果這個批次之後沒有其他變更要傳送,必須在傳回的變更批次上將 IsLastBatch 設定為 true,否則 Sync Framework 將會再次呼叫 GetChangeBatch 來擷取其他變更批次。

範例

下列程式碼範例會建立一個 ItemListFilterInfo 物件,並且使用它及 ReplicaMetadata.ItemFilterCallback 的實作來擷取篩選變更批次。ReplicaMetadata.ItemFilterCallback 的實作也包含在內。

Public Overrides Function GetChangeBatch(ByVal batchSize As UInteger, ByVal destinationKnowledge As SyncKnowledge, ByRef changeDataRetriever As Object) As ChangeBatch
    ' Return this object as the IChangeDataRetriever object that is called to retrieve item data.
    changeDataRetriever = Me

    ' Use the metadata storage service to get a batch of changes.
    Dim retrievedBatch As ChangeBatch
    If _isFiltered Then
        ' If a filter is set, get a filtered change batch from the metadata storage service.
        ' The BirthdateFilterCallback method indicates whether an item passes the filter.
        Dim filterInfo As New ItemListFilterInfo(IdFormats)
        retrievedBatch = _ContactStore.ContactReplicaMetadata.GetFilteredChangeBatch(batchSize, destinationKnowledge, filterInfo, AddressOf BirthdateFilterCallback)
    Else
        retrievedBatch = _ContactStore.ContactReplicaMetadata.GetChangeBatch(batchSize, destinationKnowledge)
    End If

    Return retrievedBatch
End Function
Public Function BirthdateFilterCallback(ByVal itemMeta As ItemMetadata) As Boolean
    ' An item passes the filter only if its birthdate field is less than the maximum birthdate
    ' specified by the filter.
    Return (_ContactStore.ContactList(itemMeta.GlobalId).Birthdate < _maxBirthdateFilter)
End Function
public override ChangeBatch GetChangeBatch(uint batchSize, SyncKnowledge destinationKnowledge, out object changeDataRetriever)
{
    // Return this object as the IChangeDataRetriever object that is called to retrieve item data.
    changeDataRetriever = this;

    // Use the metadata storage service to get a batch of changes.
    ChangeBatch retrievedBatch;
    if (_isFiltered)
    {
        // If a filter is set, get a filtered change batch from the metadata storage service.
        // The BirthdateFilterCallback method indicates whether an item passes the filter.
        ItemListFilterInfo filterInfo = new ItemListFilterInfo(IdFormats);
        retrievedBatch = _ContactStore.ContactReplicaMetadata.GetFilteredChangeBatch(batchSize, destinationKnowledge,
            filterInfo, BirthdateFilterCallback);
    }
    else
    {
        retrievedBatch = _ContactStore.ContactReplicaMetadata.GetChangeBatch(batchSize, destinationKnowledge);
    }

    return retrievedBatch;
}
public bool BirthdateFilterCallback(ItemMetadata itemMeta)
{
    // An item passes the filter only if its birthdate field is less than the maximum birthdate
    // specified by the filter.
    return (_ContactStore.ContactList[itemMeta.GlobalId].Birthdate < _maxBirthdateFilter);
}

請參閱

參考

ReplicaMetadata 類別
ReplicaMetadata 成員
Microsoft.Synchronization.MetadataStorage 命名空間