다음을 통해 공유


SimpleSyncProvider.UpdateItem 메서드

파생 클래스에서 재정의되면 대상 저장소의 항목을 업데이트하기 위해 Sync Framework Runtime에서 호출됩니다.

네임스페이스: Microsoft.Synchronization.SimpleProviders
어셈블리: microsoft.synchronization.simpleproviders.dll의 Microsoft.Synchronization.SimpleProviders

구문

‘선언
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
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.

매개 변수

  • itemData
    공급자별 고유 형식의 항목 데이터입니다.
  • changeUnitsToUpdate
    항목에 대해 업데이트할 변경 단위가 포함된 SyncId 개체입니다. 변경 단위가 지정되지 않은 경우에는 매개 변수가 null(비어 있지 않음)이어야 합니다.
  • keyAndExpectedVersion
    업데이트할 항목의 키 및 예상 버전 속성입니다. 공급자는 대상의 항목 버전이 keyAndExpectedVersion에서 찾은 값과 일치하는지 확인하기 위해 낙관적 동시성 검사를 수행해야 합니다. 이 검사가 실패할 경우 공급자는 RecoverableErrorReportingContext 개체를 사용하여 복구할 수 있는 오류를 보고해야 합니다.
  • recoverableErrorReportingContext
    항목을 업데이트하려는 동안 발생하는 복구할 수 있는 오류를 보고하는 데 사용되는 RecoverableErrorReportingContext 개체입니다.
  • keyAndUpdatedVersion
    업데이트된 항목의 키 및 업데이트된 버전 속성을 반환합니다. 반환 값이 올바르지 않으면 Sync Framework Runtime에서 세션을 끝내는 ArgumentOutOfRangeException을 발생시킵니다.
  • commitKnowledgeAfterThisItem
    지정된 항목에 대한 처리 작업이 완료된 후에 Sync Framework Runtime에서 메타데이터 저장소에 정보를 커밋할지 여부를 반환합니다.

주의

Sync Framework에서 원본의 변경 내용을 검색하고 로드한 후 이러한 변경 내용 및 해당 메타데이터 변경 내용을 대상 복제본에 적용해야 합니다. 대상에 있는 메타데이터 변경 내용은 Sync Framework에서 처리되지만 데이터 변경 내용 적용은 저장소 관련 작업이므로 DeleteItem, InsertItemUpdateItem 메서드를 구현하여 처리됩니다.

예제

다음 코드 예제에서는 메모리 내 샘플 데이터 저장소에 업데이트를 적용하는 이 메서드의 구현을 보여 줍니다. ItemTransfer는 원본에서 변경 내용을 로드하여 대상에 적용할 때 사용되는 간단한 전송 메커니즘입니다. 전체 응용 프로그램의 맥락에서 이 코드를 보려면 Sync Framework SDK 및 Code Gallery에서 사용할 수 있는 "Sync101 using Simple Sync Provider" 응용 프로그램을 참조하십시오.

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

참고 항목

참조

SimpleSyncProvider 클래스
SimpleSyncProvider 멤버
Microsoft.Synchronization.SimpleProviders 네임스페이스