Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV

Die Seite wird erstellt Rafael Bergmann
 
WEITER LESEN
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
FAKULTÄT INFORMATIK

              Bachelorarbeit

Konzeption und Anbindung eines Messenger Services
               an ein CRM System

                   Martin Bilda

            Betreuer: M.Sc. Thomas Franzke
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
ERKLÄRUNG ZUR BACHELORARBEIT

                                Bilda, Martin

                     Hochschule Landshut
                          Fakultät Informatik

 Hiermit erkläre ich, dass ich die Arbeit selbständig verfasst, noch
nicht anderweitig für Prüfungszwecke vorgelegt, keine anderen als
die angegebenen Quellen oder Hilfsmittel benutzt, sowie wörtliche
     und sinngemäße Zitate als solche gekennzeichnet habe.

       ....................            ....................................................
      (Datum)                          (Unterschrift des Studierenden)
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
Abstract

Im Rahmen dieser Arbeit wurde eine Anbindung eines neuen Messenger Service für Anwen-
der, der CRM-Software ADITO 2020, konzipiert und implementiert. Den Ausgangspunkt
liefert ein Vergleich verschiedener Messenger Services, um herauszufinden welcher Service
die Anforderungen bestmöglich erfüllt. Nach der Entscheidung wurde die Lösung in den,
in Java geschriebenen Unternehmenscode eingearbeitet. Diese Konzeption und Implemen-
tierung ermöglicht ein noch professionelleres und effizienteres Arbeiten für die Kunden.
Abschließend gewährt diese Arbeit einen Ausblick auf mögliche Erweiterungen.
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
Inhaltsverzeichnis

Inhaltsverzeichnis

1 Einleitung                                                                               4
  1.1   Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     4
  1.2   Zielsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    5
  1.3   Aufbau der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      5

2 Thematische Grundlagen                                                                   6
  2.1   Begriffsdefinitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     6
        2.1.1   Customer Relationship Management . . . . . . . . . . . . . .               6
        2.1.2   CRM-System . . . . . . . . . . . . . . . . . . . . . . . . . . . .         6
        2.1.3   Open Authorization . . . . . . . . . . . . . . . . . . . . . . . .         7
  2.2   Vorstellung des Customer Relationship Management (CRM)-Produkts
        ADITO 2020 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       9
        2.2.1   Softwarearchitektur . . . . . . . . . . . . . . . . . . . . . . . .       10
        2.2.2   Software Kern und ADITO-Sytem . . . . . . . . . . . . . . . .             11
        2.2.3   ADITO 2020 Designer . . . . . . . . . . . . . . . . . . . . . . .         11

3 Konzeption                                                                              13
  3.1   Anforderungsanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . .       13
        3.1.1   Nichtfunktionale Anforderungen . . . . . . . . . . . . . . . . .          13
        3.1.2   Funktionale Anforderungen . . . . . . . . . . . . . . . . . . . .         14
  3.2   Erläuterung der Umsetzung . . . . . . . . . . . . . . . . . . . . . . . .         17

                                            1
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
Inhaltsverzeichnis

4 Messenger Service Vergleich                                                             18
  4.1   Vergleichskriterien . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     18
        4.1.1   Java-Anbindung . . . . . . . . . . . . . . . . . . . . . . . . . .        18
        4.1.2   Lizenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    18
        4.1.3   Dokumentation und Problemhilfe . . . . . . . . . . . . . . . .            19
        4.1.4   Verbreitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     19
        4.1.5   Aktualität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    19
        4.1.6   Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    19
  4.2   Gewichtung und Punkte . . . . . . . . . . . . . . . . . . . . . . . . . .         20
  4.3   Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   20
        4.3.1   Microsoft Teams . . . . . . . . . . . . . . . . . . . . . . . . . .       21
        4.3.2   Slack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   22
        4.3.3   Mattermost . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      24
        4.3.4   Stackfield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    25
  4.4   Entscheidung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      28

5 Implementierung                                                                         29
  5.1   Entwicklungswerkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . .         29
  5.2   Verwendete Technologien . . . . . . . . . . . . . . . . . . . . . . . . .         29
        5.2.1   ScribeJava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    29
        5.2.2   Microsoft Graph API . . . . . . . . . . . . . . . . . . . . . . . .       30
  5.3   Zusammenhang zwischen ADITO, Microsoft Graph-API, Microsoft
        Azure und Microsoft Teams . . . . . . . . . . . . . . . . . . . . . . . .         32
  5.4   Vorbereitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    33
  5.5   Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       36
        5.5.1   public class OAuth2AuthenticationProvider . . . . . . . . . .             37
        5.5.2   Erzeugen eines OAuth2 Tokens . . . . . . . . . . . . . . . . . .          37
        5.5.3   public class TeamsModul . . . . . . . . . . . . . . . . . . . . .         40
        5.5.4   Funktion: createTeam . . . . . . . . . . . . . . . . . . . . . . .        40
        5.5.5   public class JScriptTeams . . . . . . . . . . . . . . . . . . . . .       46

                                            2
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
Inhaltsverzeichnis

   5.6    Erstellung der Graphischen Benutzeroberfläche . . . . . . . . . . . .            47
          5.6.1   Erstellung des zugehörigen Buttons "Team erstellen“ . . . . .            49

6 Fazit                                                                                    51
   6.1    Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        51
   6.2    Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   52

Abbildungsverzeichnis                                                                      58

Tabellenverzeichnis                                                                        59

Listings                                                                                   60

Glossar                                                                                    61

Akronyme                                                                                   64

                                              3
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
1 Einleitung

1 Einleitung

1.1 Motivation

In Zeiten der agilen Softwareprogrammierung wird es immer wichtiger schnell auf
Änderungen reagieren zu können. Der Wettlauf gegen die Zeit und Konkurrenz
lässt wenig Spielraum für auf sich wartende Besprechungen mit Terminvereinba-
rung. Alle Mitarbeiter sollen möglichst ohne Verzögerung Kontakt untereinander
aufnehmen können, um relevante Themen schnellstmöglich abzuklären. Ein Mes-
senger Service (MS) ist eine schnelle, einfache und professionelle Lösung, um die
Kommunikation in einem Unternehmen sicher zu stellen. Einer der vielen Vorteile
ist zum Beispiel, dass mehreren Kollegen miteinander kommunizieren und zeit-
gleich Nachrichten senden und empfangen können. Neben dem klassischen Chat
ist es auch möglich eine Telefonkonferenz abzuhalten. Solch ein Telefongespräch
kann mit wenigen Mausklicks in eine Videokonferenz umgewandelt werden. Da-
durch können Mitarbeiter entweder selbst vor die Kamera treten oder es wird der
Bildschirm übertragen, um Anschaulichkeit in die Diskussion zu bringen. Dies sind
nur einige von vielen Gründen, weshalb immer mehr Unternehmen einen MS ver-
wenden. Jedoch findet ein stetiger Wechsel zwischen der verwendeten Software
und dem MS statt.
Dieser Medienbruch stört die Konzentration und beeinträchtigt die Performance
beim Arbeiten (vgl. “Anbindung an Microsoft Teams - Grundfunktionalität (un-
veröffentlicht)” 2020). Deshalb soll eine Anbindung für ADITO entwickelt werden,
welche es ermöglicht, aus der Unternehmenssoftware heraus, einen solchen MS zu
bedienen und verschiedenste Aktionen auszuführen.

                                       4
Bachelorarbeit FAKULTÄT INFORMATIK - Martin Bilda Betreuer: M.Sc. Thomas Franzke - OPUS 4 - KOBV
1 Einleitung

1.2 Zielsetzung

Im Rahmen dieser Arbeit soll eine Anbindung an einen MS, für die CRM-Software
ADITO 2020, konzipiert und implementiert werden. Hierfür werden zuerst unter-
schiedliche MSs verglichen, um eine Übersicht über die aktuellen Softwarelösungen
der verschiedenen Hersteller zu erhalten und das bestmögliche Produkt zu finden.
Anschließend wird die Anbindung der gewählten Software implementiert.

1.3 Aufbau der Arbeit

