ConstraintConflictResolutionAction 列挙体
特定の制約の競合を解決するために行われるアクションを表します。
名前空間: Microsoft.Synchronization
アセンブリ: Microsoft.Synchronization (microsoft.synchronization.dll 内)
構文
'宣言
Public Enumeration ConstraintConflictResolutionAction
'使用
Dim instance As ConstraintConflictResolutionAction
public enum ConstraintConflictResolutionAction
public enum class ConstraintConflictResolutionAction
public enum ConstraintConflictResolutionAction
public enum ConstraintConflictResolutionAction
メンバー
メンバー名 | 説明 | |
---|---|---|
DestinationWins | 同期先レプリカで行われた変更が常に優先されます。変更適用元は、同期元の変更を SaveItemChange メソッドに渡し、DeleteAndStoreTombstone の保存操作を指定します。同期先プロバイダーは、同期元の変更の廃棄標識を作成します。同期先は、その後の同期で同期元になると、同期元項目の削除を表す変更を列挙し、その項目を同期コミュニティから削除します。 | |
Merge | 同期元項目のデータが同期先項目と結合されます。変更適用元は、同期元レプリカの変更データを SaveItemChange メソッドに渡し、ChangeIdUpdateVersionAndMergeData の保存操作を指定します。詳細については、「制約の競合の検出および解決」の「競合している項目のマージ」を参照してください。 | |
RenameDestination | 同期先レプリカの競合している項目は、同期元プロバイダーから送信された変更と以降の競合を避けるために名前が変更され、同期元プロバイダーから送信された変更が同期先レプリカに適用されます。変更適用元は、変更を SaveItemChange メソッドに渡し、RenameDestinationAndUpdateVersionData の保存操作を指定します。 | |
RenameSource | 同期元プロバイダーから送信された変更は、同期先レプリカの競合する項目と以降の競合を避けるために名前が変更され、同期先レプリカに適用されます。変更適用元は、変更を SaveItemChange メソッドに渡し、RenameSourceAndUpdateVersionAndData の保存操作を指定します。 | |
SaveConflict | 競合をログに記録します。変更は適用されません。変更適用元は、競合データを SaveConstraintConflict メソッドに渡します。これにより、競合ログに競合が保存されます。競合のログ記録の詳細については、「競合のログ記録と管理」を参照してください。 | |
SkipChange | 競合を無視します。変更は適用されません。変更適用元は、競合データを同期先プロバイダーに渡しません。 | |
SourceWins | 同期元レプリカで行われた変更が常に優先されます。変更適用元は、変更を SaveItemChange メソッドに渡し、DeleteConflictingAndSaveSourceItem の保存操作を指定します。同期元の変更が同期先レプリカに適用され、競合する同期先の項目は同期先レプリカから削除されます。 |
解説
ConstraintConflictResolutionAction のメンバーは、制約の競合を解決するために変更適用元で行うアクションを指定します。制約の競合は、項目または変更単位が持つ制約 (フォルダーの関係や、ファイル システムにおいて、まったく同じ名前が付けられたデータの場所など) に違反する競合です。衝突競合の解決方法が指定されている場合に、衝突制約の競合が発生したときには、制約の競合の解決アクションが変更適用元によって指定されます。それ以外の場合、制約の競合が発生したことが通知されたときには、同期アプリケーションによって制約の競合の解決アクションが指定されます。
制約の競合の詳細については、「制約の競合の検出および解決」を参照してください。
例
次の例では、ItemConstraint イベントのハンドラーを実装します。ハンドラーによって競合している項目がユーザーに示され、ユーザーの応答に基づいて制約の競合の解決アクションが設定されます。
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);
}
}