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

  • 如果 resolutionPolicy 或 collisionPolicy 不是有效值,则返回值为 E_INVALIDARG

  • 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 接口

概念

处理冲突