Diese Arbeit gliedert sich in sechs Kapitel. Das erste Kapitel beschreibt Motiva-
tion und Ziel der Arbeit. Im zweiten Kapitel werden grundlegende Begriffe der
Bereiche CRM und Open Authorization (OAuth) definiert. Darüber hinaus wird
die CRM-Software ADITO 2020 vorgestellt, in der die entwickelte Anbindung ihre
Anwendung findet. Inhalt des dritten Kapitels ist eine Analyse der Anforderun-
gen an die zu entwickelnde Anbindung. Im darauffolgenden Abschnitt werden
verschiedene Vergleichskriterien gesammelt, um im Anschluss MSs anhand dieser
zu vergleichen. Als Abschluss dieses Kapitels erhält der Leser einen tabellarischen
Vergleich der in Frage kommenden MSs und eine kurz begründete Entscheidung
welcher Service gewählt wird. Kapitel Fünf zeigt die konkrete Umsetzung und
Implementierung der Arbeit, sowie die verwendeten Techniken und Werkzeuge.
Im letzten Abschnitt wird das Ergebnis der Arbeit kurz zusammengefasst und ein
Ausblick auf mögliche Erweiterungen gegeben.

                                        5
2 Thematische Grundlagen

2 Thematische Grundlagen

2.1 Begriffsdefinitionen

2.1.1 Customer Relationship Management

"CRM umfaßt die Planung, Durchführung, Kontrolle sowie Anpassung aller Unter-
nehmensaktivitäten, die zu einer Erhöhung der Profitabilität der Kundenbeziehung
und damit zu einer Optimierung des Kundenportfolios beitragen"(Christian Hom-
burg/Frank Sieben 2000, S. 7).
Die wichtigsten Charakteristika des CRM sind folgende:

   • Kundenorientierung

   • Wirtschaftlichkeitsorientierung

   • Individualisierung

   • IT-Anwendung

(vgl. Christian Homburg/Frank Sieben 2000, S. 7f)

2.1.2 CRM-System

Als CRM-System bezeichnet man die Software, welche verwendet wird, um die
genannten Eigenschaften und Ziele des CRM-Ansatzes systematisch umzusetzen.
Ein CRM-System kann in drei verschiedene Bereiche eingeteilt werden. Darun-
ter zählen die operativen Instrumente. Diese unterstützen den direkten Kunden-
kontakt. Die kollaborativen Instrumente, welche die Interaktion zwischen einem

                                       6
2 Thematische Grundlagen

Unternehmen und dessen Kunden betreffen und die Analytischen Instrumente,
die auf die Erfassung, Aufbereitung und anwendungsorientierte Auswertung von
Kundendaten abzielen (vgl. Prof. Dr. Heinrich Holland 2018).

2.1.3 Open Authorization

"OAuth [...] ist ein offenes Standardprotokoll, das eine sichere API-Autorisierung
ermöglicht"(IONOS 2020).

OAuth2

Die Aufgabe von OAuth2 ist es, mittels API-Autorisierung dem Nutzer mehr Flexi-
bilität bei gleichzeitig hoher Sicherheit zu ermöglichen. Des Weiteren werden keine
kryptografischen Signaturen für jede Maschine-zu-Maschine-Kommunikation im
Protokollablauf benötigt. OAuth2 wurde zusätzlich um stärker differenzierte Ge-
nehmigungsprozesse erweitert und die Performance verbessert. Zudem kann der
Anwender selbst entscheiden, welche Berechtigungen er einer Anwendung zuge-
steht (vgl. IONOS 2020).

Rollen bei OAuth2

IONOS unterscheidet in ihrem Beitrag vier Rollen:

   • Resource Owner: eine Entität, die einem Client Zugriff auf seine geschützten
     Daten gewährt

   • Resource Server: ein Server, auf dem die geschützten Daten des Resource
     Owners gespeichert sind

   • Client: eine Anwendung, die auf die geschützten Daten des Resource Owners
     zugreifen will

   • Authorization Server: ein Server, der den Resource Owner authentifiziert
     und einen zeitlich begrenzten Access-Token ausstellt

(2019)

                                        7
2 Thematische Grundlagen

Genehmigungsprozesse bei OAuth2

OAuth2 besitzt vier vordefinierte Genehmigungsprozesse, die in verschiedenen
Anwendungsfällen eingesetzt werden:

   • Autorisierungscode: der Client erhält durch das Einloggen am Authorization
     Server einen Autorisierungscode. Im Austausch für diesen Code stellt der
     Authorization Server einen Access-Token aus

   • Implizite Autorisierung: der Client erhält durch das Einloggen am Authori-
     zation Server direkt ein Access-Token

   • Passwortfreigabe durch den Resource Owner: Benutzername und Passwort
     werden dem Client übergeben, welcher sich damit am Authorization Server
     authentifizieren kann

   • Client-Berechtigung: durch die Registrierung einer Applikation entstehen
     neue Einlogdaten, mit denen sich der Client authentifizieren kann

(vgl. IONOS 2020)

Funktionsweise von OAuth2

Nachfolgend ist ein Beispiel gegeben, wie ein solcher Protokollablauf aussehen
kann:

  1. "Der Client fordert entweder direkt oder über den Authorization Server eine
     Autorisierung vom Resource Owner an"

  2. "Der Resource Owner erteilt eine Autorisierungsgenehmigung mittels eines
     Genehmigungsprozesses"

  3. "Der Client fordert mit der Autorisierungsgenehmigung einen Access-Token
     vom Authorization Server an"

  4. "Der Authorization Server authentifiziert den Client anhand seiner Autorisie-
     rungsgenehmigung und stellt einen Access-Token aus"

                                        8
2 Thematische Grundlagen

  5. "Der Client benutzt den Access-Token, um die relevanten [und] geschützten
     Daten des Resource Owners beim Resource Server anzufragen"

  6. "Der Resource Server authentifiziert den Client anhand seines Access-Tokens
     und stellt die gewünschten Daten zur Verfügung"

(IONOS 2020)

      Abb. 2.1: Abstrakter OAuth2 Protokollablauf. Quelle: (IONOS 2020)

2.2 Vorstellung des CRM-Produkts ADITO 2020

ADITO 2020 ist die aktuelle Version der verwendeten CRM-Software. Die zu ent-
wickelnde Anbindung an einen MS wird dafür konzipiert und implementiert.

                                       9
2 Thematische Grundlagen

2.2.1 Softwarearchitektur

In Abbildung 2.2 wird die Softwarearchitektur von ADITO dargestellt.
Grundsätzlich handelt es sich um ein Drei-Schichten-Modell. Über das Netzwerk-
protokoll TCP/IP kommunizieren die Clients mit dem Anwendungsserver (ADITO
Server). Dieser wiederum verbindet sich ebenfalls über TCP/IP auf Datenbanken,
die in der Regel auf einem eigenen Datenbank-Server liegen. Die Verbindung zwi-
schen Anwendungsserver und Datenbank wird über einen JDBC-Treiber hergestellt
(vgl. “ADITO Software GmbH: Betriebshandbuch (unveröffentlicht)” 2018, S. 10).

Abb. 2.2: ADITO 2020 Softwarearchitektur: Drei-Schichten-Modell. Quelle: (ADITO
         2020)

                                      10
2 Thematische Grundlagen

2.2.2 Software Kern und ADITO-Sytem

Grundsätzlich kann die Software in Software-Kern und ADITO-System unterteilt
werden. Der Kern besteht aus mehreren JAR-Dateien und stellt die Grundfunktio-
nen bereit. Dieser ist in allen ADITO Installationen, unabhängig von Größe und
Einsatzzweck des Systems, identisch. Das ADITO-System beinhaltet die Summe
an ADITO-Datenmodellen, aus welchen eine individuelle ADITO Installation be-
steht. Hier können system- und kundenspezifische Anpassungen individuell vor-
genommen werden. (vgl. “ADITO Software GmbH: Betriebshandbuch (unveröf-
fentlicht)” 2018, S. 10). Die Anbindung an einen MS wird als eigene API entwickelt.
Somit stehen im Kern die Grundfunktionalitäten zur Verfügung und können im
ADITO-System individuell für jeden Kunden angepasst werden. Daher findet die
Implementierung überwiegend im Software-Kern statt. Das ADITO-System wird
zusätzlich um eine Oberfläche, mit Hilfe des ADITO 2020 Designers, zum Bedie-
nen der Funktionen erweitert. Der Fokus dieser Arbeit liegt auf der Entwicklung
eines Konzepts, der Auswertung von Kriterien innerhalb eines Vergleichs für den
passenden Service und der Implementierung der Anbindung.

