Freigeben über


SimpleSyncProvider.UpdateItem-Methode

Wird beim Überschreiben in einer abgeleiteten Klasse von der Sync Framework-Laufzeit aufgerufen, um ein Element im Zielspeicher zu aktualisieren.

Namespace: Microsoft.Synchronization.SimpleProviders
Assembly: Microsoft.Synchronization.SimpleProviders (in microsoft.synchronization.simpleproviders.dll)

Syntax

'Declaration
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 _
)
'Usage
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.

Parameter

  • itemData
    Daten für das Element im anbieterspezifischen Format.
  • changeUnitsToUpdate
    Ein SyncId-Objekt, das die Änderungseinheiten enthält, die für ein Element aktualisiert werden sollen. Der Parameter sollte NULL (nicht leer) sein, wenn keine Änderungseinheiten angegeben sind.
  • keyAndExpectedVersion
    Der Schlüssel und die erwarteten Versionseigenschaften des Elements, das aktualisiert werden soll. Der Anbieter muss eine vollständige Parallelitätsprüfung ausführen, um sicherzustellen, dass die Version des Elements am Ziel den in keyAndExpectedVersion gefundenen Werten entspricht. Wenn diese Überprüfung fehlschlägt, sollte der Anbieter mit einem RecoverableErrorReportingContext-Objekt einen behebbaren Fehler melden.
  • recoverableErrorReportingContext
    Ein RecoverableErrorReportingContext-Objekt, das zur Meldung von behebbaren Fehlern verwendet wird, die während der Aktualisierungsversuche eines Elements auftreten.
  • keyAndUpdatedVersion
    Gibt den Schlüssel und die aktualisierten Versionseigenschaften der aktualisierten Elemente zurück. Wenn der Rückgabewert nicht gültig ist, löst die Sync Framework-Laufzeit ArgumentOutOfRangeException aus, wodurch die Sitzung beendet wird.
  • commitKnowledgeAfterThisItem
    Gibt zurück, ob die Sync Framework-Laufzeit Wissen an den Metadatenspeicher übergeben soll, nachdem die Verarbeitung für das angegebene Element abgeschlossen wurde.

Hinweise

Nachdem Sync Framework Änderungen der Quelle erkannt und geladen hat, müssen diese Änderungen sowie entsprechende Metadatenänderungen für das Zielreplikat übernommen werden. Metadatenänderungen am Ziel werden von Sync Framework behandelt. Dagegen ist das Übernehmen von Datenänderungen speicherspezifisch und wird durch Implementieren der folgenden Methoden behandelt: DeleteItem, InsertItem und UpdateItem.

Beispiel

Im folgenden Codebeispiel wird eine Implementierung dieser Methode gezeigt, die Aktualisierungen auf einen Beispieldatenspeicher im Arbeitsspeicher anwendet. ItemTransfer ist ein einfacher Übertragungsmechanismus, der verwendet wird, wenn Änderungen von der Quelle geladen und auf das Ziel angewendet werden. In der "Sync101 using Simple Sync Provider"-Anwendung, die im Sync Framework SDK und in der Code Gallery verfügbar ist, finden Sie diesen Code im Kontext einer vollständigen Anwendung.

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

Siehe auch

Verweis

SimpleSyncProvider-Klasse
SimpleSyncProvider-Member
Microsoft.Synchronization.SimpleProviders-Namespace