ISynchronousNotifyingChangeApplier2::ApplyChanges

変更バッチに対して競合検出、競合処理、変更の適用、および競合ログの管理を実行します。

HRESULT ApplyChanges(
  CONFLICT_RESOLUTION_POLICY resolutionPolicy,
  COLLISION_CONFLICT_RESOLUTION_POLICY collisionPolicy,
  ISyncChangeBatch * pSourceChanges,
  IUnknown * pUnkDataRetriever,
  IEnumSyncChanges * pDestinationVersions,
  ISyncKnowledge * pDestinationKnowledge,
  IForgottenKnowledge * pDestinationForgottenKnowledge,
  ISynchronousNotifyingChangeApplierTarget * pChangeApplierTarget,
  IConflictLogAccess * pConflictLogAccess,
  ISyncSessionState * pSessionState,
  ISyncCallback * pCallback);

パラメーター

  • resolutionPolicy
    [in] 同時実行の競合を解決するために使用するポリシーです。
  • collisionPolicy
    [in] 衝突制約の競合を解決するために使用するポリシーです。
  • pSourceChanges
    [in] 同期元プロバイダーからの変更のバッチです。
  • pUnkDataRetriever
    [in] 同期元レプリカから項目データを取得するために使用できるオブジェクトです。
  • pDestinationVersions
    [in] 同期先レプリカに格納されている項目のバージョンが含まれている変更の一覧です。これらの項目は、pSourceChanges の項目に対応しています。
  • pDestinationKnowledge
    [in] 同期先レプリカのナレッジです。
  • pDestinationForgottenKnowledge
    [in] 同期先レプリカの忘れられたナレッジです。
  • pChangeApplierTarget
    [in] 変更および競合を保存するために呼び出されるオブジェクトです。
  • pConflictLogAccess
    [in] 保留中の競合や一時的な競合が格納される競合ログです。
  • pSessionState
    [in] 現在のセッションに関する状態情報です。
  • pCallback
    [in] 変更の適用イベントに関する通知を受信するコールバックです。

戻り値

  • S_OK

  • E_INVALIDARG (resolutionPolicy または collisionPolicy が有効な値ではない場合)

  • E_OUTOFMEMORY

  • E_POINTER

  • SYNC_E_BATCH_NEEDS_KNOWLEDGE

  • SYNC_E_OBJECT_NEEDS_STATE

  • SYNC_E_CHANGE_COUNT_MISMATCH

  • SYNC_E_CHANGE_NEEDS_KNOWLEDGE

  • SYNC_E_ITEM_HAS_NO_CHANGE_UNITS

  • SYNC_E_ITEM_MUST_EXIST

  • SYNC_E_CHANGE_NOT_IN_KNOWLEDGE

  • SYNC_E_CHANGE_UNIT_COUNT_MISMATCH

  • SYNC_E_KNOWLEDGE_DECREASED

  • SYNC_E_NOT_EXPECTED_CHANGE

解説

通常、このメソッドはプロバイダーによって IKnowledgeSyncProvider::ProcessChangeBatch メソッドから呼び出されます。

このメソッドは、pSourceChanges で送信される変更と同期先レプリカ内の対応する項目との間で発生する同時実行の競合を検出します。同時実行の競合は、resolutionPolicy で指定されたポリシーに従って解決されます。衝突制約の競合が同期先プロバイダーによって報告されると、このメソッドは、collisionPolicy で指定されたポリシーに従って競合を解決します。競合の解決方法が設定されていない場合は、競合の発生がこのメソッドによってアプリケーションに通知され、アプリケーションによって競合解決アクションが指定されます。必要に応じて、このメソッドは、pChangeApplierTarget のメソッドを呼び出して、同期先レプリカに変更を保存したり、未解決の競合を保存したりします。

pDestinationVersions が NULL の場合、Sync Framework は pSourceChanges 内の項目ごとに pChangeApplierTarget で IASynchronousNotifyingChangeApplierTarget::GetDestinationVersion を呼び出します。

変更適用元は、ログに記録されている競合を解決し、期限切れの競合をログから削除することによって、pConflictLogAccess で指定された競合ログを管理できるようになります。また、変更適用元では、競合ログを使用して、制約の競合をマージした結果として発生する一時的な競合を格納する場合もあります。ログに追加された一時的な競合は、同期セッションの終了前にすべて削除されます。

参照

リファレンス

ISynchronousNotifyingChangeApplier2 インターフェイス

概念

競合の処理