2.2.3 ADITO 2020 Designer

Der in Abbildung 2.3 dargestellte ADITO 2020 Designer ist eine Entwicklungsum-
gebung, um mit dem vorher beschriebenen ADITO-System zu arbeiten. Er dient
zur Entwicklung und Verwaltung von ADITO-Datenmodellen. Innerhalb des De-
signers wird mit der Programmiersprache JDito gearbeitet. JDito basiert auf dem
Sprachkern von JavaScript. Zusätzlich stellt JDito aditospezifische Objekte, Me-
thoden, Variablen und Konstanten zur Verfügung (vgl. “ADITO Software GmbH:
Designerhilfe (unveröffentlicht)” 2018).

                                           11
2 Thematische Grundlagen

Abb. 2.3: ADITO 2020 Designer. Quelle: eigene Abbildung

                          12
3 Konzeption

3 Konzeption

3.1 Anforderungsanalyse

In diesem Abschnitt werden funktionale und nicht funktionale Anforderungen an
die Anbindung des MSs definiert und beschrieben. Abschließend wird der Umset-
zungsplan für die Anbindung auf der Grundlage dieser Anforderungen erläutert.

3.1.1 Nichtfunktionale Anforderungen

"Nichtfunktionale Anforderungen sind Anforderungen,[sic!] an die “Qualität“[,] in
welcher die geforderte Funktionalität zu erbringen ist"(R.Heini o. J.). Im Nachfol-
genden werden die drei Wichtigsten kurz erläutert.

Sicherheit

Die Anbindung eines MS hat unter Umständen zur Folge, dass vertrauliche In-
formationen abgerufen werden. Dabei muss sichergestellt sein, dass diese aus Si-
cherheitsgründen nicht gespeichert oder an Dritte weiter gegeben werden. Sollen
Daten gespeichert werden, obliegt dies dem Anwender dies zu tun. Alle nicht
verwendeten Daten werden unwiderruflich gelöscht bzw. vom Garbage Collector
vernichtet.

Benutzbarkeit

Durch die Anbindung eines MS an die ADITO-Software wird dem Anwender eine
schnelle und unkomplizierte Möglichkeit geboten den Dienst ohne Medienbruch

                                        13
3 Konzeption

zu bedienen. So können Wissen und Informationen schnell geteilt und verbreitet
werden. Dies erspart den Kunden nicht nur Zeit, sondern bietet ihnen auch ein
komfortables Arbeiten mit dem Produkt.

Effizienz

Um eine angenehme Arbeitsatmosphäre innerhalb der Software zu bieten, sollte
diese die Ressourcen des Computers nicht überlasten. Bei Abfragen von Daten
werden nach Möglichkeit nur benötigte Informationen abgefragt, die zur Weiter-
verarbeitung notwendig sind. Eine Abfrage, die alle und somit auch nicht relevante
Eigenschaften eines Objekts liefert, muss im Software-Kern erst gefiltert werden,
um diese weiter zu verarbeiten. Dies benötigt Rechenaufwand und sollte daher aus
performancetechnischen Gründen vermieden werden. Aus diesem Grund wird
hier das Prinzip von Lazy Load angewendet, um so wenig Daten wie möglich
abzurufen.

3.1.2 Funktionale Anforderungen

"Funktionale Anforderungen beschreiben gewünschte Funktionalitäten [...] eines
Systems [...]"(R.Heini o. J.). Dieser Teil der Anforderungsanalyse setzt sich größten-
teils aus Kundenanforderungen, Erfahrungen aus vergangenen Kundenprojekten
und ADITO-firmeninternen Anforderungen zusammen.

Gruppenchat erstellen

Ein großer Vorteil von MSn ist es einen Gruppenchat zu benutzen, in welchem
Mitarbeiter zeitgleich über ein Thema diskutieren können. Dafür muss dieser zuerst
erstellt und Mitglieder hinzugefügt werden.

Gruppenchat einem ADITO-Projekt zuordnen

Viele Projekte in Unternehmen wachsen stetig an und erstrecken sich über mehrere
Abteilungen. In solch einer Situation ist es nicht ungewöhnlich, dass Projektmit-

                                         14
3 Konzeption

glieder den Überblick über die verschiedenen Gruppenchats verlieren und somit
die Performance des Projekts in Mitleidenschaft gezogen wird. Mit Hilfe einer Zu-
ordnung der Kardinalität 1:n wird dem Problem entgegengewirkt. So existiert zu
einem Projekt genau ein Gruppenchat. Hingegen kann ein Gruppenchat auch für
mehrere Projekte relevant sein. Diese Verknüpfung ermöglicht es den Überblick zu
bewahren und in Teil- oder Unterprojekten den selben Gruppenchat zu nutzen.

Gruppenchat löschen

Wird ein Gruppenchat nicht länger benötigt, soll es möglich sein diesen aus ADI-
TO heraus zu löschen. Somit wird der Überblick gewährleistet. Ein Löschvorgang
soll im ersten Moment nicht permanent sein, um ungewollte Löschungen wieder
Rückgängig machen zu können. Deshalb wird der Gruppenchat vorerst archiviert
und erst nach Ablauf einer festgelegten Dauer unwiderruflich gelöscht.

Untergruppen erstellen

Oftmals betrifft das zu diskutierende Thema nicht alle Mitglieder eines Gruppen-
chats. Eine Lösung dafür ist es, eine Untergruppe zu erstellen und die Besprechung
dorthin zu verlagern.

Chatnachrichten in ADITO speichern

Nicht selten werden in einem Gruppenchat wichtige Informationen geteilt. Diese
sollen an einer zentralen Stelle in ADITO gespeichert werden. Durch eine Abfrage
soll eine bestimmte Anzahl von Nachrichten abgerufen werden, die dem Benutzer
in einer Tabelle aufgelistet werden. Der Anwender kann dann, wenn er das möchte,
die wichtigsten Informationen auswählen und im ADITO-System in die Datenbank
speichern.

                                       15
3 Konzeption

Projektänderungen automatisch in den Gruppenchat senden

Eine Änderung am Projekt betrifft alle Mitglieder. Durch eine automatisch über-
mittelte Nachricht im verknüpften Gruppenchat sollen alle Projektmitglieder mög-
lichst schnell darüber informiert werden, welche Details sich geändert haben. Ein
großer Vorteil von MSn ist es, dass diese auch mobil verfügbar sind und abgeru-
fen werden können. Somit kann jedes Projektmitglied, unabhängig des Standortes,
über Änderungen informiert und auf dem neuesten Stand gehalten werden.

Geschickte Dokumente in ADITO speichern

Nicht nur Nachrichten, sondern auch Dokumente sind wichtige Informationen.
Für den Anwender soll es möglich sein, Dateien aus dem MS abzurufen und in
das ADITO-System hochzuladen, damit diese, wie auch die Nachrichten, an einer
zentralen Stelle in ADITO vorhanden sind.

Bestimmte Befehle als Chatnachricht sollen Aktionen in ADITO auslösen

Bespricht man in einem Gruppenchat wichtige Themen, ist es nicht vorteilhaft das
Medium zu wechseln.
Dieser Medienbruch verursacht Konzentrationsstörungen und senkt die Perfor-
mance (vgl. “Anbindung an Microsoft Teams - Grundfunktionalität (unveröffent-
licht)” 2020). Um eine bestmögliche Kundenzufriedenheit zu erreichen, soll dies
verhindert werden. Mit Hilfe einer selbst entwickelten Syntax soll dem Anwen-
der die Möglichkeit geschaffen werden bestimmte Befehle in einen Gruppenchat
zu schreiben, die Aktionen in ADITO auslösen. So muss der Benutzer nicht mehr
zwischen den Anwendungen wechseln und kann weiterhin an der Unterhaltung
teilnehmen.

                                       16
3 Konzeption

3.2 Erläuterung der Umsetzung

