변경 적용 서비스를 사용하여 변경 내용 적용
변경 적용 서비스에서는 Sync Framework의 변경 내용 적용자 구성 요소와 동일한 동작을 더 세부적인 방식으로 수행합니다. 표준 변경 내용 적용자가 제공하는 것보다 유연성이 큰 서비스가 필요한 대상 공급자는 변경 적용 서비스를 사용하여 공급자에 필요한 일련의 동작만 수행할 수 있습니다. 예를 들어 공급자는 자체 충돌 검색을 수행하고 변경 적용 서비스를 사용하여 업데이트된 정보를 계산할 수 있습니다. 또는 대상 공급자는 변경 적용 서비스를 사용하여 원본 공급자가 보낸 순서와 다른 순서로 변경 내용을 적용할 수 있습니다.
변경 적용 서비스는 제약 조건 충돌을 보고하거나 사용자 지정 필터를 사용하는 공급자가 사용할 수 없으며, 그렇지 않을 경우 예상치 못한 결과가 발생할 수 있습니다.
변경 내용 처리
변경 내용을 처리하기 위해 대상 공급자는 다음과 같은 단계를 수행합니다.
변경 내용 적용자 서비스를 만들고 초기화합니다.
변경 내용 적용 세션을 시작합니다.
변경 적용 서비스를 사용하여 다른 경우라면 공급자에 의해 처리되지 않을 변경 내용에 대해 충돌 검색을 수행하고 변경 내용을 적용합니다.
적용하지 못한 변경 내용을 보고합니다.
필요한 경우 성공적으로 적용된 변경 내용을 보고합니다. 이 동작은 공급자가 변경 내용 적용 세션 중 업데이트된 대상 정보를 검색한 경우에만 필요합니다. 그렇지 않은 경우 실패한 변경 내용만 보고하고 변경 내용 적용 세션이 종료된 후 업데이트된 대상 정보를 한 번 검색하는 것이 더 효율적입니다.
변경 내용 적용 세션을 종료합니다. 변경 적용 서비스는 처리된 일괄 변경 내용에 대해 업데이트된 대상 정보를 반환합니다.
변경 적용 서비스 개체 만들기
대상 공급자는 ChangeApplicationServices 개체(관리 코드의 경우) 또는 IChangeApplicationServices 개체(비관리 코드의 경우)를 만들고 초기화합니다. 이 동작은 ChangeApplicationServices을 호출하거나(관리 코드의 경우) IID_IChangeApplicationServices를 IProviderSyncServices::CreateChangeApplier에 전달한 다음 IChangeApplicationServices::Initialize를 호출하여(비관리 코드의 경우) 수행됩니다.
변경 내용 적용 세션 시작
대상 공급자는 BeginChangeApplication(관리 코드의 경우) 또는 IChangeApplicationServices::BeginChangeApplication(비관리 코드의 경우)을 호출하여 변경 내용 적용 세션을 시작합니다. 이 메서드에 전달된 대상 정보는 변경 내용을 적용하는 동안이나 적용 후에 업데이트된 대상 정보를 계산하는 기준으로 사용됩니다.
변경 내용 처리
대상 공급자는 다른 경우라면 처리되지 않을 변경 내용만 처리하기 위해 변경 적용 서비스를 사용합니다. 예를 들어 대상 공급자는 자체 충돌 검색을 수행하고 직접 변경 내용을 적용합니다. 이 경우 변경 내용을 처리하는 데 변경 적용 서비스가 사용되지 않습니다. 또는 대상 공급자는 원본 공급자가 보낸 순서와 다른 순서로 변경 내용을 적용합니다. 이 경우 대상 공급자가 지정한 순서로 변경 내용을 처리하기 위해 변경 적용 서비스가 사용됩니다.
변경 내용을 처리하기 위해 대상 공급자는 다음과 같은 단계를 수행합니다.
GetChangeApplicationContext(관리 코드의 경우) 또는 IChangeApplicationServices::GetChangeApplicationContext(비관리 코드의 경우)를 호출하여 변경 내용 처리를 시작합니다. 이 메서드는 ChangeApplicationContext 개체(관리 코드의 경우) 또는 IChangeApplicationContext 개체(비관리 코드의 경우)를 반환합니다.
ChangeApplicationAction 속성을 가져오거나(관리 코드의 경우) IChangeApplicationContext::GetChangeApplicationAction을 호출합니다(비관리 코드의 경우). 이 메서드는 다음에 취할 동작을 ChangeApplicationAction 값(관리 코드의 경우) 또는 IChangeApplicationContext 인터페이스 값(비관리 코드의 경우)으로 반환합니다.
변경 내용을 대상 복제본에 저장하는 것과 같은 지정된 동작을 수행합니다. 가능한 동작 처리에 대한 자세한 내용은 변경 적용 서비스 구성 요소에 대한 참조 항목을 참고하십시오.
1단계에서 반환되는 동작이 Finished(관리 코드의 경우) 또는 CAA_FINISHED(비관리 코드의 경우)가 될 때까지 이러한 단계를 반복합니다.
성공 및 실패한 변경 내용 보고
대상 공급자가 변경 적용 서비스를 사용하여 업데이트된 정보를 계산하는 경우 공급자는 변경 내용 적용 세션을 종료하기 전에 적용하지 못한 모든 변경 내용을 보고해야 합니다. 실패한 변경 내용을 보고하려면 ReportRecoverableErrorOnItemChange 또는 ReportRecoverableErrorOnChangeUnitChange를 호출하거나(관리 코드의 경우) IChangeApplicationServices::ReportRecoverableErrorOnItemChange 또는 IChangeApplicationServices::ReportRecoverableErrorOnChangeUnitChange를 호출합니다(비관리 코드의 경우).
대상 공급자가 변경 내용 적용 세션 중 업데이트된 대상 정보를 검색하는 경우 공급자는 성공적으로 적용된 변경 내용도 보고해야 합니다. 업데이트된 대상 정보는 GetUpdatedDestinationKnowledge(관리 코드의 경우) 또는 IChangeApplicationServices::GetUpdatedDestinationKnowledge(비관리 코드의 경우)를 호출하여 검색됩니다. 공급자가 변경 내용 적용 세션이 종료된 후에만 업데이트된 정보를 검색하는 경우에는 성공적인 변경 내용을 보고할 필요가 없습니다. 성공적으로 적용된 변경 내용을 보고하려면 ReportItemChangeApplied 또는 ReportChangeUnitChangeApplied를 호출하거나(관리 코드의 경우) IChangeApplicationServices::ReportItemChangeApplied 또는 IChangeApplicationServices::ReportChangeUnitChangeApplied를 호출합니다(비관리 코드의 경우).
변경 내용 적용 세션 종료
모든 변경 내용이 처리되면 대상 공급자는 EndChangeApplication(관리 코드의 경우) 또는 IChangeApplicationServices::EndChangeApplication(비관리 코드의 경우)을 호출하여 변경 내용 적용 세션을 종료합니다. 원본 공급자의 일괄 변경 내용에 포함된 배운 정보가 이 메서드에 전달됩니다. 변경 적용 서비스는 배운 정보 및 실패한 것으로 보고된 변경 내용에서 업데이트된 대상 정보를 계산합니다. 대상 복제본의 현재 정보는 이 메서드에서 반환되는 업데이트된 대상 정보로 바뀌어야 합니다.