Freigeben über


Anwenden von Änderungen mithilfe des Änderungsanwendungsdiensts

Der Änderungsanwendungsdienst führt die gleichen Aktionen durch wie die Änderungsanwenderkomponente in Sync Framework, jedoch mit feinerer Granularität. Ein Zielanbieter, der größere Flexibilität erfordert als sie vom Standardänderungsanwender bereitgestellt wird, kann mithilfe des Änderungsanwendungsdiensts nur den Satz von Aktionen ausführen, die der Anbieter erfordert. Ein Anbieter kann beispielsweise seine eigene Konflikterkennung durchführen und den Änderungsanwendungsdienst zum Berechnen aktualisierten Wissens verwenden. Oder ein Zielanbieter kann den Änderungsanwendungsdienst verwenden, um Änderungen in einer anderen als der vom Quellenanbieter gesendeten Reihenfolge anzubieten.

Beachten Sie, dass der Änderungsanwendungsdienst nicht von einem Anbieter verwendet werden kann, der Einschränkungskonflikte meldet oder benutzerdefinierte Filter verwendet, da andernfalls unerwartete Ergebnisse auftreten können.

Verarbeiten von Änderungen

Zur Verarbeitung von Änderungen führt der Zielanbieter die folgenden Schritte aus:

  1. Erstellen und Initialisieren des Änderungsanwenderdiensts.

  2. Starten einer Änderungsanwendungssitzung.

  3. Verwenden des Änderungsanwendungsdiensts, um die Konflikterkennung und Änderungsanwendung für Änderungen durchzuführen, die vom Anbieter nicht anderweitig bearbeitet werden.

  4. Melden aller Änderungen, die nicht angewendet werden konnten.

  5. Optional: Melden der Änderungen, die erfolgreich angewendet wurden. Dies ist nur notwendig, wenn der Anbieter während der Änderungsanwendungssitzung aktualisiertes Zielwissen abruft. Andernfalls ist es effizienter, nur fehlgeschlagene Änderungen zu melden und das aktualisierte Zielwissen einmalig nach Beendigung der Änderungsanwendungssitzung abzurufen.

  6. Beenden der Änderungsanwendungssitzung. Der Änderungsanwendungsdienst gibt aktualisiertes Zielwissen für den Batch der überarbeiteten Änderungen zurück.

Erstellen des Änderungsanwendungs-Dienstobjekts

Der Zielanbieter erstellt und initialisiert das ChangeApplicationServices-Objekt (für verwalteten Code) oder das IChangeApplicationServices-Objekt (für nicht verwalteten Code). Dies wird erreicht, indem ChangeApplicationServices aufgerufen wird (für verwalteten Code) oder indem IID_IChangeApplicationServices an IProviderSyncServices::CreateChangeApplier übergeben und anschließend IChangeApplicationServices::Initialize aufgerufen wird (für nicht verwalteten Code).

Starten einer Änderungsanwendungssitzung

Der Zielanbieter startet eine Änderungsanwendungssitzung durch Aufrufen von BeginChangeApplication (für verwalteten Code) oder von IChangeApplicationServices::BeginChangeApplication (für nicht verwalteten Code). Das an diese Methode übergebene Zielwissen wird während und nach der Änderungsanwendung als Grundlage für die Berechnung des aktualisierten Zielwissens verwendet.

Verarbeiten einer Änderung

Der Zielanbieter verwendet den Änderungsanwendungsdienst nur zur Verarbeitung von Änderungen, die nicht anderweitig bearbeitet werden. Ein Zielanbieter führt beispielsweise selbst Konflikterkennung durch und wendet Änderungen selbst an. In diesem Fall wird der Änderungsanwendungsdienst nicht zur Verarbeitung von Änderungen verwendet. Oder ein Zielanbieter wendet Änderungen in einer anderen Reihenfolge als der vom Quellenanbieter gesendeten an. In diesem Fall wird der Änderungsanwendungsdienst verwendet, um Änderungen in der vom Zielanbieter angegebenen Reihenfolge anzuwenden.