In Kapitel 2.2.3 wird kurz auf die Programmiersprache JDito eingegangen. Wie
bereits erwähnt enthält JDito nebem dem Sprachkern von JavaScript auch adi-
tospezifische Objekte, Methoden, Variablen und Konstanten. Diese Bestandteile
werden im Software-Kern implementiert und stehen dann im ADITO Designer
zur Verfügung. Nicht alle Kunden arbeiten mit dem ausgewählten Service, daher
muss im sogenannten Customizing angepasst werden, ob die Funktionen in einer
kundenspezifischen Installation zur Verfügung stehen oder nicht. Für dieses De-
signprinzip existieren die aditospezifischen Bestandteile. Im Software-Kern wird
eine neue API entwickelt, die im ADITO Designer verwendet werden kann. Für
alle Anforderungen wird eine Funktion erstellt, welche diese so effizient und sicher
wie möglich umsetzt und mit der Oberfläche verknüpft werden kann.

                                        17
4 Messenger Service Vergleich

4 Messenger Service Vergleich

Vor der Recherche wurden verschiedene Kriterien festgelegt.
Angelehnt an eine Nutzwertanalyse, wird jedem Kriterium eine Gewichtung zuge-
ordnet (vgl. Prof. Dr. Klaus Wübbenhorst u.a. 2018). Anschließend werden für jeden
MS die Kriterien kurz erläutert, bewertet und mit der Gewichtung multipliziert.
Die Summe der gewichteten Kriterien wird abschließend berechnet und für jeden
MS tabellarisch festgehalten. Am Ende werden diese miteinander verglichen und
entschieden, welcher am besten für die Anbindung geeignet ist.

4.1 Vergleichskriterien

4.1.1 Java-Anbindung

Die Java-Anbindung des MS ist eines der wichtigsten Kriterien. Damit eine Anbin-
dung an das ADITO-System möglich ist, benötigt der MS eine Schnittstelle, die es
ermöglicht, über die Programmiersprache Java, Aktionen codetechnisch auszufüh-
ren. Dies bedeutet, dass die Auswahl der MSs auf diejenigen begrenzt ist, die ein
SDK oder eine API für Java anbieten.

4.1.2 Lizenz

Die Lizenz der Schnittstelle spielt ebenfalls eine wichtige Rolle, denn der Code sollte
frei einsehbar sein, um einen genauen Überblick über Hintergrundprozesse und
Funktionen zu erhalten. Gleichzeitig sollte diese ohne Kosten kommerziell genutzt
werden können. Aus diesen Gründen werden ausschließlich MSs untersucht, deren

                                          18
4 Messenger Service Vergleich

Anbindung mit einer Open Source License zur Verfügung steht.

4.1.3 Dokumentation und Problemhilfe

Eine ausführliche Dokumentation ermöglicht eine selbstständige Einarbeitung und
erleichtert die Weiterentwicklung des Projekts, unabhängig von dem eigentlichen
Entwickler. Eine möglichst große Community sorgt dafür, dass Probleme und Feh-
ler schnell gefunden und behoben werden können. Zudem gibt es vermehrt Ent-
wickler, die bei Problemen schnelle Hilfe leisten können und somit den eigenen
Entwicklungsprozess beschleunigen. Aber nicht nur die Quantität, sondern auch
die Qualität, spielt bei Dokumentationen und Problemhilfen eine Rolle. Eigene Fo-
ren der Anbieter oder Foren, in welchen Mitarbeiter des Herstellers behilflich sind,
zeichnen eine gute Problemhilfe aus.

4.1.4 Verbreitung

Die Anbindung soll den Kunden das Arbeiten mit ADITO angenehmer gestalten.
Da eine solche Schnittstelle ein neuer Meilenstein im ADITO-System ist und im
Rahmen dieser Arbeit, die erste ihrer Art entwickelt wird, ist es wichtig ein mög-
lichst großen Kundenkreis mit dieser Schnittstelle abzudecken.

4.1.5 Aktualität

Die Aktualität der Anbindung ist ein weiteres wichtiges Kriterium. Um zu ver-
hindern, dass eine Anbindung gewählt wird, die schon seit längerem nicht mehr
aktualisiert wurde oder nur sporadisch weiterentwickelt wird, werden die letzten
Updates, beziehungsweise sogenannte Commits, überprüft.

4.1.6 Features

Ein MS ist inzwischen nicht mehr nur ein Dienst, der als Chat-Programm Verwen-
dung findet. Features sind keine Notwendigkeit, aber je mehr ein Service davon

                                        19
4 Messenger Service Vergleich

bietet, desto interessanter. Natürlich besteht die Devise "Quality over Quantity",
aber ein MS der neben Nachrichten kommunizieren zusätzlich Telefonie, Video-
konferenzen und Cloud-Speicher unterstützt erhält im Vergleich mehr Punkte, als
ein einfacher Messengerdienst.

4.2 Gewichtung und Punkte

Wie bereits erwähnt wird den definierten Kriterien eine Gewichtung zugeordnet.
Eine Gewichtung mit der Nummer vier entspricht essentiell, drei sehr wichtig, zwei
wichtig und eins optional. Die Punktevergabe bewegt sich auf einer Skala von eins
(sehr schlecht) bis zehn (sehr gut).

                  Kriterium                           Gewichtung
                  Java-Anbindung                             4
                  Lizenz                                     4
                  Dokumentation und Problemhilfe             3
                  Verbreitung                                2
                  Aktualität                                 3
                  Features                                   1

                     Tab. 4.1: Gewichtung der Vergleichskriterien

4.3 Vergleich

Im Folgenden werden mehrere MSs anhand der vorher definierten Kriterien vor-
gestellt. Um diesen Teil der Arbeit kompakt zu halten, wird nur auf bestimmte
Kriterien eingegangen. Daraufhin wird für jeden Service eine Tabelle mit allen
gewichteten Kriterien bereitgestellt. Somit werden auch die nicht erläuterten Ver-
gleichskriterien miteinbezogen.

                                          20
4 Messenger Service Vergleich

4.3.1 Microsoft Teams

Java-Anbindung

Die Anbindung an Microsoft Teams (MST) erfolgt über die, ebenfalls von Microsoft
entwickelte, Microsoft Graph (MSG)-API. Diese Schnittstelle wird als Java-SDK
zur Verfügung gestellt und kann über Maven eingebunden werden (vgl. Deepak
Agrawal u.a. 2020b).

Dokumentation und Problemhilfe

Microsoft bietet eine umfangreiche Dokumentation. In den Microsoft-Docs werden
alle verfügbaren Funktionen ausführlich erklärt und meistens auch ein Beispielcode
angehängt. Dies erleichtert das Einarbeiten in die Materie. Neben der qualitativ
hochwertigen Dokumentation, gehört die Microsoft Community zu den größten der
Welt. Unzählige Foren von Microsoft selbst bieten Hilfestellung oder Problemhilfe
an und geben Auskunft über Bugs oder Updates. Das bekannteste Forum ist das
“Stackoverflow-Forum", in dem Microsoft-Mitarbeiter aktiv sind und auf Fragen
eingehen.

Aktualität

Microsoft entwickelt mit der Programmiersprache C#. Aus diesem Grund wird das
Java-SDK nicht mit vollem Ehrgeiz verfolgt. Dennoch werden meistens monatlich
neue Updates zur Verfügung gestellt (vgl. Deepak Agrawal u.a. 2020a).

Features

Neben der normalen Kommunikationsmöglichkeit von Nachrichten schreiben, bie-
tet MST eine Vielzahl von Features. Telefonie, Videokonferenz und ein gemeinsa-
mer Cloud-Speicher, den sogenannten Sharepoint-Sites, sind nur eine Teilmenge
von den zusätzlichen Funktionen von Teams. Auch man selbst kann das Arbeiten
mit Teams verbessern, indem eine eigene MST Applikation entwickelt wird, die
einfach in einen Gruppenchat installiert werden kann.

                                       21
4 Messenger Service Vergleich

Zusammenfassung

  Kriterium          Information                    Gewicht · Punkte Punkte
  Java-Anbindung     SDK                            4 · 10           40
  Lizenz             MIT (vgl. Deepak Agrawal       4 · 10           40
                     2018)
  Dokumentation      sehr ausführlich und qua-      3 · 10           30
  und Problemhilfe   litativ   sehr   hochwertig,
                     große Community
  Verbreitung        20 Millionen aktive Nutzer     2 · 10           20
                     pro Tag (vgl. Jared Spataro
                     2019)
  Aktualität         Commits: monatlich             3·6              18
  Features           sehr viele                     1·9              9
  Summe              –                              –                157

                      Tab. 4.2: Microsoft Teams Kriterien

