SimpleSyncProvider.UpdateItem Método

Cuando se invalida en una clase derivada, lo llama el tiempo de ejecución de Sync Framework para actualizar un elemento en el almacén de destino.

Espacio de nombres: Microsoft.Synchronization.SimpleProviders
Ensamblado: Microsoft.Synchronization.SimpleProviders (en microsoft.synchronization.simpleproviders.dll)

Sintaxis

'Declaración
Public MustOverride Sub UpdateItem ( _
    itemData As Object, _
    changeUnitsToUpdate As IEnumerable(Of SyncId), _
    keyAndExpectedVersion As ItemFieldDictionary, _
    recoverableErrorReportingContext As RecoverableErrorReportingContext, _
    <OutAttribute> ByRef keyAndUpdatedVersion As ItemFieldDictionary, _
    <OutAttribute> ByRef commitKnowledgeAfterThisItem As Boolean _
)
'Uso
Dim instance As SimpleSyncProvider
Dim itemData As Object
Dim changeUnitsToUpdate As IEnumerable(Of SyncId)
Dim keyAndExpectedVersion As ItemFieldDictionary
Dim recoverableErrorReportingContext As RecoverableErrorReportingContext
Dim keyAndUpdatedVersion As ItemFieldDictionary
Dim commitKnowledgeAfterThisItem As Boolean

instance.UpdateItem(itemData, changeUnitsToUpdate, keyAndExpectedVersion, recoverableErrorReportingContext, keyAndUpdatedVersion, commitKnowledgeAfterThisItem)
public abstract void UpdateItem (
    Object itemData,
    IEnumerable<SyncId> changeUnitsToUpdate,
    ItemFieldDictionary keyAndExpectedVersion,
    RecoverableErrorReportingContext recoverableErrorReportingContext,
    out ItemFieldDictionary keyAndUpdatedVersion,
    out bool commitKnowledgeAfterThisItem
)
public:
virtual void UpdateItem (
    Object^ itemData, 
    IEnumerable<SyncId^>^ changeUnitsToUpdate, 
    ItemFieldDictionary^ keyAndExpectedVersion, 
    RecoverableErrorReportingContext^ recoverableErrorReportingContext, 
    [OutAttribute] ItemFieldDictionary^% keyAndUpdatedVersion, 
    [OutAttribute] bool% commitKnowledgeAfterThisItem
) abstract
public abstract void UpdateItem (
    Object itemData, 
    IEnumerable<SyncId> changeUnitsToUpdate, 
    ItemFieldDictionary keyAndExpectedVersion, 
    RecoverableErrorReportingContext recoverableErrorReportingContext, 
    /** @attribute OutAttribute() */ /** @ref */ ItemFieldDictionary keyAndUpdatedVersion, 
    /** @attribute OutAttribute() */ /** @ref */ boolean commitKnowledgeAfterThisItem
)
JScript does not support passing value-type arguments by reference.

Parámetros

  • itemData
    Datos para el elemento en el formato específico del proveedor.
  • changeUnitsToUpdate
    Objeto SyncId que contiene las unidades de cambio que se deben actualizar para un elemento. El parámetro debe ser nulo (no vacío) si no se especifica ninguna unidad de cambio.
  • keyAndExpectedVersion
    Propiedades de clave y de versión esperada del elemento que se va a actualizar. El proveedor debe realizar una comprobación de simultaneidad optimista para comprobar que la versión del elemento del destino se corresponde con los valores de keyAndExpectedVersion. Si se produce un error de la comprobación, el proveedor debe notificar un error recuperable utilizando un objeto RecoverableErrorReportingContext.
  • recoverableErrorReportingContext
    Objeto RecoverableErrorReportingContext que se utiliza para notificar errores recuperables que se producen al intentar actualizar un elemento.
  • keyAndUpdatedVersion
    Devuelve las propiedades de clave y de versión actualizada de los elementos actualizados. Si el valor devuelto no es válido, el tiempo de ejecución de Sync Framework genera ArgumentOutOfRangeException, que finaliza la sesión.
  • commitKnowledgeAfterThisItem
    Devuelve información sobre si el tiempo de ejecución de Sync Framework debe confirmar el conocimiento en el almacén de metadatos cuando se completa el procesamiento del elemento especificado.