Zur Verarbeitung einer Änderung führt der Zielanbieter die folgenden Schritte aus:

  1. Aufrufen von GetChangeApplicationContext (für verwalteten Code) oder IChangeApplicationServices::GetChangeApplicationContext (für nicht verwalteten Code), um die Verarbeitung einer Änderung zu starten. Diese Methode gibt ein ChangeApplicationContext-Objekt (für verwalteten Code) oder ein IChangeApplicationContext-Objekt (für nicht verwalteten Code) zurück.

  2. Abrufen der ChangeApplicationAction-Eigenschaft (für verwalteten Code) oder Aufrufen von IChangeApplicationContext::GetChangeApplicationAction (für nicht verwalteten Code). Diese Methode gibt die nächste auszuführende Aktion in Form eines ChangeApplicationAction-Werts (für verwalteten Code) oder eines IChangeApplicationContext-Schnittstelle-Werts (für nicht verwalteten Code) zurück.

  3. Ausführen der angegebenen Aktion, wie beispielsweise das Speichern der Änderung auf dem Zielreplikat. Weitere Informationen zur Behandlung der möglichen Aktionen finden Sie in den Referenzthemen für die Komponenten des Änderungsanwendungsdiensts.

  4. Wiederholen Sie diese Schritte, bis die in Schritt 1 zurückgegebene Aktion Finished (für verwalteten Code) oder CAA_FINISHED (für nicht verwalteten Code) ist.

Melden erfolgreicher und fehlgeschlagener Änderungen

Wenn der Zielanbieter den Änderungsanwendungsdienst verwendet, um das aktualisierte Wissen zu berechnen, muss der Anbieter alle Änderungen, die nicht angewendet werden konnten, vor dem Ende der Änderungsanwendungssitzung melden. Um eine fehlgeschlagene Änderung zu melden, rufen Sie ReportRecoverableErrorOnItemChange oder ReportRecoverableErrorOnChangeUnitChange auf (für verwalteten Code), oder Sie rufen IChangeApplicationServices::ReportRecoverableErrorOnItemChange oder IChangeApplicationServices::ReportRecoverableErrorOnChangeUnitChange auf (für nicht verwalteten Code).

Wenn der Zielanbieter während der Änderungsanwendungssitzung aktualisiertes Zielwissen abruft, muss der Anbieter zudem Änderungen melden, die erfolgreich angewendet wurden. Aktualisiertes Zielwissen wird durch Aufrufen von GetUpdatedDestinationKnowledge (für verwalteten Code) oder IChangeApplicationServices::GetUpdatedDestinationKnowledge (für nicht verwalteten Code) abgerufen. Das Melden erfolgreicher Änderungen ist nicht erforderlich, wenn der Anbieter aktualisiertes Zielwissen ausschließlich nach Ende der Änderungsanwendungssitzung abruft. Um eine erfolgreich angewendete Änderung zu melden, rufen Sie ReportItemChangeApplied oder ReportChangeUnitChangeApplied auf (für verwalteten Code), oder Sie rufen IChangeApplicationServices::ReportItemChangeApplied oder IChangeApplicationServices::ReportChangeUnitChangeApplied auf (für nicht verwalteten Code).

Beenden einer Änderungsanwendungssitzung

Wenn alle Änderungen verarbeitet wurden, beendet der Zielanbieter die Änderungsanwendungssitzung durch Aufrufen von EndChangeApplication (für verwalteten Code) oder von IChangeApplicationServices::EndChangeApplication (für nicht verwalteten Code). Das erlangte Wissen, das im Änderungsbatch vom Quellenanbieter enthalten ist, wird an diese Methode übergeben. Der Änderungsanwendungsdienst berechnet das aktualisierte Zielwissen aus dem erlangten Wissen und den als fehlgeschlagen gemeldeten Änderungen. Das aktuelle Wissen des Zielreplikats muss durch das von dieser Methode zurückgegebene aktualisierte Zielwissen ersetzt werden.

Siehe auch

Konzepte

Anwenden von Änderungen