4.3.2 Slack

Java-Anbindung

Auch Slack bietet als Schnittstelle ein SDK an, das von GitHub heruntergeladen
oder über Maven eingebunden werden kann (vgl. Kazuhiro Sera u.a. 2020b).

Dokumentation und Problemhilfe

Neben einer ausführlichen und qualitativ sehr guten Dokumentation, bietet Slack
selbst eine überschaubare Anzahl von Möglichkeiten, um Auskunft über Fragen
zu erhalten. Zum Einen die sogenannte Slack Community, die eine Art Forum für
Slack-Entwickler ist. Zum Anderen ein Slack-Support-Center, in welchem jedoch
vorrangig Anwendungsproblemen und keinen Entwicklungsproblemen entgegen
gewirkt wird.

                                        22
4 Messenger Service Vergleich

Aktualität

Den letzten Commits zufolge, werden fast täglich Verbesserungen in den Code der
Schnittstelle eingearbeitet (vgl. Kazuhiro Sera u.a. 2020a).

Features

Audio- und Videokonferenzen oder versenden von Dokumenten sind in Slack kein
Problem. Integrierte Apps wie zum Beispiel Google-Drive, Dropbox oder Salesforce
können in Untergruppen hinzugefügt werden. Zusätzlich ist es möglich, mit einer
von Slack zur Verfügung gestellten Bibliothek namens “Bolt“, einen eigenen Slack-
Client zu entwickeln.

Zusammenfassung

  Kriterium             Information                     Gewicht · Punkte Punkte
  Java-Anbindung        SDK                             4 · 10          40
  Lizenz                MIT (vgl. Kazuhiro Sera         4 · 10          40
                        2020)
  Dokumentation         ausführlich und hochwer-        3·7             21
  und Problemhilfe      tig, große Community
  Verbreitung           12 Millionen aktive Nutzer      2·8             16
                        pro Tag (vgl. Brian Elliott
                        2019)
  Aktualität            Commits: fast täglich           3·9             27
  Features              sehr viele                      1·9             9
  Summe                 –                               –               153

                                Tab. 4.3: Slack Kriterien

                                           23
4 Messenger Service Vergleich

4.3.3 Mattermost

Java-Anbindung

Wie schon die zwei Vorgänger liefert auch Mattermost ein SDK, dass man über
GitHub oder Maven in das eigene Projekt einbinden kann. Dieses stellt die Grund-
funktionalitäten zur Verfügung (vgl. Takayuki Maruyama u.a. 2020b).

Dokumentation und Problemhilfe

Mattermosts Dokumentation ist sehr umfangreich und bietet, an gleicher Stelle,
zusätzlich eine Demo-Umgebung an, in welcher die verschiedenen Befehle getestet
werden können. Neben diesen Informationen bietet Mattermost auch Videokurse
in der Mattermost-Academy an.

Aktualität

Wöchentlich werden neue Updates in den Code eingearbeitet. Allerdings lässt sich
auf der "Contributor-Seite"von GitHub entnehmen, dass an dieser Java-Schnittstelle
nur wenige Entwickler arbeiten (vgl. Takayuki Maruyama u.a. 2020a). Besteht das
Team nur aus wenigen Mitgliedern, kann dies auf lange Sicht ein Problem darstel-
len, da ein kleines Entwicklungsteam schnell aufgelöst werden kann.

Features

Mattermosts größtes Feature ist, dass es ein OpenSource-Programm ist. Das heißt
nicht nur die Java-Anbindung kann eingesehen werden, sondern der komplette
Code des MSs. Somit können Unternehmen ihren eigenen Dienst entwickeln, der
auf dem Kern von Mattermost basiert.
So entwickelte zum Beispiel Uber ein eigenes Kommunikationsprogramm namens
uChat (vgl. Oliver Voss 2018). Auch die grundsätzlichen Features, wie Sprach- und
Videoanruf oder Bildschirmübertragung sind bei Mattermost vorhanden.

                                       24
4 Messenger Service Vergleich

Zusammenfassung

  Kriterium            Information                    Gewichtung        ·   Punkte
                                                      Punkte
  Java-Anbindung       SDK                            4 · 10                40
  Lizenz               Apache License 2.0 (vgl.       4·8                   32
                       Takayuki Maruyama 2017)
  Dokumentation        weniger ausführlich und        3·6                   18
  und Problemhilfe     hochwertig, eher kleine
                       Community
  Verbreitung              600 Tausend Downloads 2 · 5                      10
                       (vgl. Matt Asay 2019)
  Aktualität           Commits: fast wöchentlich      3·7                   21
  Features             viele und OpenSource           1·9                   9
  Summe                –                              –                     130

                      Tab. 4.4: Mattermost Zusammenfassung

4.3.4 Stackfield

Java-Anbindung

Als einzige Lösung verzichtet Stackfield auf ein SDK und bietet nur eine API,
mit deren Hilfe man sogenannte Webhooks aufrufen kann. Diese müssen zuvor im
Stackfield-Client hinterlegt werden (vgl. Stackfield o. J.[c]). Ohne ein zur Verfügung
gestelltes SDK muss viel Aufwand betrieben werden, um den Anforderungen der
API gerecht zu werden, da man den Java-Code selbst programmieren muss.

Dokumentation und Problemhilfe

Stackfield selbst bietet eine Dokumentation, welche für die wenigen Funktionen
ausführliche Informationen bereitstellt.

                                           25
4 Messenger Service Vergleich

Laut Unternehmenswebseite wird Stackfield von 10000 Kunden genutzt (vgl. Stack-
field o. J.[a]).
Dies ist ein kleiner Prozentsatz im Vergleich zu der Konkurrenz. Durch die geringe
Verbreitung fällt die Community klein aus. Darunter leidet auch die Problemhilfe,
da es weniger Entwickler gibt, die sich mit Stackfield beschäftigen.

Aktualität

Da es von Stackfield kein SDK gibt, in welchem neuer Code upgedatet wird,
kann über die Aktualität keine Aussage getroffen werden. Auch auf der API-
Dokumentations-Webseite befinden sich keine Angaben, ob diese auf einem ak-
tuellen Stand gehalten wird.

Features

Sicherheit steht bei Stackfield an erster Stelle. Eines der wichtigsten Features des
MSs ist, dass alle deutschen und europäischen Datenschutzrichtlinien erfüllt wer-
den. Zudem sind alle Daten verschlüsselt auf Servern in Deutschland gespeichert.
Diese Daten können selbst vom Unternehmen nicht ausgelesen werden. Neben dem
Sicherheitsaspekt fallen die sonstigen Features standardmäßig aus (vgl. Stackfield
o. J.[b]).

                                        26
4 Messenger Service Vergleich

Kriterium          Information                  Gewichtung   ·   Punkte
                                                Punkte
Java-Anbindung     API                          4·7              28
Lizenz             -                            4 · 10           40
Dokumentation      ausführlich,   sehr kleine   3·5              15
und Problemhilfe   Community
Verbreitung         10000 Kunden                2·3              6
Aktualität         -                            3·1              3
Features           viele                        1·8              8
Summe              –                            –                100

                   Tab. 4.5: Stackfield Zusammenfassung

                                    27
4 Messenger Service Vergleich

4.4 Entscheidung

  MS                 Zusammenfassung                                    Punkte
  Microsoft Teams    + sehr große Community                             157
                     + sehr gute Dokumentation
                     + sehr viele Kunden
  Slack              + große Community                                  153
                     + gute Dokumentation
                     + sehr aktuell
  Mattermost         + OpenSource Client                                130
                     - kleine Community
                     - Apache 2.0 License
  Stackfield         + sehr hohe Datensicherheit                        100
                     - kleine Community
                     - kein SDK

                           Tab. 4.6: Vergleich der MSs

Wie aus der Tabelle 4.6 ersichtlich wird, stehen MST und Slack weit vor den Alter-
nativen. MST hat den Vorteil, dass es eine größere Community und umfangreichere
Dokumentationen besitzt. Des Weiteren ist die Verbreitung von MST ein ausschlag-
gebender Punkt. Aus diesem Grund wird es gegenüber Slack bevorzugt. Somit
wird MST als MS gewählt und dafür eine Anbindung über die MSG-API und dem
MSG-Java-SDK implementiert.

                                       28
