SaveChangeWithChangeUnitsContext.RecordConstraintConflictForChangeUnit 方法
針對包含變更單位的變更,報告當目的地提供者嘗試將變更套用至目的地複寫時發生了條件約束衝突。
命名空間: Microsoft.Synchronization
組件: Microsoft.Synchronization (在 microsoft.synchronization.dll)
語法
'宣告
Public Sub RecordConstraintConflictForChangeUnit ( _
changeUnitChange As ChangeUnitChange _
)
'用途
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
)
參數
- changeUnitChange
目的地複寫上與要套用之變更單位發生衝突的變更單位。
例外
例外狀況型別 | 條件 |
---|---|
changeUnitChange 是 null 參考 (在 Visual Basic 中為 Nothing)。 |
|
在要套用的變更中找不到 changeUnitChange。 |
|
已經在此物件上設定條件約束衝突或可復原的錯誤。 |
備註
當目的地提供者嘗試將變更套用至目的地複寫,而且此變更違反目的地複寫的條件約束時,就會發生條件約束衝突。對於變更單位而言,這通常表示此變更違反目的地複寫的某些商務邏輯。以商務邏輯衝突為例,請考慮儲存兩個變更單位的低精確度複寫:name 和 country。此外,請考慮儲存三個變更單位的高精確度複寫:name、state/province 和 country。高精確度複寫所包含的商務邏輯會根據 country 欄位檢查 state/province 欄位,而且不會儲存未通檢查的變更。低精確度複寫會當做來源並且傳送 country 設定為 "USA" 的項目。雖然目的地提供者會嘗試將變更套用至高精確度複寫,不過在高精確度複寫上,此項目的 state/province 欄位包含 "British Columbia"。因此,這項變更會違反商務邏輯並且在代表 state/province 欄位的變更單位上導致條件約束衝突。
當目的地提供者使用這個方法來報告條件約束衝突時,變更套用者就會根據應用程式針對指定之衝突所設定的衝突解決動作,解決此衝突。然後,變更套用者就會將任何必要的呼叫分派給目的地提供者,讓目的地提供者能夠將解決的衝突套用至目的地複寫。如需詳細資訊,請參閱偵測及解決條件約束衝突。
範例
下列範例會檢查某個變更單位是否能在目的地複寫中更新。無法更新變更單位時,系統就會針對此變更單位記錄條件約束衝突。
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;
}
請參閱
參考
SaveChangeWithChangeUnitsContext 類別
SaveChangeWithChangeUnitsContext 成員
Microsoft.Synchronization 命名空間