SyncCallbacks.ItemConstraint Event

Occurs when a constraint conflict is reported, for collision conflicts when the collision conflict resolution policy is set to ApplicationDefined, and for all non-collision constraint conflicts.

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

Syntax

'Declaration
Public Event ItemConstraint As EventHandler(Of ItemConstraintEventArgs)
'Usage
Dim instance As SyncCallbacks
Dim handler As EventHandler(Of ItemConstraintEventArgs)

AddHandler instance.ItemConstraint, handler
public event EventHandler<ItemConstraintEventArgs> ItemConstraint
public:
event EventHandler<ItemConstraintEventArgs^>^ ItemConstraint {
    void add (EventHandler<ItemConstraintEventArgs^>^ value);
    void remove (EventHandler<ItemConstraintEventArgs^>^ value);
}
/** @event */
public void add_ItemConstraint (EventHandler<ItemConstraintEventArgs> value)

/** @event */
public void remove_ItemConstraint (EventHandler<ItemConstraintEventArgs> value)
JScript supports the use of events, but not the declaration of new ones.

Remarks

This notification can be used by an application to perform custom conflict resolution for constraint conflicts. To accomplish this, the application inspects and processes the contents of the ItemConstraintEventArgs object that is sent to the event handler, and then sets the resolution action for the conflict by calling SetResolutionAction before it returns from this method.

When the ConstraintConflictReason property of the ItemConstraintEventArgs object is set to any value other than Collision, the resolution action must be set to either SkipChange or SaveConflict.

Example

The following example implements a handler for the ItemConstraint event. The handler displays the conflicting items to the user and sets the constraint conflict resolution action based on the user's response.

Private Sub HandleItemConstraint(ByVal sender As [Object], ByVal args As ItemConstraintEventArgs)
    If ConstraintConflictReason.Collision = args.ConstraintConflictReason Then
        ' Display the two items that are in conflict and solicit a resolution from the user.
        Dim srcContact As New Contact(DirectCast(args.SourceChangeData, String()))
        Dim destContact As New Contact(DirectCast(args.DestinationChangeData, String()))
        Dim msg As String = ("Source change is " & srcContact.ToString() & vbLf & "Destination change is ") & destContact.ToString() & vbLf & "Click Yes to rename the source change and apply it." & vbLf & "Click No to rename the destination item and apply the source change." & vbLf & "Click Cancel to delete the destination item and apply the source change."
        Dim ccDlg As New ConstraintConflictDlg(msg)
        ccDlg.ShowDialog()

        ' Set the resolution action based on the user's response.
        args.SetResolutionAction(ccDlg.Resolution)
    Else
        args.SetResolutionAction(ConstraintConflictResolutionAction.SaveConflict)
    End If
End Sub
void HandleItemConstraint(Object sender, ItemConstraintEventArgs args)
{
    if (ConstraintConflictReason.Collision == args.ConstraintConflictReason)
    {
        // Display the two items that are in conflict and solicit a resolution from the user.
        Contact srcContact = new Contact((string[])args.SourceChangeData);
        Contact destContact = new Contact((string[])args.DestinationChangeData);
        string msg = "Source change is " + srcContact.ToString() +
                   "\nDestination change is " + destContact.ToString() +
                   "\nClick Yes to rename the source change and apply it." +
                   "\nClick No to rename the destination item and apply the source change." +
                   "\nClick Cancel to delete the destination item and apply the source change.";
        ConstraintConflictDlg ccDlg = new ConstraintConflictDlg(msg);
        ccDlg.ShowDialog();

        // Set the resolution action based on the user's response.
        args.SetResolutionAction(ccDlg.Resolution);
    }
    else 
    {
        args.SetResolutionAction(ConstraintConflictResolutionAction.SaveConflict);
    }
}

See Also

Reference

SyncCallbacks Class
SyncCallbacks Members
Microsoft.Synchronization Namespace

Concepts

Detecting and Resolving Constraint Conflicts