Die Kladde kennt Termine: Titel, Beginn, Ende, Kontakte, mit Regeln (Viertelstunden, Ende nach Beginn, höchstens acht Stunden, keine Überschneidung). Das Büro lebt aber in Outlook, und dort stehen Dinge, die die Kladde nicht kennt: Urlaub, der Zahnarzt, der Rundgang beim Kunden. In dieser Lektion lernen Sie die Hälfte des Weges, die Graph dafür bietet: Kalender lesen und schreiben. Der Abgleich in beide Richtungen, mit Änderungen, Konflikten und Löschungen, folgt in der nächsten Lektion; hier entsteht das Fundament, auf dem er steht.

Nicht gegen einen Mandanten ausgeführt. Wie in der Lektion davor gilt: Kein Aufruf dieser Lektion wurde gegen einen Microsoft-365-Mandanten ausgeführt. Adressen, Eigenschaften, Grenzen und Codebeispiele stammen aus Microsoft Learn, gelesen für diese Lektion. Wo eine Antwort des Dienstes gezeigt werden müsste, steht eine Beschreibung. Was Learn offen lässt, steht als „nicht gelesen“ oder „offen“ im Text, und die Übungen mit Mandant sagen es und haben einen Teil ohne Mandanten.

Teil Was entsteht
Entscheidung Anwendung oder delegiert: warum der Abgleich der Kladde als Anwendung läuft, auf ein Postfach beschränkt
Lesen calendarView, Zeitzone, Serien, Ausnahmen; die eigene Schnittstelle IOfficeCalendar
Abbilden AppointmentMapper: Termin der Kladde ⇄ Ereignis, ohne Kontaktdaten
Schreiben Anlegen, Ändern, Löschen mit dem SDK; transactionId, Zuordnungstabelle, OfficeCalendarWriter
Frei oder belegt getSchedule, availabilityView, die Verbindung zu den freien Zeiten aus Lektion 2.11.4

Wo die Kladde steht

Aus K2 und der letzten Lektion brauchen Sie:

  • Appointment im Kern mit Id, Title, Time (Beginn und Ende als DateTimeOffset) und ContactIds, dazu den AppointmentPlanner mit den Regeln und dem Fehlercode appointment.time.overlaps (Lektion 2.11.3, „Meilenstein 2: Termine im Büro“). Die Antwort der API, AppointmentResponse(Title, Start, End, ContactIds), hat keine Id (Lektion 2.3.3); für den Abgleich arbeiten wir deshalb mit Appointment selbst, nicht mit der Antwort.
  • die Zeit im Web: Zeitpunkte mit Versatz, die Zeitzone des Büros als Ausgabe, nie als Speicherformat (Lektion 2.3.9, „Zeit im Web“).
  • die Freie-Zeiten-Rechnung FreeSlots und die Buchung (Lektion 2.11.4, „Meilenstein 3: Freie Zeiten und Buchung“).
  • die Outbox mit OutboxMessage, IOutboxDelivery und DeliveryOutcome (Lektion 2.8.4), den Hintergrunddienst (Lektion 2.8.2) und das Projekt Kladde.Graph samt Ausnahme GraphCallException aus Lektion W4.2.1.

Wieder gilt die Regel des Moduls: Der Kern besitzt seine Schnittstellen, das SDK steht dahinter. Der Kern bekommt einen Ordner Kladde.Core/Calendar mit den Typen dieser Lektion, Kladde.Graph die Umsetzung.