ISaveChangeWithChangeUnitsContext2::SetConstraintConflictOnChangeUnit
変更単位が含まれる変更の場合、同期先プロバイダーが同期先レプリカに変更の適用を試みたときに、制約の競合が発生したことを報告します。
HRESULT SetConstraintConflictOnChangeUnit(
ISyncChangeUnit * pChangeUnit);
パラメーター
- pChangeUnit
[in] 適用する変更単位と競合する、同期先レプリカの変更単位です。
戻り値
S_OK
E_INVALIDARG (適用する変更に pChangeUnit が見つからない場合)
E_POINTER
SYNC_E_INVALID_OPERATION (制約の競合または復旧可能なエラーが既にこのオブジェクトに設定されている場合)
解説
制約の競合は、同期先プロバイダーが同期先レプリカに対して変更の適用を試みたときに、その変更が同期先レプリカの制約に違反している場合に発生します。変更単位の場合、これは、通常、変更が同期先レプリカで一部のビジネス ロジックに違反していることを意味します。ビジネス ロジックの競合の例として、name および country という 2 つの変更単位が格納されている、忠実性の低いレプリカを考えてみます。また、name、state/province、および country という 3 つの変更単位が格納されている、忠実性の高いレプリカについても考えてみます。忠実性の高いレプリカには、state/province フィールドを country フィールドと照合するビジネス ロジックが含まれており、この照合に合格しない変更は格納されません。忠実性の低いレプリカは、同期元として機能し、country が "USA" に設定された項目を送信します。同期先プロバイダーは、忠実性の高いレプリカに変更の適用を試みますが、忠実性の高いレプリカでは、項目の state/province フィールドに "British Columbia" が含まれています。そのため、この変更はビジネス ロジックに違反し、state/province フィールドを表す変更単位で制約の競合が発生します。
同期先プロバイダーがこのメソッドを使用して、制約の競合を報告すると、指定された競合に対してアプリケーションが設定した競合解決アクションに従って、変更適用元が競合を解決します。その後、変更適用元は、同期先プロバイダーが解決された競合を同期先レプリカに適用できるように、必要な同期先プロバイダーの呼び出しをディスパッチします。詳細については、「制約の競合の検出および解決」を参照してください。