Méthode SimpleSyncProvider.UpdateItem
En cas de substitution dans une classe dérivée, appelé par le runtime de Sync Framework pour mettre à jour un élément dans le magasin de destination.
Espace de noms: Microsoft.Synchronization.SimpleProviders
Assembly: Microsoft.Synchronization.SimpleProviders (dans microsoft.synchronization.simpleproviders.dll)
Syntaxe
'Déclaration
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 _
)
'Utilisation
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.
Paramètres
- itemData
Données de l'élément au format spécifique au fournisseur.
- changeUnitsToUpdate
Objet SyncId qui contient les unités de modification à mettre à jour pour un élément. Le paramètre doit être Null (non vide) si aucune unité de modification n'est spécifiée.
- keyAndExpectedVersion
Propriétés de clé et de version attendue de l'élément à mettre à jour. Le fournisseur doit effectuer un contrôle d'accès concurrentiel optimiste pour vérifier que la version de l'élément sur la destination correspond aux valeurs disponibles dans keyAndExpectedVersion. Si ce contrôle échoue, le fournisseur doit signaler une erreur récupérable à l'aide d'un objet RecoverableErrorReportingContext.
- recoverableErrorReportingContext
Objet RecoverableErrorReportingContext utilisé pour signaler des erreurs récupérables qui se produisent pendant les tentatives de mise à jour d'un élément.
- keyAndUpdatedVersion
Retourne les propriétés de clé et de version mise à jour des éléments mis à jour. Si la valeur de retour n'est pas valide, le runtime de Sync Framework lève une exception ArgumentOutOfRangeException qui met fin à la session.
- commitKnowledgeAfterThisItem
Indique en retour si Sync Framework Runtime doit valider la connaissance dans le magasin des métadonnées une fois le traitement terminé pour l'élément spécifié.
Notes
Après avoir détecté et chargé les modifications de la source, Sync Framework doit appliquer ces modifications et les modifications de métadonnées correspondantes au réplica de destination. Les modifications de métadonnées sur la destination sont gérées par Sync Framework, mais l'application des modifications de données est spécifique au magasin et gérée en implémentant les méthodes suivantes : DeleteItem, InsertItem et UpdateItem.
Exemple
L'exemple de code suivant affiche une implémentation de cette méthode qui applique des mises à jour au magasin d'exemples de données en mémoire. ItemTransfer
est un mécanisme de transfert simple utilisé lorsque les modifications sont chargées à partir de la source et appliquées à la destination. Pour consulter ce code dans le contexte d'une application complète, consultez l'application "Sync101 using Simple Sync Provider"
qui est disponible dans le Kit de développement logiciel (SDK) Sync Framework et de 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
Voir aussi
Référence
Classe SimpleSyncProvider
Membres SimpleSyncProvider
Espace de noms Microsoft.Synchronization.SimpleProviders