Metodo KnowledgeSyncProvider.GetChangeBatch
Quando sottoposto a override in una classe derivata, ottiene un batch di modifiche contenente i metadati per gli elementi non contenuti nella conoscenza specificata del provider di destinazione.
Spazio dei nomi: Microsoft.Synchronization
Assembly: Microsoft.Synchronization (in microsoft.synchronization.dll)
Sintassi
'Dichiarazione
Public MustOverride Function GetChangeBatch ( _
batchSize As UInteger, _
destinationKnowledge As SyncKnowledge, _
<OutAttribute> ByRef changeDataRetriever As Object _
) As ChangeBatch
'Utilizzo
Dim instance As KnowledgeSyncProvider
Dim batchSize As UInteger
Dim destinationKnowledge As SyncKnowledge
Dim changeDataRetriever As Object
Dim returnValue As ChangeBatch
returnValue = instance.GetChangeBatch(batchSize, destinationKnowledge, changeDataRetriever)
public abstract ChangeBatch GetChangeBatch (
uint batchSize,
SyncKnowledge destinationKnowledge,
out Object changeDataRetriever
)
public:
virtual ChangeBatch^ GetChangeBatch (
unsigned int batchSize,
SyncKnowledge^ destinationKnowledge,
[OutAttribute] Object^% changeDataRetriever
) abstract
public abstract ChangeBatch GetChangeBatch (
UInt32 batchSize,
SyncKnowledge destinationKnowledge,
/** @attribute OutAttribute() */ /** @ref */ Object changeDataRetriever
)
JScript does not support passing value-type arguments by reference.
Parametri
- batchSize
Numero di modifiche da includere nel batch di modifiche.
- destinationKnowledge
Conoscenza del provider di destinazione. È necessario eseguire il mapping di questa conoscenza chiamando MapRemoteKnowledgeToLocal sulla conoscenza di origine prima che possa essere utilizzata per l'enumerazione delle modifiche.
- changeDataRetriever
Restituisce un oggetto che può essere utilizzato per recuperare i dati di modifica. Può essere un oggetto IChangeDataRetriever o un oggetto specifico del provider.
Valore restituito
Batch di modifiche contenente i metadati per gli elementi non contenuti nella conoscenza specificata del provider di destinazione. Non può essere Null.
Osservazioni
La stessa modifica non viene visualizzata in più batch.
Se il numero di modifiche rimanenti è inferiore a quello specificato da batchSize, viene restituito un batch di dimensioni ridotte.
Questo metodo genera InvalidOperationException se viene chiamato quando non rimane alcuna modifica.
Note per gli implementatori: Se non sono disponibili altre modifiche da inviare dopo questo batch, è necessario impostare IsLastBatch su true sul batch di modifiche restituito. In caso contrario, Sync Framework chiama nuovamente GetChangeBatch per recuperare un altro batch di modifiche.
Esempio
Nell'esempio seguente viene acquisito un batch di modifiche dall'archivio dei metadati.
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;
// Call the metadata store to get a batch of changes.
return _itemStore.ContactReplicaMetadata.GetChangeBatch(batchSize, destinationKnowledge);
}
Nell'esempio seguente viene illustrato il metodo GetChangeBatch
chiamato nell'esempio precedente. In questo caso viene creato un oggetto ChangeBatch e viene avviato un gruppo ordinato. Un elemento viene aggiunto al gruppo ordinato quando non è contenuto nella conoscenza di destinazione.
public override ChangeBatch GetChangeBatch(uint batchSize, SyncKnowledge destinationKnowledge)
{
// The destination knowledge must be converted to be compatible with the source replica
// before it can be used.
SyncKnowledge mappedDestKnowledge = _knowledge.MapRemoteKnowledgeToLocal(destinationKnowledge);
// Create a new change batch, initialized by using the current knowledge of the source replica
// and a new ForgottenKnowledge object.
ChangeBatch changeBatch = new ChangeBatch(IdFormats, GetKnowledge(), new ForgottenKnowledge());
// Start a group of changes in the change batch. The group is ordered by item ID.
// _getChangeBatchCurrent is 0 the first time GetChangeBatch is called, and is used to track the
// position in the metadata store for subsequent calls to GetChangeBatch.
changeBatch.BeginOrderedGroup(_items.Values[_getChangeBatchCurrent].GlobalId);
// itemsAdded is incremented each time a change is added to the change batch. When itemsAdded
// is greater than the requested batch size, enumeration stops and the change batch is returned.
int itemsAdded = 0;
ItemMetadata itemMeta;
// Enumerate items and add a change to the change batch if it is not contained in the
// destination knowledge.
// _items is a SortedList that contains ItemMetadata objects that are ordered by item ID.
for (; itemsAdded <= batchSize && _getChangeBatchCurrent < _items.Count; _getChangeBatchCurrent++)
{
itemMeta = _items.Values[_getChangeBatchCurrent];
ChangeKind kind = (itemMeta.IsDeleted) ? ChangeKind.Deleted : ChangeKind.Update;
ItemChange change = new ItemChange(IdFormats, ReplicaId, itemMeta.GlobalId, kind, itemMeta.CreationVersion,
itemMeta.ChangeVersion);
// If the change is not contained in the destination knowledge, add it to the change batch.
if (!mappedDestKnowledge.Contains(change))
{
changeBatch.AddChange(change);
itemsAdded++;
}
}
// End the group of changes in the change batch. Pass the current source knowledge.
changeBatch.EndOrderedGroup(_items.Values[_getChangeBatchCurrent - 1].GlobalId, _knowledge);
// When all items in the metadata store have been enumerated, set this batch as the
// last batch.
if (_getChangeBatchCurrent == _items.Count)
{
changeBatch.SetLastBatch();
}
return changeBatch;
}
Vedere anche
Riferimento
Classe KnowledgeSyncProvider
Membri KnowledgeSyncProvider
Spazio dei nomi Microsoft.Synchronization