Die Kladde erzeugt Angebote als PDF. Bisher gehen sie per Mail an die Kundschaft (Lektion 2.8.5), aber im Büro liegen sie nirgends, wo man sie wiederfindet. Das ändert diese Lektion: Die Kladde legt das PDF in einer Dokumentenbibliothek von Microsoft 365 ab, erzeugt einen Link, den nur Menschen aus dem eigenen Mandanten öffnen können, und meldet das Angebot in einem Teams-Kanal. Dabei lernen Sie, was Graph für Dateien anbietet, wie weit ein Freigabelink reicht, wie man eine Anwendung auf eine Website begrenzt, und warum das Senden in einen Kanal ohne angemeldete Person eine eigene Entscheidung verlangt.

Was Sie mitbringen: die Kladde aus K2 mit den Ports und dem Muster aus Lektion 2.8.5 (IMailSender, DeliveryOutcome), die Outbox aus Lektion 2.8.4 und die Begriffe aus den Lektionen W4.1.2 und W4.2.1: delegierte Berechtigung, Anwendungsberechtigung, Einwilligung. Die Namen der Projekte passen Sie an Ihre Kladde an.

Zum Stand dieser Lektion. Kein Text und kein Befehl dieser Lektion wurde gegen einen Microsoft-365-Mandanten ausgeführt: nicht gegen einen Mandanten ausgeführt. Anfragen, Berechtigungstabellen und Antworten stammen aus den Seiten von Microsoft Learn, die am Ende unter „Weiterlesen“ stehen. Wo eine Seite eine Frage nicht beantwortet, steht „offen“, und die Übungen mit Mandanten sagen, was Sie dort prüfen. Alles, was einen Mandanten braucht, läuft nur in einem Testmandanten, nie in einem Produktivmandanten. Ob Ihnen Microsoft einen Entwicklermandanten für Microsoft 365 anbietet und unter welchen Bedingungen, klären Sie bei Microsoft; die Lektion nennt dazu nichts.

Dateien in Graph: Drive, DriveItem und der Weg dorthin

OneDrive und die Dokumentenbibliotheken von SharePoint zeigt Graph gleich: Eine drive ist ein Speicherplatz, und jede Datei, jeder Ordner in ihr ist ein driveItem. Ein driveItem erreichen Sie auf zwei Arten: über seine Kennung (/drive/items/{item-id}) oder über seinen Pfad (/drive/root:/Ordner/Datei). Die Pfadform ist bequem, hängt aber an den Namen: Wird die Datei umbenannt oder verschoben, ändert sich der Pfad. Die Kennung bleibt. Die Kladde schreibt deshalb mit Pfad (so entsteht die Datei) und merkt sich danach die Kennung, die die Antwort liefert.

Die Seiten zum Hochladen nennen fünf Einstiege für denselben Aufruf:

http
PUT /drives/{drive-id}/items/{parent-id}:/{filename}:/content
PUT /groups/{group-id}/drive/items/{parent-id}:/{filename}:/content
PUT /me/drive/items/{parent-id}:/{filename}:/content
PUT /sites/{site-id}/drive/items/{parent-id}:/{filename}:/content
PUT /users/{user-id}/drive/items/{parent-id}:/{filename}:/content

me meint die angemeldete Person. Ein Hintergrunddienst der Kladde hat keine; er nimmt eine der anderen Formen, am genauesten drives/{drive-id}, weil die Kennung der Bibliothek in der Konfiguration steht und sich nicht ändert. Die Kennung einer Website-Bibliothek erfahren Sie im Testmandanten im Graph Explorer (Lektion W4.1.1), die Kennung der Website selbst mit GET /sites/{hostname}:/sites/{pfad}; das Format dieser Kennung (drei Teile, durch Kommas getrennt) kommt gleich beim Thema Sites.Selected wieder vor.

Welche Berechtigung der Aufruf verlangt

Die Seiten nennen je Aufruf die Berechtigung mit den geringsten Rechten und die höheren. Für die beiden Wege zum Hochladen, die Sie gleich kennenlernen:

Aufruf Delegiert (Arbeits- oder Schulkonto) Anwendung
Datei hochladen (PUT .../content) Files.ReadWrite Files.ReadWrite.All
Upload-Sitzung (createUploadSession) Files.ReadWrite Sites.ReadWrite.All
Freigabelink (createLink) Files.ReadWrite Files.ReadWrite.All

Zwei Dinge fallen auf. Erstens ist jede Anwendungsberechtigung in der Tabelle eine mit .All: Sie gilt für alle Dateien beziehungsweise alle Websites des Mandanten, nicht für die eine Bibliothek, die die Kladde braucht. Das Gegenmittel ist Sites.Selected, der übernächste Abschnitt. Zweitens gelten zwei Seiten einen Hinweis: Den Inhalt einer Datei, die mit einer Vertraulichkeitsbezeichnung (sensitivity label) geschützt ist, ersetzt eine Anwendung ohne angemeldete Person nicht; dafür verlangt Microsoft eine delegierte Berechtigung. Für neue Angebots-PDFs spielt das keine Rolle, für das Überschreiben bestehender Dateien in einer Bibliothek mit Bezeichnungen sehr wohl.

Die Tabellen der beiden Upload-Seiten nennen Sites.Selected nicht. Auf der Seite, die eine Berechtigung auf einem driveItem anlegt (POST .../permissions), steht Sites.Selected dagegen bei den höheren Berechtigungen. Offen: ob ein Hochladen mit Sites.Selected allein gelingt, entscheiden Sie im Testmandanten (Übung 2), nicht aus der Tabelle.