Freigeben über


SaveChangeWithChangeUnitsContext.RecordConstraintConflictForChangeUnit-Methode

Meldet, dass beim Versuch des Zielanbieters, die Änderung für das Zielreplikat zu übernehmen, ein Einschränkungskonflikt für eine Änderung mit Änderungseinheiten aufgetreten ist.

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

Syntax

'Declaration
Public Sub RecordConstraintConflictForChangeUnit ( _
    changeUnitChange As ChangeUnitChange _
)
'Usage
Dim instance As SaveChangeWithChangeUnitsContext
Dim changeUnitChange As ChangeUnitChange

instance.RecordConstraintConflictForChangeUnit(changeUnitChange)
public void RecordConstraintConflictForChangeUnit (
    ChangeUnitChange changeUnitChange
)
public:
void RecordConstraintConflictForChangeUnit (
    ChangeUnitChange^ changeUnitChange
)
public void RecordConstraintConflictForChangeUnit (
    ChangeUnitChange changeUnitChange
)
public function RecordConstraintConflictForChangeUnit (
    changeUnitChange : ChangeUnitChange
)

Parameter

  • changeUnitChange
    Die Änderungseinheit auf dem Zielreplikat, das mit der zu übernehmenden Änderungseinheit in Konflikt steht.

Ausnahmen

Ausnahmetyp Bedingung

ArgumentNullException

changeUnitChange ist NULL.

ArgumentException

changeUnitChange wird in der anzuwendenden Änderung nicht gefunden.

SyncInvalidOperationException

Für dieses Objekt wurde bereits ein Einschränkungskonflikt oder ein behebbarer Fehler festgelegt.

Hinweise

Ein Einschränkungskonflikt tritt auf, wenn ein Zielanbieter versucht, eine Änderung für das Zielreplikat zu übernehmen, und die Änderung gegen eine Einschränkung des Zielreplikats verstößt. Für Änderungseinheiten bedeutet dies in der Regel, dass die Änderung gegen Geschäftslogik des Zielreplikats verstößt. Ein Beispiel für einen Geschäftslogikkonflikt ist ein Replikat mit geringer Genauigkeit, in dem zwei Änderungseinheiten gespeichert wurden: name und country. Weiterhin kann ein Replikat mit hoher Genauigkeit mit den folgenden drei Änderungseinheiten auftreten: name, state/province und country. Das Replikat mit hoher Genauigkeit enthält die Geschäftslogik, die das Feld state/province anhand des Felds country prüft und die keine Änderungen speichert, die der Überprüfung nicht standhalten. Das Replikat mit niedriger Genauigkeit dient als Quelle und sendet ein Element, für das der Parameter country auf „USA“ festgelegt ist. Der Zielanbieter versucht, die Änderung für das Replikat mit hoher Genauigkeit zu übernehmen, das Element enthält jedoch auf dem Replikat mit hoher Genauigkeit im Feld state/province den Wert „British Columbia“. Daher verstößt die Änderung gegen die Geschäftslogik und verursacht einen Einschränkungskonflikt auf der Änderungseinheit, die das state/province-Feld darstellt.

Wenn der Zielanbieter diese Methode zum Melden eines Einschränkungskonflikts verwendet, löst der Änderungsanwender den Konflikt gemäß der von der Anwendung für den angegebenen Konflikt festgelegten Konfliktauflösungsaktion auf. Der Änderungsanwender leitet dann alle notwendigen Aufrufe an den Zielanbieter weiter, damit dieser den aufgelösten Konflikt für das Zielreplikat übernehmen kann. Weitere Informationen finden Sie unter Erkennen und Auflösen von Einschränkungskonflikten.

Beispiel

Im folgenden Beispiel wird überprüft, ob eine Änderungseinheit im Zielreplikat aktualisiert werden kann. Wenn die Änderungseinheit nicht aktualisiert werden kann, wird ein Einschränkungskonflikt für die Änderungseinheit aufgezeichnet.

Case SaveChangeAction.UpdateVersionAndData
    If True Then
        ' Update the item store and metadata store for the specified change unit.
        Try
            Dim cuData As String = DirectCast(context.ChangeData, String())(cuChange.ChangeUnitId.GetByteId())

            If _ContactStore.CanUpdateContact(change.ItemId, cuChange.ChangeUnitId, cuData) Then
                _ContactStore.UpdateContactFromSync(change, cuChange, cuData)
            Else
                context.RecordConstraintConflictForChangeUnit(cuChange)

            End If
        Catch ex As Exception
            Dim errData As New RecoverableErrorData(ex)
            context.RecordRecoverableErrorForChangeUnit(cuChange, errData)
        End Try
        Exit Select
    End If
case SaveChangeAction.UpdateVersionAndData:
{
    // Update the item store and metadata store for the specified change unit.
    try
    {
        string cuData = ((string[])context.ChangeData)[cuChange.ChangeUnitId.GetByteId()];

        if (_ContactStore.CanUpdateContact(change.ItemId, cuChange.ChangeUnitId, cuData))
        {
            _ContactStore.UpdateContactFromSync(change, cuChange, cuData);
        }
        else
        {
            context.RecordConstraintConflictForChangeUnit(cuChange);
        }

    }
    catch (Exception ex)
    {
        RecoverableErrorData errData = new RecoverableErrorData(ex);
        context.RecordRecoverableErrorForChangeUnit(cuChange, errData);
    }
    break;
}

Siehe auch

Verweis

SaveChangeWithChangeUnitsContext-Klasse
SaveChangeWithChangeUnitsContext-Member
Microsoft.Synchronization-Namespace