ISynchronousNotifyingChangeApplier2::ApplyChanges

Performs conflict detection, conflict handling, change application, and manages the conflict log for a batch of changes.

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);

Parameters

  • resolutionPolicy
    [in] The policy to use for resolving concurrency conflicts.
  • collisionPolicy
    [in] The policy to use for resolving collision constraint conflicts.
  • pSourceChanges
    [in] The batch of changes from the source provider.
  • pUnkDataRetriever
    [in] An object that can be used to retrieve item data from the source replica.
  • pDestinationVersions
    [in] A list of changes that contains the versions of items that are stored in the destination replica. These items correspond to the items in pSourceChanges.
  • pDestinationKnowledge
    [in] The knowledge of the destination replica.
  • pDestinationForgottenKnowledge
    [in] The forgotten knowledge of the destination replica.
  • pChangeApplierTarget
    [in] The object that will be called to save changes and conflicts.
  • pConflictLogAccess
    [in] The conflict log where deferred conflicts and temporary conflicts are stored.
  • pSessionState
    [in] State information about the current session.
  • pCallback
    [in] Callbacks that will receive notifications about change application events.

Return Value

  • S_OK

  • E_INVALIDARG when resolutionPolicy or collisionPolicy is not a valid value

  • 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

Remarks

Typically, this method is called by a provider from its IKnowledgeSyncProvider::ProcessChangeBatch method.

This method detects concurrency conflicts that occur between the changes that are sent in pSourceChanges and the corresponding items in the destination replica. It resolves any concurrency conflicts according to the policy specified by resolutionPolicy. When collision constraint conflicts are reported by the destination provider, this method resolves them according to the policy specified by collisionPolicy. If no conflict resolution policy is set, this method notifies the application of a conflict, and the application specifies a conflict resolution action. If it is necessary, this method then calls methods on pChangeApplierTarget to save changes to the destination replica and to save unresolved conflicts.

If pDestinationVersions is NULL, Sync Framework calls IASynchronousNotifyingChangeApplierTarget::GetDestinationVersion on pChangeApplierTarget for each item in pSourceChanges.

The change applier helps manage the conflict log specified by pConflictLogAccess, by resolving conflicts in the log and removing obsolete conflicts from the log. The change applier may also use the conflict log to store temporary conflicts that occur as a result of merging constraint conflicts. Any temporary conflicts added to the log will be removed before the synchronization session ends.

See Also

Reference

ISynchronousNotifyingChangeApplier2 Interface

Concepts

Handling Conflicts