5 Implementierung

5 Implementierung

5.1 Entwicklungswerkzeuge

Die Implementierung der Anbindung findet größtenteils im Software-Kern mit In-
telliJ statt. Die Anzeige und Ausführung des Web-Clients erfolgt mit Hilfe von
Google Chrome. Die Erstellung der graphischen Benutzeroberfläche wird mit dem
in Unterabschnitt 2.2.3 vorgestellten ADITO Designer vorgenommen. Um einen
ersten Einblick in die Materie zu erlangen, wird der von Microsoft zur Verfügung
gestellte Graph Explorer verwendet und mit den vordefinierten Abfragen Tests
ausgeführt. Für Testzwecke wird unter anderem auch eine erfundene Organisation
mit einer Microsoft E5 Lizenz gegründet, die es erlaubt MST zu nutzen. Mit Hil-
fe dieser Demo-Organisation können umfangreiche Szenarien abgebildet werden.
Zum Einbinden des MSG-Java-SDK wird das Managementtool Maven verwendet.

5.2 Verwendete Technologien

Im Nachfolgenden wird auf die verwendeten Technologien eingegangen, die im
Rahmen dieser Arbeit verwendet werden.

5.2.1 ScribeJava

“ScribeJava ist ein einfacher OAuth-Client für Java, der den OAuth-Fluss verwaltet.
Die Hauptfunktion der Bibliothek besteht darin, dass sie alle gängigen OAuth-APIs
der Versionen 1.0 und 2.0 unterstützt. [...] Darüber hinaus ist die Bibliothek thread-
sicher und Java7-kompatibel, sodass wir sie in älteren Umgebungen verwenden

                                         29
5 Implementierung

können. [...] Der Hauptteil dieser Bibliothek ist die abstrakte Klasse OAuthService,
die alle Parameter enthält, die zur korrekten Verwaltung des OAuth-Handshakes
erforderlich sind"(Codeflow 2020).

5.2.2 Microsoft Graph API

"Microsoft Graph ist das Gateway zu Daten und Informationen in Microsoft 365. Es
bietet ein vereinheitlichtes Programmiermodell [...] Die Microsoft Graph-API bietet
einen einzelnen Endpunkt, https://graph.microsoft.com, um Zugriff auf umfangreiche,
personenbezogene Daten und Einblicke zu ermöglichen, die als Ressourcen der
Microsoft 365-Dienste bereitstehen". (Laura Graham u.a. 2020).

         Abb. 5.1: Microsoft Graph. Quelle: (vgl. Laura Graham u.a. 2020)

  Der soeben erwähnte Endpunkt muss für die unterschiedlichen Anfragen ange-
passt werden. Für jede Ressource existiert ein eindeutiger URL-Request, welcher
spezifische Ergebnisse liefert. Um sich zum Beispiel alle Microsoft Azure-Gruppen
liefern zu lassen, wird die API-Anfrage https://graph.microsoft.com/groups verwendet.
Ein solcher Request kann mit verschiedenen HTTP-Methoden ausgeführt werden.
Möchte man lediglich Daten abfragen, muss GET verwendet werden, woraufhin
im Response ein Objekt im JSON-Format mit allen Eigenschaften zurückgeliefert
wird. Um ein Objekt, welches ebenfalls im JSON-Format übergeben wird, an die

                                         30
5 Implementierung

    API zu senden, wird POST oder PUT verwendet.

    Abb. 5.2: Beispiel-Abfrage aller Azure-Gruppe mit der MSG-API und Graph-
            Explorer. Quelle: eigene Abbildung

      Diese API-Anfragen sind in dem MSG-Java-SDK ebenfalls vorhanden und kön-
    nen somit in Java implementiert werden.

1 IGraphServiceClient graphClient =
       GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();
2
3 IGroupCollectionPage groups = graphClient.groups().buildRequest().get();

    Listing 5.1: Beispiel-Abfrage aller Azure-Gruppe mit dem Microsoft-Graph-SDK

                                           31
5 Implementierung

5.3 Zusammenhang zwischen ADITO, Microsoft
      Graph-API, Microsoft Azure und Microsoft Teams

In MST gibt es die sogenannten Teams, die einem Gruppenchat mit Besitzer und
Mitglieder entsprechen. Diese Teams sind eine Abbildung einer Microsoft Azure-
Gruppe. Es gibt zwei Typen von Gruppen: “Office-Gruppen“und “Sicherheitsgrup-
pen“. Um aus einer Gruppe heraus ein MST Team zu erstellen wird der Typ “Office-
Gruppe“benötigt. Jedem Team liegt eine Microsoft Azure-Gruppe als Basis-Objekt
zugrunde. Werden in einer dieser Gruppen Daten geändert, so synchronisiert sich
MST mit dem Microsoft Azure-Portal und passt diese automatisch an (vgl. Micro-
soft 2020d).

         Abb. 5.3: Kommunikationsübersicht. Quelle: eigene Abbildung

  Aus der Abbildung 5.7 wird ersichtlich, wie die verschiedenen Komponenten
zusammenarbeiten. Das ADITO-System ist der Auslöser und stößt die Kommuni-
kation an. Daraufhin wird ein Request gegen die MSG-API gestellt.
Diese kommuniziert mit Microsoft Azure und legt die verschiedenen Daten und
die Struktur von Teams und Kanälen in einem in Azure ausgeführten Chatdienst ab
(vgl. Microsoft 2020c). MST synchronisiert sich automatisch mit Microsoft Azure.

                                       32
5 Implementierung

5.4 Vorbereitung

Um die Teams-Anbindung, über die MSG-API und OAuth2 nutzen zu können,
müssen einige Einstellungen in Microsoft Azure vorgenommen werden. Die ADITO-
Software muss zuerst als Applikation im Microsoft Azure-Portal, unter dem Menü-
punkt “App-Registrierung“, registriert werden. Bei dieser Registrierung werden,
zum Teil automatisch, spezielle Anmeldedaten erstellt, um sich an dem Authoriza-
tion-Server von Microsoft authentifizieren zu können.

             Abb. 5.4: App-Registrierung. Quelle: eigene Abbildung

  Nachdem eine neue Applikation registriert wurde, stehen nun zwei Identifi-
kationsnummern in der Übersicht zur Verfügung: “Anwendungs(Client)-ID“und
"Verzeichnis(Mandats)-ID", welche für die OAuth2-Authentifizierung notwendig
sind.

                                       33
5 Implementierung

        Abb. 5.5: App-Registrierung-Übersicht. Quelle: eigene Abbildung

  Zusätzlich muss, unter dem Menüpunkt “Zertifikate und Geheimnisse“, ein Pass-
wort oder auch Key genannt, hinterlegt werden, das für den Tokenaustausch benö-
tigt wird.

             Abb. 5.6: Key-Registrierung. Quelle: eigene Abbildung

                                      34
5 Implementierung

  Als letzten Schritt der Vorbereitungen müssen der Applikation diverse Rechte
eingeräumt werden, um auf die unterschiedlichen Ressourcen zugreifen zu dürfen.
Dafür müssen im Menüpunkt App-Berechtigungen die passenden ausgewählt und
hinzugefügt werden. Bei diesen Berechtigungen muss zwischen Anwendungs- und
deligierten Berechtigungen unterschieden werden.
Der Unterschied besteht darin, dass Anwendungsberechtigungen einer Anwen-
dung und deligierte Berechtigungen einem angemeldeten Benutzer Zugriff ge-
statten (vgl. Microsoft 2020b). Bei den verschiedenen Berechtigungen ist darauf
zu achten, welcher OAuth2 Flow verwendet wird, um sich dementsprechend au-
thentifizieren zu können, da manche Ressourcen nicht für eine Anwendung zur
Verfügung stehen.

            Abb. 5.7: API-Berechtigungen. Quelle: eigene Abbildung

                                      35
5 Implementierung

5.5 Implementierung

In Abbildung 5.8 wird ein UML-Diagramm in gekürzter Form vorgestellt, in wel-
chem veranschaulicht wird, wie die entwickelten Klassen zusammenhängen und
miteinander kommunizieren.

             Abb. 5.8: UML-Diagramm. Quelle: eigene Abbildung

                                     36
