Microsoft Teams begleitet uns ja schon länger und es wird auch immer mehr von unseren KundInnen für die Abwicklung von Projekten eingesetzt. Demnach war es eigentlich nur eine Frage der Zeit, bis ein Kunde die Erstellung eines Teams von der IT-Abteilung auf die ProjektleiterInnen selbst überträgt bzw. auslagert.
Ähnlich wie bei unserer HATAHET Must-Have Provisioning Engine gibt es auch die Möglichkeit, Teams auf Basis einer Vorlage zu provisionieren. Für einen Kunden haben wir ein simplifiziertes User Interface für die Erstellung von Projekt Teams als SPFx Webparts umgesetzt. Dieses kann dann ganz einfach auf einer beliebigen Modern Page innerhalb von SharePoint Online eingesetzt werden.
Teams erstellen mit SPFx Webpart
Nachfolgende Darstellung zeigt ein einfaches User Interface, d.h. einen einfachen SPFx Webpart, um ein Team auf Basis eines existierenden Teams, das als Vorlage dient, zu erstellen.
Es werden nur die Info für den Team-Titel, eine optionale Team-Beschreibung, BesitzerInnen und optionale weitere Teammitglieder benötigt. Es war der Wunsch die Teammitglieder hier optional zu machen, da ein/-e Projektleiter/-in oftmals erst beim echten Projektstart diese kennt, aber das Team schon zuvor angelegt.
Das User Interface ist wirklich sehr einfach gehalten. So ist es natürlich auch denkbar, dass unterschiedliche Vorlagen als Basis für das neue Team herangezogen werden. In unserem Fall war aber die Anforderung nur eine Vorlage zu nutzen und dies eben fix zu „verdrahten“.
Nach dem Klick auf „Team erstellen“ wird im Hintergrund dann das MS Team per Microsoft Graph API erstellt (und alles was darin vorhanden ist, z.B. Planner).
Meine Teams anzeigen als SPFx Webpart
Als User interessiert mich an der Stelle natürlich, welchen Teams ich als Besitzer oder Mitglied hinzugefügt wurde. Dazu gibt es einen weiteren SPFx Webpart von uns, der hilft, diese Teams auf einen Blick anzuzeigen. Natürlich kann dieser auch auf unterschiedlichen Modern Pages innerhalb von SharePoint Online genutzt werden.
Erwähnen sollte man hier, dass es eine Filtermöglichkeit gibt, für den Fall, dass man sehr vielen Teams zugeordnet wurde. Tippt man einen Teil des Team-Namens, in der dafür vorgesehenen Textbox ein, wird das Ergebnis meiner zugeordneten Teams eingeschränkt.
Das oben dargestellte Bild zeigt das soeben erstellte Team „MyTeam01“. Klickt man jetzt auf dieses Team, wird man auf das Team umgeleitet. Wenn man zudem auch die MS Teams App installiert hat, kann man das Team auch in der App verwenden, wie im nachfolgenden Screenshot gezeigt. Andernfalls kann man im Browser weiter arbeiten.
Das neue Team in der MS Teams App
Wenn man die Abbildung genau ansieht, erkennt man auch, dass die Channels des Teams „DWDTemplate01“, das nämlich die Vorlage für die Erstellung war, den Channels des neuen Teams „MyTeam01“ entspricht.
Des Weiteren wurde auch ein MS Planner-Plan erstellt. Dieser Plan wurde ebenfalls per MS Graph API aus der Vorlage „nachgebaut“. Beim Klonen kann nämlich ein Plan nicht automatisch erstellt werden (im Moment ist dies nicht unterstützt), daher wird dieser Plan durch unsere Logik im Nachhinein analog zur Vorlage erstellt und mit dem Tabreiter „Planung“ verknüpft. Standardmäßig wäre nur der Tabreiter vorhanden. Ein Benutzer der den Reiter zum ersten Mal besucht, kann dann mit einem weiteren Klick (also manuell) den Plan anlegen lassen. Dabei handelt es sich dann aber um den Standard Planner-Plan von Microsoft und nicht um unseren Plan, den wir bereits in unser Team-Vorlage ‚DWDTemplate01‘ konfiguriert haben (mit z.B. eigenen Buckets).
Ganz analog verhält sich die Sache auch für weitere Tabs, z.B. einem OneNote, das eine bestimmte Struktur, mit eigenen Sections, Pages und Inhalten haben soll. Auch dieses kann nur per MS Graph API auf Basis einer Vorlage nach dem Klonen des Teams erstellt und „nachgebaut“ werden.
Backend Logik
Technologisch besteht diese Lösung nicht nur aus SPFx Webparts. Es werden hier Microsoft Azure Functions eingesetzt und von den SPFx Webparts als REST Services genutzt. Die Azure Functions sind deswegen notwendig, damit wir das Erstellen eines Teams mit erhöhten Rechten ausführen können. Denn der/die normale Projektleiter/-in ist kein Tenant Admin und hat natürlich nicht das Recht MS Teams anzulegen.
Außerdem müssen noch eine Azure Active Direcotry App angelegt und Rechte dafür vergeben werden. Diese App wird mit „delegated Permissions“ ausgeführt, d.h. also es wird auch ein Service Account Unser benötigt, der Adminstrator sein muss, damit die Teams erstellt werden können.
Fazit
Nach einigen Überraschungsmomenten während der Entwicklung war dann die eigentliche Implementierung problemlos. Die Dokumentation zur MS Graph API und speziell hier für die Nutzung von MS Teams bzw. Groups könnte seitens Microsoft noch verbessert werden. So war es z.B. durchaus problematisch, wenn man mit „App Only“ Rechten arbeiten wollte. Es war unmöglich ein Team sofort zu provisionieren, es dauerte bis zu 16 Stunden bis das Team vorhanden war (in der Teams App). Man konnte die Infos zu diesem Team zwar bereits über die MS Graph API abrufen, nur arbeiten konnte man damit nicht. Zudem waren auch Tippfehler in der Doku für die Konfiguration von Tabs für Teams enthalten.
All diese Fehler bzw. wichtige Informationen wären hilfreich, wenn sie in die Doku eingearbeitet wären und nicht nur als Kommentare von BenutzerInnen (wo möglich im Status „Closed“) am Ende eben dieser.
Für eine vollautomatische Provisionierung von Teams auf Basis einer Vorlage, sollte man immer im Hinterkopf haben, dass man eventuell auch andere Produkte von MS oder auch Drittherstellen berücksichtigen muss.
Will man beispielsweise Planner, One Note, Bots usw. auch automatisch erstellen lassen, muss dies bei der Programmierung natürlich implementiert werden. Sonst hat man Tabs, die erst durch einen User beim ersten Aufruf fertig erstellt werden. Im schlimmsten Fall hat man aber leere Tabs, die auch leer bleiben, weil die Konfiguration zur dahinterliegend Teams App fehlt.
Also falls jemand Hilfe bei der vollautomatischen Teams-Erstellung benötigt, wir können helfen… 😉 Hier können Sie uns kontaktieren.