Aplicar cambios utilizando el servicio de aplicación de cambios
El servicio de aplicación de cambios realiza las mismas acciones que el componente aplicador de cambios de Sync Framework, pero con mayor especificidad. Un proveedor de destino que requiera mayor flexibilidad que la proporcionada por el aplicador de cambios estándar puede utilizar el servicio de aplicación de cambios para realizar únicamente el conjunto de acciones requerido por el proveedor. Por ejemplo, un proveedor puede realizar su propia detección de conflictos y utilizar el servicio de aplicación de cambios para calcular el conocimiento actualizado. O bien, un proveedor de destino puede utilizar el servicio de aplicación de cambios para aplicar cambios en un orden diferente del enviado por el proveedor de origen.
Tenga en cuenta que el servicio de aplicación de cambios no lo puede usar un proveedor que notifique conflictos de restricción o utilice filtros personalizados; de lo contrario, pueden producirse resultados inesperados.
Procesar cambios
Para procesar cambios, el proveedor de destino realiza estos pasos:
Crea e inicializa el servicio de aplicación de cambios.
Inicia una sesión de aplicación de cambios.
Utiliza el servicio de aplicación de cambios para realizar la detección de conflictos y la aplicación de cambios correspondientes a los cambios que el proveedor no controla de otro modo.
Notifica los cambios que no se han aplicado.
Opcionalmente, notifica los cambios que se han aplicado correctamente. Esto solamente es necesario cuando el proveedor recupera el conocimiento de destino actualizado durante la sesión de aplicación de cambios. Por otro lado, es más eficaz notificar solamente los cambios no aplicados y recuperar el conocimiento de destino actualizado una vez finalizada la sesión de aplicación de cambios.
Finaliza la sesión de aplicación de cambios. El servicio de aplicación de cambios devuelve el conocimiento de destino actualizado para el lote de cambios procesados.
Crear el objeto de servicio de aplicación de cambios
El proveedor de destino crea e inicializa el objeto ChangeApplicationServices (en código administrado) o el objeto IChangeApplicationServices (en código no administrado). Esto se consigue llamando a ChangeApplicationServices (en código administrado) o pasando IID_IChangeApplicationServices a IProviderSyncServices::CreateChangeApplier y llamando después a IChangeApplicationServices::Initialize (en código no administrado).
Iniciar una sesión de aplicación de cambios
El proveedor de destino inicia una sesión de aplicación de cambios llamando a BeginChangeApplication (en código administrado) o a IChangeApplicationServices::BeginChangeApplication (en código no administrado). El conocimiento de destino que se pasa a este método se utiliza como base para calcular el conocimiento de destino actualizado durante y después de la aplicación de cambios.
Procesar un cambio
El proveedor de destino utiliza el servicio de aplicación de cambios para procesar solamente los cambios que no se controlan de otro modo. Por ejemplo, un proveedor de destino realiza su propia detección de conflictos y aplica los cambios por sí mismo. En este caso, el servicio de aplicación de cambios no se utiliza para procesar los cambios. O bien, un proveedor de destino aplica los cambios en un orden diferente del enviado por el proveedor de origen. En este caso, el servicio de aplicación de cambios se utiliza para procesar los cambios en el orden especificado por el proveedor de destino.
Para procesar un cambio, el proveedor de destino sigue estos pasos:
Llama a GetChangeApplicationContext (en código administrado) o a IChangeApplicationServices::GetChangeApplicationContext (en código no administrado) para iniciar el procesamiento de un cambio. Este método devuelve un objeto ChangeApplicationContext (en código administrado) o el objeto IChangeApplicationContext (en código no administrado).
Obtiene la propiedad ChangeApplicationAction (en código administrado) o llama a IChangeApplicationContext::GetChangeApplicationAction (en código no administrado). Este método devuelve la siguiente acción que se ha de realizar como un valor ChangeApplicationAction (en código administrado) o un valor Interfaz IChangeApplicationContext (en código no administrado).
Realiza la acción especificada, como guardar el cambio en la réplica de destino. Para obtener más información sobre cómo controlar las posibles acciones, vea los temas de referencia para los componentes del servicio de aplicación de cambios.
Repita estos pasos hasta que la acción devuelta en el paso 1 sea Finished (en código administrado) o CAA_FINISHED (en código no administrado).
Notificar los cambios aplicados correctamente y los cambios no aplicados
Si el proveedor de destino utiliza el servicio de aplicación de cambios para calcular el conocimiento actualizado, el proveedor debe notificar los cambios no aplicados antes de que finalice la sesión de aplicación de cambios. Para notificar un cambio no aplicado, llame a ReportRecoverableErrorOnItemChange o ReportRecoverableErrorOnChangeUnitChange (en código administrado) o a IChangeApplicationServices::ReportRecoverableErrorOnItemChange o IChangeApplicationServices::ReportRecoverableErrorOnChangeUnitChange (en código no administrado).
Además, si el proveedor de destino recupera el conocimiento de destino actualizado durante la sesión de aplicación de cambios, el proveedor debe notificar los cambios que se aplicaron correctamente. El conocimiento de destino actualizado se recupera llamando a GetUpdatedDestinationKnowledge (en código administrado) o a IChangeApplicationServices::GetUpdatedDestinationKnowledge (en código no administrado). No es necesario notificar los cambios aplicados correctamente cuando el proveedor recupera el conocimiento actualizado sólo después de finalizar la sesión de aplicación de cambios. Para notificar un cambio aplicado correctamente, llame a ReportItemChangeApplied o ReportChangeUnitChangeApplied (en código administrado) o a IChangeApplicationServices::ReportItemChangeApplied o IChangeApplicationServices::ReportChangeUnitChangeApplied (en código no administrado).
Finalizar una sesión de aplicación de cambios
Cuando se han procesado todos los cambios, el proveedor de destino finaliza la sesión de aplicación de cambios llamando a EndChangeApplication (en código administrado) o a IChangeApplicationServices::EndChangeApplication (en código no administrado). El conocimiento aprendido contenido en el lote de cambios del proveedor de origen se pasa a este método. El servicio de aplicación de cambios calcula el conocimiento de destino actualizado a partir del conocimiento aprendido y de los cambios que se notificaron como no aplicados. El conocimiento de destino actualizado que se devuelve desde este método debe reemplazar el conocimiento actual de la réplica de destino.