Notas

Una vez que Sync Framework detecta y carga los cambios del origen, debe aplicar estos cambios y los cambios de los metadatos correspondientes a la réplica de destino. Sync Framework administra los cambios de metadatos en el destino, pero la aplicación de los cambios realizados en los datos es específica de cada almacén y se administra mediante la implementación de los métodos siguientes DeleteItem, InsertItem y UpdateItem.

Ejemplo

El siguiente ejemplo de código muestra una implementación de este método que aplica actualizaciones a un almacén de datos de ejemplo en memoria. ItemTransfer es un mecanismo de trasferencia simple que se utiliza cuando se cargan cambios desde el origen y se aplican al destino. Para consultar este código en el contexto de una aplicación completa, vea la aplicación "Sync101 using Simple Sync Provider" que está disponible en Sync Framework SDK y en Code Gallery.

public override void UpdateItem(object itemData, 
    IEnumerable<SyncId> changeUnitsToUpdate, 
    ItemFieldDictionary keyAndExpectedVersion, 
    RecoverableErrorReportingContext recoverableErrorReportingContext, 
    out ItemFieldDictionary keyAndUpdatedVersion, 
    out bool commitKnowledgeAfterThisItem)
{
    ItemTransfer transfer = (ItemTransfer)itemData;
    ItemData dataCopy = new ItemData(transfer.ItemData);
    
    IDictionary<uint, ItemField> expectedFields = (IDictionary<uint, ItemField>)keyAndExpectedVersion;
    ulong idToUpdate = (ulong)expectedFields[CUSTOM_FIELD_ID].Value;

    if (_store.Contains(idToUpdate))
    {
        ulong timeStamp = _store.UpdateItem(idToUpdate, dataCopy);
        keyAndUpdatedVersion = _store.CreateItemFieldDictionary(transfer.Id);
    }
    else
    {
        // If the item to update does not exist, record an error on this change and 
        // continue with the rest of the session.
        recoverableErrorReportingContext.RecordRecoverableErrorForChange(new RecoverableErrorData(new Exception("Item not found in the store")));
        keyAndUpdatedVersion = null;
    }
    commitKnowledgeAfterThisItem = false;
}
Public Overrides Sub UpdateItem(ByVal itemData As Object, ByVal changeUnitsToUpdate As IEnumerable(Of SyncId), ByVal keyAndExpectedVersion As ItemFieldDictionary, ByVal recoverableErrorReportingContext As RecoverableErrorReportingContext, ByRef keyAndUpdatedVersion As ItemFieldDictionary, ByRef commitKnowledgeAfterThisItem As Boolean)
    Dim transfer As ItemTransfer = DirectCast(itemData, ItemTransfer)
    Dim dataCopy As New ItemData(transfer.ItemData)

    Dim expectedFields As IDictionary(Of UInteger, ItemField) = DirectCast(keyAndExpectedVersion, IDictionary(Of UInteger, ItemField))
    Dim idToUpdate As ULong = CULng(expectedFields(CUSTOM_FIELD_ID).Value)

    If _store.Contains(idToUpdate) Then
        Dim timeStamp As ULong = _store.UpdateItem(idToUpdate, dataCopy)
        keyAndUpdatedVersion = _store.CreateItemFieldDictionary(transfer.Id)
    Else
        ' If the item to update does not exist, record an error on this change and 
        ' continue with the rest of the session. 
        recoverableErrorReportingContext.RecordRecoverableErrorForChange(New RecoverableErrorData(New Exception("Item not found in the store")))
        keyAndUpdatedVersion = Nothing
    End If
    commitKnowledgeAfterThisItem = False
End Sub

Vea también

Referencia

SimpleSyncProvider Clase
SimpleSyncProvider Miembros
Microsoft.Synchronization.SimpleProviders Espacio de nombres