KnowledgeSyncProvider.GetChangeBatch Método
Cuando se invalida en una clase derivada, obtiene un lote de cambios que contiene los metadatos del elemento para los elementos no contenidos en el conocimiento especificado del proveedor de destino.
Espacio de nombres: Microsoft.Synchronization
Ensamblado: Microsoft.Synchronization (en microsoft.synchronization.dll)
Sintaxis
'Declaración
Public MustOverride Function GetChangeBatch ( _
batchSize As UInteger, _
destinationKnowledge As SyncKnowledge, _
<OutAttribute> ByRef changeDataRetriever As Object _
) As ChangeBatch
'Uso
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.
Parámetros
- batchSize
Número de cambios que se van a incluir en el lote de cambios.
- destinationKnowledge
Conocimiento del proveedor de destino. Este conocimiento se debe asignar llamando al método MapRemoteKnowledgeToLocal en el conocimiento de origen antes de que se pueda usar para enumerar cambios.
- changeDataRetriever
Devuelve un objeto que se puede usar para recuperar datos de cambio. Puede ser un objeto IChangeDataRetriever o un objeto específico del proveedor.
Valor devuelto
Lote de cambios que contiene los metadatos del elemento para los elementos no contenidos en el conocimiento especificado del proveedor de destino. No puede ser un valor NULL.
Notas
El mismo cambio no aparecerá en varios lotes.
Si queda un número de cambios menor que el especificado por batchSize, se devolverá un lote menor.
Si se llama a este método cuando no queda ningún cambio, se produce una excepción InvalidOperationException.
Notas a los implementadores: Si no hay más cambios para enviar después de este lote, la propiedad IsLastBatch debe establecerse en true en el lote de cambios devuelto. En caso contrario, Sync Framework llama de nuevo a GetChangeBatch para recuperar otro lote de cambios.
Ejemplo
En el ejemplo siguiente se obtiene un lote de cambios del almacén de metadatos.
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);
}
En el ejemplo siguiente se muestra el método GetChangeBatch
al que se llama en el ejemplo anterior. En este ejemplo se crea un objeto ChangeBatch y se inicia un grupo ordenado. Se agrega un elemento al grupo ordenado cuando el elemento no está en el conocimiento de destino.
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;
}
Vea también
Referencia
KnowledgeSyncProvider Clase
KnowledgeSyncProvider Miembros
Microsoft.Synchronization Espacio de nombres