5 Implementierung

    5.5.1 public class OAuth2AuthenticationProvider

    Die OAuth2AuthenticationProvider-Klasse implementiert das Interface IAuthen-
    ticationProvider, welches von dem MSG-Java-SDK zur Verfügung gestellt wird.
    Dieses Interface beschreibt die Funktion authenticateRequest, die aufgerufen wird,
    wenn ein HTTP-Request gegen die MSG-API erfolgt. Diese Funktion ist notwendig,
    um den Request zu authentifizieren. Dies geschieht indem der Access-Token in den
    dafür vorgesehenen Authentifizierungs-Header gesetzt wird.

1 /**
2 * Fuegt den Access-Token in den Request-Header hinzu
3 */
4 @Override
5 public void authenticateRequest(IHttpRequest pRequest)
6 {
7      pRequest.addHeader(AUTHORIZATION, BEARER + accessToken);
8 }

                              Listing 5.2: authenticateRequest

    5.5.2 Erzeugen eines OAuth2 Tokens

    Bevor HTTP-Requests gesendet werden können, wird ein OAuth2-Token benötigt.
    Dieser wird im Konstruktor mit Hilfe der verwendeten Technologie ScribeJava er-
    zeugt. Dort wird die Funktion _initOauth2Service aufgerufen und die Daten, die in
    der Vorbereitung erstellt worden sind, übergeben. In der Funktion wird die konkre-
    te Klasse OAuth20Service, die von der, in Kapitel 5.2.1 erwähnten, OAuthService-
    Klasse erbt, verwendet.
    “Um die OAuthService-Implementierungen zu erstellen, stellt die Bibliothek einen
    ServiceBuilder bereit"(Codeflow 2020).

                                             37
5 Implementierung

1 /**
2 * Erstellt einen OAuth2 Service mit Hilfe der ScribeJava API
3 * Dieser dient dazu einen Access-Token von Azure Active Directory zu erhalten
4 *
5 * @param pClientId die Client-Id (Azure Active Directory)
6 * @param pTenantId die Tenant-Id (Azure Active Directory)
7 * @param pClientSecret das Client-Secret (Azure Active Directory)
8 * @return einen OAuth2Service
9 */
10 private OAuth20Service _initOAuth2Service(String pClientId, String pTenantId,
        String pClientSecret)
11 {
12 return new ServiceBuilder(pClientId)
13            .apiSecret(pClientSecret)
14            .defaultScope(GRAPH_SCOPE)
15            .build(MicrosoftAzureActiveDirectory20Api.custom(pTenantId));
16 }

                                Listing 5.3: _initOAuth2Service

       Nachdem ein OAuth20Service erstellt worden ist, ist es möglich einen soge-
     nannten Flow mit Hilfe der mitgelieferten Funktionen der ScribeJava Bibliothek
     auszuwählen. Mit getAccessTokenClientCredentialsGrant wird der Client-Credentials
     Genehmigungsprozess ausgewählt, welcher der Client-Berechtigung in Kapitel 2.1
     entspricht. Über eine weitere Funktion getAccessToken wird der Access-Token abge-
     rufen.

                                              38
5 Implementierung

1 private String accessToken;
2 private OAuth20Service oAuth2Service;
3
4 //Konstruktor fuer Applikation-Tokens
5 public OAuth2AuthenticationProvider(String pClientId, String pTenantId, String
           pClientSecret) throws AditoException
