Метод UpdateItem
При переопределении в производном классе вызывается средой выполнения Sync Framework для обновления элемента в хранилище назначения.
Пространство имен: Microsoft.Synchronization.SimpleProviders
Сборка: Microsoft.Synchronization.SimpleProviders (в Microsoft.Synchronization.SimpleProviders.dll)
Синтаксис
'Декларация
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 _
)
'Применение
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
abstract UpdateItem :
itemData:Object *
changeUnitsToUpdate:IEnumerable<SyncId> *
keyAndExpectedVersion:ItemFieldDictionary *
recoverableErrorReportingContext:RecoverableErrorReportingContext *
keyAndUpdatedVersion:ItemFieldDictionary byref *
commitKnowledgeAfterThisItem:bool byref -> unit
public abstract function UpdateItem(
itemData : Object,
changeUnitsToUpdate : IEnumerable<SyncId>,
keyAndExpectedVersion : ItemFieldDictionary,
recoverableErrorReportingContext : RecoverableErrorReportingContext,
keyAndUpdatedVersion : ItemFieldDictionary,
commitKnowledgeAfterThisItem : boolean
)
Параметры
- itemData
Тип System. . :: . .Object
Данные для элемента в формате, определяемом поставщиком.
- changeUnitsToUpdate
Тип System.Collections.Generic. . :: . .IEnumerable< (Of < ( <'SyncId> ) > ) >
Объект SyncId, содержащий базовые единицы, обновляемые для элемента. Если базовая единица указана, то параметр должен быть равен null (не пусто).
- keyAndExpectedVersion
Тип Microsoft.Synchronization.SimpleProviders. . :: . .ItemFieldDictionary
Свойства ключа и ожидаемой версии обновляемого элемента. Поставщик должен выполнить проверку оптимистичного параллелизма, чтобы проверить, что версия элемента в назначении соответствует значениям, найденным в параметре keyAndExpectedVersion. Если проверка не пройдена, то поставщик должен вернуть устранимую ошибку через объект RecoverableErrorReportingContext.
- recoverableErrorReportingContext
Тип Microsoft.Synchronization.SimpleProviders. . :: . .RecoverableErrorReportingContext
Объект RecoverableErrorReportingContext, который используется для возврата устранимых ошибок, возникших во время попыток обновить элемент.
- keyAndUpdatedVersion
Тип Microsoft.Synchronization.SimpleProviders. . :: . .ItemFieldDictionary%
Возвращает обновленные свойства ключа и версии для обновляемых элементов. Если возвращаемое значение неверно, то среда выполнения Sync Framework вызывает исключение ArgumentOutOfRangeException, которое завершает сеанс.
- commitKnowledgeAfterThisItem
Тип System. . :: . .Boolean%
Возвращает значение, определяющее, должна ли среда выполнения платформы Sync Framework осуществлять фиксацию набора знаний в хранилище метаданных после завершения обработки указанного элемента.
Замечания
После того как Sync Framework обнаруживает и загружает изменения из источника, эти изменения и соответствующие изменения метаданных необходимо применить в конечной реплике. Изменения метаданных на стороне назначения обрабатываются платформой Sync Framework, однако применение изменений данных зависит от хранилища и выполняется в реализации следующих методов: DeleteItem, InsertItem и UpdateItem.
Примеры
В следующем примере кода показана реализация этого метода, который применяет операции обновления к хранилищу образца данных в памяти. ItemTransfer — простой механизм передачи, который используется, если изменения загружаются из источника и применяются в назначении. Чтобы просмотреть этот код в контексте полного приложения, см. приложение "Sync101 using Simple Sync Provider", которое можно найти в пакете Sync Framework SDK или на странице 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