Die Termine der Kladde stehen jetzt im Kalender des Büros. Aber das Büro benutzt Outlook, und Outlook ändert sich: Jemand verschiebt einen Termin per Ziehen, löscht einen, trägt einen Urlaub ein, den die Kladde nicht kennen kann. Diese Lektion baut den Rückweg: Änderungen aus Outlook kommen in die Kladde, ohne jedes Mal den ganzen Kalender zu lesen, ohne Doppelte und ohne dass die Kladde und Outlook sich gegenseitig hin- und herschreiben, bis jemand den Stecker zieht.

Zwei Mittel bietet Graph dafür, und die Lektion verbindet sie: Delta-Abfragen beantworten „Was hat sich seit meinem letzten Blick geändert?“, und Änderungsbenachrichtigungen sagen „Es hat sich etwas geändert“. Learn beschreibt das Zusammenspiel in einem Satz: Eine App kann Benachrichtigungen abonnieren und dann mit Delta alle Änderungen seit der letzten Abfrage holen. Das ist der Plan. Der Rest ist die Frage, was passiert, wenn etwas schiefgeht.

Nicht gegen einen Mandanten ausgeführt. Kein Aufruf dieser Lektion lief gegen einen Microsoft-365-Mandanten. Adressen, Eigenschaften, Fristen und Grenzen stammen aus Microsoft Learn, gelesen für diese Lektion; Antworten des Dienstes werden beschrieben, nicht vorgeführt. Wo Learn eine Frage offen lässt, steht „nicht gelesen“ oder „offen“. Jede Übung mit Mandant sagt es und hat einen Teil, der ohne Mandanten läuft: Hier sind das die meisten, denn die Regeln des Abgleichs sind reine Logik hinter eigenen Schnittstellen.

Teil Was entsteht
Regeln wer gewinnt, was bei Löschung geschieht, wie Echos erkannt werden: sieben Regeln, die der Code und die Tests festhalten
Delta IOfficeCalendarDelta, der Durchgang aus Seiten, nextLink und deltaLink, das Fenster, der abgelaufene Token
Anwenden ChangeApplier: eine Änderung, die Regeln, idempotent; CalendarSync: ein Durchgang
Benachrichtigung Abonnement, Webhook, Validierung, clientState, Verlängerung, Lebenszyklus-Ereignisse
Betrieb CalendarSyncService: Anstoß durch Benachrichtigung, Netz durch Zeitgeber, Tests mit FakeTimeProvider

Wo die Kladde steht

Aus Lektion W4.2.2 haben Sie IOfficeCalendar mit OfficeEvent, OfficeCalendarWriter (legt an und ändert), ICalendarLinks (Termin der Kladde ⇄ Ereignis) und AvailabilityView. Aus K2: die Outbox (Lektion 2.8.4), den Hintergrunddienst mit Anfangsverzögerung und Scope je Lauf (Lektion 2.8.2, „Hintergrunddienste“), AppointmentPlanner mit MoveAsync und den Regeln für Termine (Lektion 2.11.3) und FakeTimeProvider (Lektion 2.8.2).