Поделиться через


Применение изменений с помощью службы применения изменений

Служба применения изменений выполняет те же действия, что и компонент объекта применения изменений Sync Framework, но на более гранулярном уровне. Поставщик назначения, которому требуется большая гибкость, чем предоставляемая стандартным объектом применения изменений, может использовать службу применения изменений для выполнения только необходимого ему набора действий. Например, поставщик может сам обнаруживать конфликты и использовать службу применения изменений для вычисления обновленного набора знаний. Поставщик назначения также может использовать службу применения изменений для применения изменений в другом порядке, отличном от указанного поставщиком источника.

Учтите, что службы применения изменений не могут быть использованы поставщиком, который сообщает о конфликтах ограничений или использует пользовательские фильтры, так как это может привести к возникновению непредвиденных результатов.

Обработка изменений

Чтобы обработать изменения, поставщик назначения выполняет следующие шаги.

  1. Создает и инициализирует службу применения изменений.

  2. Запускает сеанс применения изменений.

  3. Использует службу применения изменений для обнаружения конфликтов и внесения в приложения изменений, не обрабатываемых поставщиком.

  4. Сообщает о неуспешно примененных изменениях.

  5. Может сообщать об успешно примененных изменениях. Это необходимо только при получении поставщиком обновленного набора знаний назначения в ходе сеанса применения изменений. В противном случае более эффективно сообщать о неуспешных изменениях и одновременно получать обновленный набор знаний назначения после завершения сеанса применения изменений.

  6. Завершает сеанс применения изменений. Служба применения изменений возвращает обновленный набор знаний назначения для пакета обработанных изменений.

Создание объекта службы применения изменений

Поставщик назначения создает и инициализирует объект ChangeApplicationServices (для управляемого кода) или объект IchangeApplicationServices (для неуправляемого кода). Для этого вызывается метод ChangeApplicationServices (для управляемого кода) или передается IID_IChangeApplicationServices методу IProviderSyncServices::CreateChangeApplier, а затем выполняется вызов метода IChangeApplicationServices::Initialize (для неуправляемого кода).

Запуск сеанса применения изменений

Поставщик назначения начинает сеанс применения изменений с помощью вызова метода BeginChangeApplication (для управляемого кода) или IChangeApplicationServices::BeginChangeApplication (для неуправляемого кода). Набор знаний назначения, передаваемый этому методу, используется как основа для вычисления обновленного набора знаний назначения в процессе и после применения изменений.

Обработка изменения

Поставщик назначения использует службу применения изменений для обработки изменений, не обрабатываемых другими способами. Например, поставщик назначения самостоятельно обнаруживает конфликты и применяет изменения. В этом случае служба применений изменений не используется для обработки изменений. Другой пример — поставщик назначения применяет изменения в другом порядке, отличном от порядка, указанного поставщиком источника. В этом случае служба применения изменений используется для обработки изменения в порядке, указанном поставщиком назначения.

Чтобы обработать изменение, поставщик назначения выполняет следующие шаги.

  1. Вызывает метод GetChangeApplicationContext (для управляемого кода) или IChangeApplicationServices::GetChangeApplicationContext (для неуправляемого кода), чтобы начать обработку изменений. Этот метод возвращает объект ChangeApplicationContext (для управляемого кода) или объект IChangeApplicationContext (для неуправляемого кода).

  2. Возвращает свойство ChangeApplicationAction (для управляемого кода) или вызывает метод IChangeApplicationContext::GetChangeApplicationAction (для неуправляемого кода). Этот метод возвращает следующее действие, чтобы принять в качестве значения ChangeApplicationAction (для управляемого кода) или Интерфейс IChangeApplicationContext (для неуправляемого кода).

  3. Выполняет указанное действие, такое как сохранение изменений в конечной реплике. Дополнительные сведения об обработке возможных действий см. в разделах справки по компонентам службы применения изменений.

  4. Повторяйте эти шаги, пока в шаге 1 не будет возвращено Finished (для управляемого кода) или CAA_FINISHED (для неуправляемого кода).

Отчет об успешно и неуспешно примененных изменениях

Если поставщик назначения использует службу применения изменений для вычисления обновленного набора знаний, поставщик должен предоставить сведения обо всех неуспешно примененных изменениях до завершения сеанса применения изменений. Чтобы сообщить о неуспешно примененном изменении, вызовите метод ReportRecoverableErrorOnItemChange или ReportRecoverableErrorOnChangeUnitChange (для управляемого кода) или IChangeApplicationServices::ReportRecoverableErrorOnItemChange или IChangeApplicationServices::ReportRecoverableErrorOnChangeUnitChange (для неуправляемого кода).

Также при получении поставщиком назначения обновленного набора знаний назначения в ходе сеанса применения изменений поставщик должен сообщить об успешно примененных изменениях. Обновленный набор знаний назначения получается с помощью вызова метода GetUpdatedDestinationKnowledge (для управляемого кода) или IChangeApplicationServices::GetUpdatedDestinationKnowledge (для неуправляемого кода). Если поставщик получает обновленный набор знаний только после завершения сеанса применения изменений, то сообщать об успешно примененных изменениях необязательно. Чтобы сообщить об успешно примененном изменении, вызовите метод ReportItemChangeApplied или ReportChangeUnitChangeApplied (для управляемого кода) или IChangeApplicationServices::ReportItemChangeApplied или IChangeApplicationServices::ReportChangeUnitChangeApplied (для неуправляемого кода).

Завершение сеанса применения изменений

После обработки всех изменений поставщик назначения завершает сеанс применения изменений с помощью вызова метода EndChangeApplication (для управляемого кода) или IChangeApplicationServices::EndChangeApplication (для неуправляемого кода). Набор известных знаний, содержащийся в пакете изменений, полученном от поставщика источника, передается этому методу. Служба применения изменений рассчитывает обновленный набор знаний назначения с помощью набора известных знаний и изменений, которые ранее были признаны неуспешными. Возвращенный из этого метода обновленный набор знаний назначения должен заменить текущий набор знаний конечной реплики.

См. также

Основные положения

Применение изменений