Webservice mit Microsoft Power Automate und IOT Lösung

Webservice mit Microsoft Power Automate und IOT Lösung: Webservices bedürfen einiger Entwicklungszeit und sind oftmals teure Investitionen. Doch was für Möglichkeiten gibt es, wenn ein Webservice erstellt werden soll und dieser auch noch kostengünstig und in schneller Zeit realisiert werden sollen?

Da kommt der Werservice mit Power Automate zum Einsatz. Mit Power Automate steht ein mächtiges Tool zur Verfügung, mit dem, in vergleichsweise kurzer Zeit, eine API erstellt werden kann. In Kombination mit SharePoint als Datenspeicher, entstehen nicht einmal zusätzliche Lizenzgebühren, da beide in allen Office 365 Abos bereits integriert sind (bis 750 Flow Runs).

Anhand einer realen Kundenanforderung möchte ich Ihnen zeigen, wie diese Lösung mit Power Automate und SharePoint Online in Office 365 einfach umgesetz werden kann.

Customer Case

Ausgangslage

Ein grösseres Handelsunternehmen für Schreinereibedarf hat uns folgende Aufgabe gestellt:

Kunden des Handelsunternehmens sollen in Zukunft mit sogenannten «Smart Labels» ausgestattet werden. «Smart Labels» sind kleine Geräte welche zum Beispiel in einem Lagergestell angebracht werden und mit denen der zuständige Lagerist, ganz bequem, mit einem einzigen Knopfdruck auf dieses «Smart Label», eine vordefinierte Menge eines Lagerartikels, direkt an sein ERP übermitteln kann. Das ERP führt dann die Bestellung beim Händler aus.

Wird das «Smart Label» gedrückt, dann soll diese Bestellung in einer sogenannten Watchlist abgespeichert werden. In regelmässigen Abständen prüft das ERP des Kunden dann diese Liste nach neuen Eingängen und legt eine Bestellung auf, respektive, wenn nötig, wird eine bestehende offene Bestellung aktualisiert.

Use-Case

Um diese Anforderungen abzudecken, haben wir eine Power Automate Lösung mit SharePoint Backend verwendet. Sobald der Knopf auf dem Label gedrückt wird, sendet das Label einen Call an den Flow, worauf dieser, bei erfolgreicher Authentifizierung, die Daten in die Watchlist fügt. Ebenso sendet das Label in regelmässigen Abständen einen Status-Request an den Flow, welcher die angefragten Informationen in der Watchlist heraussucht und diese als Response zurückgibt. Somit sieht der Kunde auf dem kleinen Screen des Labels jederzeit, was der Status der Bestellung ist.

Flow API ERP

Gleichzeitig verarbeitet ein weiterer Workflow die Anfragen (requests) des ERP-Systems. Das ERP fragt den Flow-Webservice nach Einträgen in der Watchlist ab. Dabei wird ein Session-Key mitgesendet, den der Flow abgreift und sich damit bei einem Server authentifiziert. Ist der Key valid, erhält der Flow die Identifikation des Kunden zurück. Darauf basierend werden die georderten Produkte in Auftrag gegeben. Sobald die Bestellung rausgeht, sendet das ERP einen neuen Request an den Webservice, worauf dieser den Status der betroffenen Positionen aktualisiert.

blank

Weitere Informationen

Beim oben beschriebenen Case werden Requests mit Daten im XML- und andere mit JSON-Format gestellt. Standardmässig ist Flow darauf ausgelegt, mit JSON-Daten zu arbeiten. Doch mit den nötigen Kniffen, lassen sich auch XML-Daten verarbeiten und zurückgeben.

Das Ganze klingt ja hervorragend, gibt es keine Nachteile?

Diese gibt es. Bei einem in JAVA, C#, Go (und anderen Sprachen) programmiertem Webservice, benötigen diese Request-Response Prozesse meist nur Millisekunden. Bei einem Flow, der in einer SharePoint-Liste Daten zusammenträgt, kann das, je nach Menge der Einträge, schon mal ein paar Sekunden dauern. (Interessant wäre hier ein Test betreffend Ausführungszeit mit einem Flow und einer SQL-Datenbank, dies müsste ich jedoch noch durchführen.)

