Dela via


RecoverableErrorReportingContext.RecordConstraintError Method

Records a constraint error that occurred when attempting to apply a change to an item. Used to describe a local item that is in a constraint conflict with the change.

Namespace:  Microsoft.Synchronization.SimpleProviders
Assembly:  Microsoft.Synchronization.SimpleProviders (in Microsoft.Synchronization.SimpleProviders.dll)

Syntax

'Declaration
Public Sub RecordConstraintError ( _
    conflictingItemKey As ItemFieldDictionary _
)
'Usage
Dim instance As RecoverableErrorReportingContext
Dim conflictingItemKey As ItemFieldDictionary

instance.RecordConstraintError(conflictingItemKey)
public void RecordConstraintError(
    ItemFieldDictionary conflictingItemKey
)
public:
void RecordConstraintError(
    ItemFieldDictionary^ conflictingItemKey
)
member RecordConstraintError : 
        conflictingItemKey:ItemFieldDictionary -> unit 
public function RecordConstraintError(
    conflictingItemKey : ItemFieldDictionary
)

Parameters

Exceptions

Exception Condition
ChangeDeferredByProviderException

The change being applied was deferred by the provider until the next synchronization session as a result of the constraint conflict.

SimpleProviderInvalidOperationException

There were multiple constraint errors, a constraint error was reported on an object that is no longer valid, or the constraint error policy does not allow constraint errors to be recoverable.

Remarks

The change will be reapplied or resolved later in the synchronization session. For more information about constraint conflicts, see Handling Conflicts for Simple Providers.

Examples

The following code example shows an implementation of the InsertItem method that applies inserts to an in-memory sample data store. The method records a constraint error if the insert cannot be applied. To view this code in the context of a complete application, see the "Sync101 using Simple Sync Provider" application that is available in the Sync Framework SDK and from Code Gallery.

public override void InsertItem(object itemData, 
    IEnumerable<SyncId> changeUnitsToCreate,
    RecoverableErrorReportingContext recoverableErrorReportingContext, 
    out ItemFieldDictionary keyAndUpdatedVersion, 
    out bool commitKnowledgeAfterThisItem)
{
    ItemTransfer transfer = (ItemTransfer)itemData;
    ItemData dataCopy = new ItemData(transfer.ItemData);

    // Check for duplicates, and record a constraint error if a duplicate is detected.
    if (!_store.Contains(transfer.Id))
    {
        _store.CreateItem(dataCopy, transfer.Id);
        keyAndUpdatedVersion = _store.CreateItemFieldDictionary(transfer.Id);
    }
    else
    {
        recoverableErrorReportingContext.RecordConstraintError(_store.CreateItemFieldDictionary(transfer.Id));
        keyAndUpdatedVersion = null;
    }
    commitKnowledgeAfterThisItem = false;
}
Public Overrides Sub InsertItem(ByVal itemData As Object, ByVal changeUnitsToCreate As IEnumerable(Of SyncId), 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)

    ' Check for duplicates, and record a constraint error if a duplicate is detected. 
    If Not _store.Contains(transfer.Id) Then
        _store.CreateItem(dataCopy, transfer.Id)
        keyAndUpdatedVersion = _store.CreateItemFieldDictionary(transfer.Id)
    Else
        recoverableErrorReportingContext.RecordConstraintError(_store.CreateItemFieldDictionary(transfer.Id))
        keyAndUpdatedVersion = Nothing
    End If
    commitKnowledgeAfterThisItem = False
End Sub

See Also

Reference

RecoverableErrorReportingContext Class

Microsoft.Synchronization.SimpleProviders Namespace