6 {
7      oAuth2Service = _initOAuth2Service(pClientId, pTenantId, pClientSecret);
8      try
9      {
10          accessToken =
                oAuth2Service.getAccessTokenClientCredentialsGrant().getAccessToken();
11     }
12     catch (IOException | InterruptedException | ExecutionException pEx)
13     {
14          final CheckPointDetails details = new CheckPointDetails("Check the
                configuration settings");
15          throw new AditoException(pEx, 58, 35, details);
16     }
17 }
18
19 //Konstruktor fuer User-Tokens
20 public OAuth2AuthenticationProvider(String pClientId, String pTenantId, String
           pClientSecret, String pUsername, String pPassword) throws AditoException
21 {
22     oAuth2Service = _initOAuth2Service(pClientId, pTenantId, pClientSecret);
23     try
24     {
25          accessToken = oAuth2Service.getAccessTokenPasswordGrant(pUsername,
                pPassword).getAccessToken();
26     }
27     catch (IOException | InterruptedException | ExecutionException pEx)
28     {
29     final CheckPointDetails details = new CheckPointDetails("Check the
             configuration settings");
30     throw new AditoException(pEx, 58, 36, details);
31     }
32 }

                   Listing 5.4: OAuth2AuthenticationProvider Konstruktoren

                                                  39
5 Implementierung

  In Listing 5.4 ist zu beachten, dass hier zwischen einem Application-Token
und User-Token unterschieden werden muss. Dies ist zurück zu führen auf die
Anwendungs- und deligierten Berechtigungen in Abschnitt 5.4. Der abgerufene
Access-Token kann somit in die vorher erwähnte authenticateRequest-Funktion ein-
gefügt werden, wenn ein Request erfolgt.

5.5.3 public class TeamsModul

Um den Rahmen dieser Arbeit nicht übermäßig auszureizen wird in den nächsten
Abschnitten nur auf die Anforderung Gruppenchat erstellen eingegangen und diese
im Detail erläutert. Die restlichen umgesetzten Anforderungen werden aufgrund
des Betriebsgeheimnisses nicht veröffentlicht.
Die Klasse TeamsModul enthält alle Funktionen, um die fachlichen Anforderungen
zu erfüllen. In den verschiedenen Methoden wird jeweils mindestens ein Request
abgearbeitet.

5.5.4 Funktion: createTeam

Die Funktion createTeam besteht aus mehreren privaten Funktionen, um den Code
übersichtlich zu halten. Diese werden nachfolgend erläutert.

                                        40
5 Implementierung

1 /**
2 * Erstellt eine neue Azure Active Directory Gruppe, fuegt dieser Besitzer hinzu
        und erstellt daraus ein MicrosoftTeams Team
3 *
4 * @param pGroupConfig Das GruppenConfig Objekt
5 * @param pTeamConfig Das TeamConfig Objekt
6 * @return die Id, DisplayName, GeneralChannelId und WebUrl des erstellten Teams
        in einer ScriptableMap
7 * @throws AditoException wird geworfen, wenn ein Fehler auftritt (genauere
        Beschreibung, bei den einzelnen inneren Methoden)
8 */
9 public ScriptableMap createTeam(JScriptTeams.GroupConfig pGroupConfig,
        JScriptTeams.TeamConfig pTeamConfig) throws AditoException
10 {
11     IGraphServiceClient graphApplicationClient =
           _initGraphServiceApplicationClient();
12
13     Group createdGroup = _createNewGroup(graphApplicationClient, pGroupConfig,
           List.of(pGroupConfig.getOwnerIds()));
14     Team createdTeam = _createNewTeam(graphApplicationClient, createdGroup.id,
           pTeamConfig);
15
16     Map keyValue = new HashMap();
17     keyValue.put("teamId", createdTeam.id);
18     keyValue.put("teamName", createdGroup.displayName);
19     keyValue.put("generalChannelId",
           createdTeam.getRawObject().get("internalId").getAsString());
20     keyValue.put("webUrl", createdTeam.webUrl);
21
22     return new ScriptableMap(keyValue);
23 }

                                   Listing 5.5: createTeam

       Um ein Team zu erstellen, muss zuerst das Basis-Objekt erstellt werden, das
     einem Team übergeordnet ist. Das bedeutet, dass als erstes eine Microsoft Azure-
     Gruppe erstellt werden muss. Um diese Gruppe zu erstellen, muss zuerst ein Grup-
     penobjekt mit den verschiedenen Eigenschaften erstellt werden. Dieses Erstellen
     übernimmt die _createGroupObject-Funktion.

                                             41
5 Implementierung

1 /**
2 * Erstellt ein neues Group-Objekt mit vordefinierten Einstellungen
3 *
4 * @param pGroupConfig Das GruppenConfig Objekt
5 * @param pAzureOwnerIds die Azure Ids der Besitzer der Gruppe
6 * @return Ein Group-Objekt
7 */
8 private Group _createGroupObject(JScriptTeams.GroupConfig pGroupConfig,
        List pAzureOwnerIds)
9 {
10     Group newGroup = new Group();
11     newGroup.displayName = pGroupConfig.getDisplayName();
12     if (StringUtils.isBlank(pGroupConfig.getDescription()) == false)
13       newGroup.description = pGroupConfig.getDescription();
14     newGroup.mailNickname = pGroupConfig.getMailNickName();
15
16     newGroup.securityEnabled = false; //false fuer Office-Gruppen
17     newGroup.mailEnabled = true; //true fuer Office-Gruppen
18
19     //Unified = Office Gruppe
20     LinkedList groupTypesList = new LinkedList();
21     groupTypesList.add("Unified");
22     newGroup.groupTypes = groupTypesList;
23
24     JsonArray owners = _buildMemberJsonArray(pAzureOwnerIds);
25
26     newGroup.additionalDataManager().put("owners@odata.bind", owners);
27     //"Um Verwirrung zu vermeiden, fuegen Sie alle Besitzer auch zur
          Mitgliederliste hinzu"(MS Docs)
28     newGroup.additionalDataManager().put("members@odata.bind", owners);
29
30     return newGroup;
31 }

     Listing 5.6: _createGroupObject (In _buildMemberJsonArray werden die Ids der
                Besitzer in eine notwendige Form gebracht)

                                               42
5 Implementierung

       Nachdem das Gruppen-Objekt erstellt worden ist, kann durch den Aufruf eines
     MSG-API-Calls mit Hilfe des MSG-Java-SDK’s eine neue Gruppe erstellt werden,
     in welchem das vorher erstelle Gruppenobjekt als Parameter mitgeliefert wird.

1 /**
2 * Erstellt ein neues Gruppenobjekt und fuegt es in Azure Active Directory als
           Office365 Gruppe hinzu
3 *
4 * @param pGraphApplicationClient der GraphServiceClient zum Ausfuehren von
           GraphAPI-Calls
5 * @param pGroupConfig             Das GruppenConfig Objekt
6 * @param pAzureOwnerIds           die Azure Ids der Besitzer der Gruppe
7 * @return Das Group-Objekt, welches gerade erstellt worden ist
8 * @throws AditoException wird geworfen, wenn beim GraphAPI-Call etwas schief
           laeuft
9 */
10 private Group _createNewGroup(IGraphServiceClient pGraphApplicationClient,
           JScriptTeams.GroupConfig pGroupConfig, List pAzureOwnerIds) throws
           AditoException
11 {
12     Group newGroup = _createGroupObject(pGroupConfig, pAzureOwnerIds);
13     try
14     {
15          return pGraphApplicationClient.groups().buildRequest().post(newGroup);
16     }
17     catch (ClientException pEx)
18     {
19          final CheckPointDetails details = new CheckPointDetails("GroupConfig: " +
                pGroupConfig.toString());
20          throw new AditoException(pEx, 58, 5, details);
21     }
22 }

                                    Listing 5.7: _createNewGroup

                                                43
5 Implementierung

  Wenn das Basisobjekt (Microsoft Azure-Gruppe) erzeugt worden ist, kann das
untergeordnete Objekt “Team“erstellt werden. Dafür muss, wie auch bei einem
Gruppenobjekt, ein Teamobjekt erstellt und die verschiedenen Eigenschaften de-
finiert werden. Die Funktion _createTeamObject besteht lediglich aus Zuweisungen
der übergebenen Parametern an das Teamobjekt. Nachdem dieser Schritt erfolg-
reich abgeschlossen ist, kann mit Hilfe eines weiteren MSG-API-Calls das Team
erstellt werden.
Da in der aktuellen Version des MSG-Java-SDK’s noch keine Möglichkeit besteht
mit Hilfe der mitgelieferten Funktionen einen PUT-Request zum Erstellen von
Teams auszuführen, muss hier ein sogenannter Custom-Request verwendet wer-
den. Bei Custom-Requests werden keine vorgefertigten Bausteine aus dem SDK
benutzt, sondern der API-Aufruf selbst beschrieben. Dadurch kann der Entwickler
entscheiden, welche Http-Methode verwendet wird. Speziell bei dieser Funktion
ist darauf zu achten, falls diese fehlschlägt, dass das vorherige Gruppenobjekt wie-
der gelöscht wird, um zu verhindern, dass eine Gruppe ohne zugehöriges Team
besteht.

                                        44
5 Implementierung

1 /**
2 * Erstellt aus einer Azure Active Directory Office Gruppe ein neues
           MicrosoftTeams Team
3 *
4 * @param pGraphApplicationClient der GraphServiceClient zum Ausfuehren von
           GraphAPI-Calls
5 * @param pGroupId                die Gruppen Id von einer Azure Active Directory Gruppe
6 * @return Das Team-Objekt, welches gerade erstellt worden ist
7 * @throws AditoException wird geworfen, wenn beim GraphAPI-Call etwas schief
           laeuft
8 */
9 private Team _createNewTeam(IGraphServiceClient pGraphApplicationClient, String
           pGroupId, JScriptTeams.TeamConfig pTeamConfig) throws AditoException
10 {
11     CustomRequest createTeamCustomRequest =
             pGraphApplicationClient.customRequest("/groups/" + pGroupId +
12                                    "/team", Team.class)
13                                    .buildRequest();
14     createTeamCustomRequest.setMaxRetries(3);
15     createTeamCustomRequest.setDelay(10);
16
17     Team newTeam = _createTeamObject(pTeamConfig);
18
19     try
20     {
21          return createTeamCustomRequest.put(newTeam);
22     }
23     catch (ClientException pEx)
24     {
25          //Falls das Team erzeugen ein Fehler schmeisst, loesche die Gruppe wieder,
                damit sie nicht alleine existiert
26          _deleteGroup(pGraphApplicationClient, pGroupId, true);
27          //Wenn das Loeschen problemlos verlaeuft, schmeisse die createTeamException
28          final CheckPointDetails details = new CheckPointDetails("GroupId: " +
                pGroupId, "TeamConfig: " +   pTeamConfig.toString());
29          throw new AditoException(pEx, 58, 6, details);
30     }
31 }

                                   Listing 5.8: _createNewTeam

                                                45
5 Implementierung

       Nachdem alle Funktionen abgeschlossen sind, wurde ein neues Team in MST per
     Code mit Hilfe der MSG-API erstellt.

     5.5.5 public class JScriptTeams

     Die JScriptTeams Klasse ist das Verbindungsstück zwischen dem in Abschnitt 2.2.3
     erwähnten ADITO Designer und dem Kern der ADITO-Software. In dieser Klas-
     se wird eine eigene API für ADITO spezifische Anwendungen entwickelt, die im
     Customizing auf verschiedene Arten eingesetzt werden kann. Über die Annotati-
     on @JSSTUP wird eine JavaScript-Bibliothek erstellt. Somit können die Funktionen
     dieser Bibliothek im ADITO Designer aufgerufen werden. Dadurch kann die entwi-
     ckelte Funktion ein MST Team zu erstellen an verschiedene Komponenten geknüpft
     werden, um diese zur Laufzeit des Programms auszulösen.

1 /**
2 * Erstellt eine neue Azure Active Directory Gruppe, fuegt dieser Besitzer hinzu
        und erstellt daraus ein MicrosoftTeams Team
3 *
4 * @param pGroupConfig Das GruppenConfig Objekt
5 * @param pTeamConfig Das TeamConfig Objekt
6 * @return die Id, DisplayName, GeneralChannelId und WebUrl des erstellten Teams
        in einer ScriptableMap
7 * @throws AditoException wird geworfen, wenn ein Fehler auftritt
8 */
9 @JSSTUB(isDocumented = false)
10 public ScriptableMap createTeam(GroupConfig pGroupConfig, TeamConfig pTeamConfig)
        throws AditoException
11 {
12     pGroupConfig.validate();
13     return teamsModul.createTeam(pGroupConfig, pTeamConfig);
14 }

     Listing 5.9: createTeam (Das TeamConfig-Objekt muss nicht validiert werden weil
                alle Attribute einen default Wert besitzen und deshalb optional sind)

                                            46
Sie können auch lesen