Fazit

Wenn die Ausführungszeit keine Rolle spielt, respektive ein bisschen höher sein darf und handelt es sich um eine relativ kleine Datenmenge, kann mit Flow tatsächlich in kurzer Zeit ein zuverlässiger Webservice erstellt werden. Dies ohne Unsummen zu investieren.

Office 365 Kontakt Synchronisation

blank

Office 365 Kontakt Synchronisation auf Exchange Online Mailboxen mit PowerShell und Office 365 Graph API

Von einem Kunden haben wir die folgende Anforderung erhalten:

  • Beim Eingang eines Telefon-Anrufs auf dem Smartphone eines Benutzers sollen die Kontakt-Details des Anrufers angezeigt werden (ohne dass der Mitarbeiter diesen Kontakt selbst pflegen muss in Outlook 😊)
  • Die Mitarbeiter haben stets eine komplette Kontakt-Liste aller «internen Mitarbeiter» aus der Exchange Online GAL auf Ihrem Mobile, respektive im Outlook Mobile Client zur Verfügung, d.h. ruft ein Mitarbeiter an, so wird der Name des Anrufers angezeigt
  • Als weitere Anforderung wurde gestellt, dass die Lösung, mit sämtlichen Schnittstellen, vom Kunden selbst betrieben werden soll. Somit fielen auch sämtliche «pfannenfertigen» Lösungen von Drittanbietern ins Wasser.

Für den Endbenutzer steht in Office 365, respektive Exchange Online zwar eine Globale Adressliste (GAL) sowie andere zentrale Adresslisten zur Verfügung, deren Nutzung hat aber v.a. mit dem Smartphone zwei gewichtige Nachteile:

  • Die Anruferkennung auf dem Smartphone funktioniert nur auf lokal synchronisierte Kontakte jedoch nicht auf Kontakte aus der GAL
  • Der Zugriff aufs GAL funktioniert nur mit einer Internetverbindung

Aufgrund dieser Lücken entstand die Anforderung, einen definierten Benutzerkreis aus Office 365 Benutzern regelmässig in die persönlichen Kontakte der Benutzer-Mailboxen synchronisieren zu können. Wie das Bild am Anfang des Blogeintrages zeigt, geht das natürlich auch mit «normalen» Outlook Kontakten und nicht bloss mit GAL Benutzereinträgen.

Somit kann das Script natürlich auch sonstige Outlook Kontakte, zum Beispiel aus einer zentralen Mailbox, auf die einzelnen Office 365 Mailboxen/Benutzer synchronisieren. Im erwähnten Kundenbeispiel war dies aber keine Anforderung. Andere Kunden nutzen den Synchronisationsmechanismus aber für Ihre Kunden-/Lieferantenadressen, welche zentral gepflegt werden und so über die Synchronisation an die Mitarbeiter verteilt werden.

Die Outlook Mobile App bietet die Funktionalität, Kontakte aus der persönlichen Mailbox in das Adressbuch des Smartphones zu synchronisieren, und somit die Anforderung für die Anruferkennung zu erfüllen. Diese Option kann beim Outlook App unter Einstellungen -> Office 365 Account -> Synchronisation eingeschalten werden. Somit hat der Benutzer selbst die Wahl ob er dieses Feature auf seinem Smartphone nutzen will oder nicht 😉.

blank
Als Daten-Quelle für die Kontakte der Globalen Adressliste haben wir alle aktiven und lizenzierten Office 365 Benutzer genommen. Als Methode zur Erstellung der Kontakte innerhalb der Mailboxen wurde die Microsofts Graph API ausgewählt. Eine Übersicht, was MS Graph ist und was es kann gibt es hier: MS Graph Concept Overview

Die MS Graph API erlaubt es, persönliche Kontakte von einzelnen Benutzern anzeigen zu lassen, zu verändern oder zu löschen, sofern man zuvor einen entsprechenden Schlüssel für den Zugriff erhalten hat. Die MS Graph API baut auf dem Oauth 2.0 Authentifizierungs-Protokoll auf. Details dazu gibt es hier: Auth-Flow

Hinweis: Wenn du die Möglichkeiten des MS Graph APIs gerne ausprobieren möchtest, kannst du dich auf dem Graph Explorer mit deinem Office 365 Account einloggen und dich über die vielfältigen Funktionalitäten informieren und auch gleich ausprobieren. Es ist beispielsweise möglich, über den Graph Explorer einen neuen Kontakt zu erstellen, welcher nach erfolgreicher Erstellung auch sofort in der persönlichen Mailbox erscheint. Hier ein Beispiel der Anzeige des eigenen Profils:

blank
Um eine Synchronisierung von Kontaktinformationen braucht es zunächst eine publizierte Enterprise Application auf Azure im Kontext von Azure AD, mit einer eindeutigen AppID und einem Secret. Danach werden die nötigen Berechtigungen gesetzt und vererbt, damit die MS Graph API die notwendigen Aktionen, also das Erstellen und Löschen eines Kontakts, ohne manuelle Userinteraktion unternehmen kann. Hilfreich war dabei die von Microsoft zur Verfügung gestellte Dokumentation.

Als Voraussetzung für Interaktionen mit der MS Graph API gilt es als erstes eine Authentifizierungs-Anfrage abzusetzen, um einen Authentifizierungs-Token zu erhalten. Dieser hat eine zeitlich beschränkte Gültigkeit von genau einer Stunde. Die MS Graph API nimmt Anfragen in Form von sogenannten Web-Requests entgegen. Diese müssen einer spezifischen Formatierung im JSON-Format entsprechen und sind nur mit dem erwähnten gültigen Authentifizierungs-Token möglich.

In einem nächsten Schritt wurde die nötige Skript-Intelligenz entwickelt, welche die aktiven Benutzer mit den relevanten Informationen (Vorname, Nachname, Telefonnummern, E-Mailadresse usw.) mit den aktuell vorhandenen Kontakten innerhalb der Benutzer-Mailboxen vergleicht und nach Bedarf entsprechend Kontakte via MS Graph API löscht oder erstellt.

Um zu verhindern, dass das Skript ungewollt persönliche Kontakte löscht, welche nicht angefasst werden sollen, wurde definiert, dass nur Kontakte mit einer vom Kunden bestimmten Outlook Kategorie von der Skript-Logik erfasst werden. Dies stellt zum einen sicher, dass ausgetretene Mitarbeiter aus der Kontaktliste gelöscht werden, neue erfasst werden, jedoch persönlich geführte Kontakte nicht verändert werden.

Damit die Performance bei einer grösseren Menge Benutzer/Kontakte stimmt, wurde durch Parallelisierung beim Abgleich der persönlichen Kontakte die Synchronisierungs-Performance entsprechend erhöht, so dass auch bei der initialen Synchronisation sichergestellt ist, dass die Laufzeit unter einer Stunde bleibt (der Token ist ja initial nur 60 Minuten gültig 😉)

Damit das Debugging nicht zu kurz kommt, wurde ein Logging-Modul eingebaut, welches die Vorgänge auf sämtlichen Mailboxen in einem Logfile mit Zeitstempel nachvollziehbar sammelt und speichert.

Bei regelmässigen Synchronisations-Läufen ist durch die Abgleichs-Funktion sichergestellt, dass nur an der Quelle veränderte Objekte in den persönlichen Kontakten verändert werden und der Abgleich aufgrund des reduzierten Synchronisierungs-Aufwands innert Minuten oder bei weniger Mitarbeitern sogar nur in Sekunden abgeschlossen ist.

Fazit

Microsoft stellt mit der MS Graph API eine vielfältige und sichere Schnittstelle zur Verfügung, mit enormem Potential für viele weitere Abenteuer 😉

Kontakt
close slider

Standort Schweiz

TwinCap First AG
Favreweg 1
CH-8304 Wallisellen
+41 44 666 50 50
info@twincapfirst.ch

Standort Deutschland

IT Boosting
Cloud Systemhaus
Bahnhofstraße 32
DE-72458 Albstadt
+49 7431 9493 440
info@it-boosting.de

Support: Hier klicken!