Ein Beispiel für die Verwendung von Microsoft Flow oder So geben Sie Ihrer Frau Blumen

Hier werde ich ein nicht so einfaches Beispiel für die Verwendung von Microsoft Flow zur Lösung eines praktischen Problems zeigen.

Erklärung des Problems


Manchmal ergeben sich Aufgaben für einen Programmierer aus dem Alltag. Dies war ein solcher Fall. Ich wollte meiner Frau von Zeit zu Zeit Blumen schenken, etwa einmal im Monat. Gleichzeitig wollte ich dies jedoch nicht an einem bestimmten Datum tun, beispielsweise am ersten Tag des Monats. Dann wäre das keine Überraschung. Ich wollte Randomisierung. Wenn ich zum Beispiel das nächste Mal Blumen gebe, sollte es einen Monat nach dem vorherigen Mal geben, plus / minus ein paar Tage.

An solchen Anforderungen ist nichts Besonderes. Es ist einfach genug, ein Programm zu schreiben, das mich an diese Ereignisse erinnert. Die Desktop-Anwendung weist jedoch einen erheblichen Nachteil auf. Es funktioniert nur auf einer Maschine, während ich mehrere davon habe (zu Hause, bei der Arbeit, ...). Und es gibt ein Smartphone ... Wäre es nicht schön, Benachrichtigungen auf einem meiner Geräte zu erhalten?

Nun, Sie können Ereignisinformationen in einer Art Online-Speicher (wie Mlab ) speichern . In diesem Fall arbeiten alle Instanzen meiner Anwendung mit denselben Informationen, sodass sie miteinander synchronisiert werden können. Ich muss diese Anwendungen jedoch auf allen meinen Computern installieren. Außerdem verwende ich Windows auf Computern und Android auf meinem Smartphone, sodass ich verschiedene Anwendungen schreiben muss, wenn ich meine Benachrichtigungen wirklich überall erhalten möchte. Wie kann dieses Problem behoben werden? Natürlich über das Web.

Wenn ich eine Webanwendung erstelle, kann ich sie auf fast jedem Gerät verwenden. Großartig! Aber immer noch nicht groß genug. Lassen Sie mich meinen Standpunkt erklären. Obwohl es nicht so schwierig ist, eine Webanwendung zu schreiben, die mein Problem löst, muss ich mich in diesem Fall noch um viele Dinge kümmern. Sie müssen über Hosting nachdenken, über Datenspeicherung, über Codespeicherung, ... und warum? Fast alle erforderlichen Funktionen sind bereits in modernen Webkalendern wie Google Kalender implementiert. Er kann Ereignisse erstellen, wiederkehren lassen, mir Benachrichtigungen über ihr Auftreten senden usw. Das einzige, was fehlt, ist die von mir geforderte Randomisierung. Wäre es nicht großartig, wenn ich diese Funktion einfach hinzufügen und alle anderen Funktionen verwenden könnte, die bereits verfügbar sind?

Als ich über dieses Problem nachdachte, stieß ich auf die Website IFTTT.com . Die Idee dieser Seite ist einfach, aber produktiv. Wenn etwas passiert, tut er etwas. Ich weiß, das klingt seltsam, also möchte ich Ihnen einige Beispiele geben. Wenn ich eine E-Mail von einer bestimmten Person erhalten habe, senden Sie mir eine SMS. Wenn mein Lieblingsautor einen neuen Artikel in seinem Blog veröffentlicht hat, lass es mich auf Slack wissen. Wenn es Zeit für ein bestimmtes Ereignis in Google Kalender ist, senden Sie mir eine E-Mail. Ich hoffe jetzt ist klar, wohin ich führe. Dieser Dienst kann bestimmte Ereignisse überwachen (sie werden als Trigger bezeichnet) und einige Aktionen ausführen, wenn diese Ereignisse auftreten. IFTTT unterstützt eine Vielzahl möglicher Auslöser und Aktionen. Ich könnte meine Ereignisse in Google Kalender verfolgen. Wenn ein bestimmtes Ereignis eintritt, sende ich mir eine E-Mail, lösche das alte Ereignis und füge zu einem späteren Zeitpunkt ein neues hinzu. Wow! Genau das, was benötigt wird! Aber nicht wirklich.

Erstens erlaubt IFTTT nur eine Aktion auf einem Trigger. Das ist kein so großes Problem, weil Sie können mehrere Applets mit identischen Triggern erstellen (ein Applet ist eine Kombination aus einem Trigger und einer Aktion in IFTTT). Einer sendet mir einen Brief, der andere löscht das alte Ereignis, der dritte erstellt ein neues Ereignis. Es gibt jedoch ein ernsthafteres Hindernis. Für ein neues Ereignis muss ich eine Antwortzeit mit Randomisierung erstellen. Und ich habe in IFTTT nicht gefunden, wie das geht. Dies bedeutet, dass dieser Dienst mein Problem nicht lösen kann. Aber vielleicht gibt es andere ähnliche Dienste im Internet? Ja, gibt es.

Die nächste Seite, die ich überprüft habe, war Zapier . Hier können wir mehrere Aktionen auf einen Trigger anwenden, was gut ist. Aber es ist nur für Geld erhältlich, was nicht so gut ist. Ich habe nicht lange genug mit Zapier gespielt, aber ich hatte den Eindruck, dass es auch nicht die Möglichkeit für die von mir benötigte Randomisierung bietet. Obwohl ich hier falsch liegen kann. Auf jeden Fall bin ich zum nächsten Kandidaten übergegangen.

Es war Microsoft Flow . Mit diesem Service kann ich 750 Trigger pro Monat kostenlos verfolgen. Das ist mehr als genug für meine Bedürfnisse. Darüber hinaus werden Ausdrücke unterstützt, einschließlich der Funktion rand () ! Genau das brauchen Sie. Lassen Sie mich Ihnen nun zeigen, wie Sie das beschriebene Problem mit Microsoft Flow lösen können.

Lösung


Zuerst müssen Sie einen neuen Flow erstellen. Ein Stream ist eine Kombination aus Trigger und Aktion. Registrieren Sie sich dazu auf der Site und klicken Sie im Hauptmenü auf Meine Flows und dann auf Aus leer erstellen :



Klicken Sie auf die Schaltfläche Erstellen aus leer:



Sie werden aufgefordert, einen Auslöser auszuwählen. Geben Sie "Kalender" in das Suchfeld ein und wählen Sie Google Kalender :



Wählen Sie in der Liste der verfügbaren Auslöser für Google Kalender die Option Wann ein Ereignis startet :



Hier werden Sie möglicherweise aufgefordert, in Ihrem Namen den Zugriff von Microsoft Flow auf Google Kalender zuzulassen.

Jetzt ist der Auslöser bereit. Der einzige Parameter ist der Kalender:



Ja, Sie können in Google Kalender mehrere Kalender erstellen. Jedes Ereignis gehört zu einem der Kalender, und Sie müssen einen Kalender auswählen, dessen Ereignisse Ihre Aktionen auslösen.

Es ist nichts Falsches daran, einen neuen Kalender zu erstellen und alle Ereignisse einzufügen, für die Ihre Aktionen ausgelöst werden sollen. Wenn jedoch nicht alle Ereignisse im Kalender verarbeitet werden müssen, können Sie die Filterung verwenden. Klicken Sie auf Neuer Schritt und dann auf Bedingung hinzufügen :



Dadurch wird ein Filter für Sie erstellt. Jetzt müssen Sie genau entscheiden, wie wir Ereignisse filtern möchten. Zum Beispiel möchte ich nur die Ereignisse verarbeiten, die den Text "[ZUFÄLLIG]" im Feld "Ort" enthalten. Klicken Sie dazu auf das Eingabefeld Wert auswählen. Microsoft Flow zeigt Ihnen eine Liste möglicher Werte, mit denen Sie arbeiten können:



Klicken Sie auf Ereignisliste Ereignisort . Und füllen Sie die restlichen Felder mit den entsprechenden Werten aus:



Beachten Sie den Link Bearbeiten im erweiterten Modus . Sie ist sehr hilfreich. Wenn Sie darauf klicken, erhalten Sie eine Darstellung derselben Bedingung wie ein Textausdruck:



Dies wird sehr hilfreich sein, wenn es darum geht, eigene Ausdrücke zu schreiben.

Jetzt können Sie Aktionen für unsere Veranstaltungen hinzufügen. Klicken Sie im Abschnitt Wenn ja Ihres Filters auf den Link Aktion hinzufügen. Hier erstelle ich eine Aktion, die mir eine Ereignisbenachrichtigung in Google Mail sendet:



Wie Sie sehen, können Sie die Daten Ihres Ereignisses verwenden, um den Betreff, den Text und andere Eigenschaften dieser Aktion zu füllen.

Jetzt haben wir Benachrichtigungen. Es ist Zeit, das alte Ereignis im Kalender zu löschen und zu einem späteren Zeitpunkt ein neues zu erstellen. Verwenden Sie den Link Aktion hinzufügen, um die Aktion Ereignis löschen für Google Kalender löschen zu erstellen:



Es sollte gesagt werden, dass es durchaus möglich ist, das Ereignis im Kalender einfach zu ändern, anstatt das alte zu löschen und ein neues zu erstellen. Aber hier werde ich mich trotzdem an die letztere Option halten, um Ihnen eine weitere Microsoft Flow-Funktion zu zeigen. Angenommen, ich möchte, dass die Erstellung eines neuen Ereignisses im Kalender nicht nach dem Löschen des alten Ereignisses erfolgt, sondern parallel dazu. Bewegen Sie den Mauszeiger über die E-Mail senden und löschen Sie eine Ereignisaktion . Auf dem Bildschirm wird ein Pluszeichen angezeigt. Klicken Sie darauf und wählen Sie Parallelen Zweig hinzufügen → Aktion im Kontextmenü hinzufügen:



Jetzt können wir die parallele Aktion " Ereignis erstellen" aus Google Kalender hinzufügen. Für diese Aktion übernehmen wir den Titel, die Beschreibung und den Ort aus unserem Quellereignis. Sie müssen nur noch die Start- und Endzeiten des neuen Ereignisses festlegen:



Nun kommen wir zum wirklich interessanten Teil. Wir müssen irgendwie eine zufällige Anzahl von Tagen zum Beginn des aktuellen Ereignisses hinzufügen. Wir werden dieses neue Datum als Beginn des erstellten Ereignisses verwenden. Zum Beispiel möchte ich 30 Tage plus / minus 2 Tage hinzufügen. Die Dokumentation der verfügbaren Funktionen finden Sie hier . Ich gebe zu, das ist keine sehr einfache Lektüre. Ich hatte viele Fragen, insbesondere darüber, wie die Startzeit aus dem Quellereignis extrahiert werden kann, damit sie in Funktionen verwendet werden kann. Hilfe erhalten Sie von unserem Filter. Denken Sie an den Link Bearbeiten im erweiterten Modus :



Wenn Sie darauf klicken, wird der entsprechende Ausdruck angezeigt:



Dies gab mir einen Hinweis beim Schreiben meiner Ausdrücke. Klicken Sie nun auf das Feld Startzeit des Ereignisses Ereignis erstellen und wählen Sie die Registerkarte Ausdruck :



Schreiben Sie in das Eingabefeld den folgenden Ausdruck:

addDays(triggerBody()?['start'], add(30, rand(mul(2, -1), add(2, 1))))

und klicken Sie auf OK . Dieser Ausdruck löst genau unser Problem: Addiert 30 Tage plus / minus 2 Tage zur Startzeit des ersten Ereignisses. Aber was ist, wenn ich etwas Flexibilität brauche? Was ist, wenn ich verschiedene Arten von Veranstaltungen haben möchte? Bei Ereignissen des ersten Typs erhöhe ich die Startzeit um 30 Tage plus / minus 2 Tage, bei Ereignissen des zweiten Typs um 14 Tage plus / minus 3 Tage usw. Wie ist das möglich?

Hier ist ein Weg. Denken Sie daran, dass wir die Zeichenfolge "[RANDOM]" im Feld "Ort" unserer Veranstaltungen speichern? Jetzt werden wir zusätzliche Informationen in dieses Feld schreiben. Sein Inhalt ist Text im Format "[ZUFÄLLIG], NN, MM", wobei NN zweistellig und MM ebenfalls zweistellig ist. Wir werden den Zeitpunkt des Auftretens des Ereignisses um NN Tage plus / minus MM Tage erhöhen. In diesem Format kann ich sicher sein, dass die Zeichen an den Positionen 9 und 10 (beginnend mit 0) der Zeichenfolge NN darstellen und die Zeichen an den Positionen 12 und 13 MM sind. Und hier ist ein Ausdruck, der dieses neue Informationsspeicherformat verwendet, um die Startzeit eines Ereignisses zu erhöhen:

addDays(triggerBody()?['start'], add(int(substring(triggerBody()?['location'], 9, 2)), rand(mul(int(substring(triggerBody()?['location'], 12, 2)), -1), add(int(substring(triggerBody()?['location'], 12, 2)), 1))))

Es verwendet die Teilzeichenfolgenfunktion , um die erforderlichen Teile aus der Zeichenfolge auszuwählen, und die int- Funktion, um sie in eine Ganzzahl umzuwandeln.

Wow! Wir haben unser Ziel fast erreicht. Es bleibt nur die Endzeit des neuen Ereignisses festzulegen. Und hier treffen wir unsere letzte Hürde. Es ist notwendig, dass die Zeit des Endes der Veranstaltung gleich der Zeit ihres Beginns plus 15 Minuten ist. Microsoft Flow unterstützt die Funktion addMinutes , und Sie können einen Ausdruck wie folgt schreiben:

addMinutes(< >, 15)

Aufgrund der Art der Rand- Funktion erhalten wir jedoch einen Wert, der nichts mit dem Wert für die Zeit zu tun hat, zu der das Ereignis gestartet wurde. Stattdessen wäre es schön, die Variable 'nextStart' zu haben, die den Wert unseres Ausdrucks enthält. Dann könnten wir seinen Wert für die Zeit verwenden, zu der das Ereignis gestartet wurde, und verwenden

addMinutes(< 'nextStart'>, 15)

für die Zeit endet es. Und weißt du was? Microsoft Flow unterstützt Variablen. Zuerst müssen wir es initialisieren. Bewegen Sie den Mauszeiger über den Pfeil zwischen Auslöser und Filter. Klicken Sie auf das Pluszeichen und wählen Sie Aktion hinzufügen :



Geben Sie "Variablen" in das Suchfeld ein und wählen Sie "Variable initialisieren" :



Setzen Sie den Variablennamen auf 'nextStart' und geben Sie 'String' ein. Microsoft Flow verfügt nicht über einen separaten Typ für Datum und Uhrzeit, sondern verwendet überall Zeichenfolgen.



Jetzt müssen Sie den Wert für diese Variable festlegen. Dies kann hier nicht richtig gemacht werden, da noch nicht bekannt ist, ob dieses Ereignis korrekt ist. Erst nach dem Filter können wir uns dessen sicher sein. Daher fügen wir nach dem Senden der E-Mail-Benachrichtigung eine weitere Aktion des Variablentyps Set hinzu :



Hier setzen wir den Wert der erstellten Variablen auf unseren langen Ausdruck. Es bleibt nur, diese Variable in den Ausdrücken für die Start- und Endzeit des Ereignisses wiederzuverwenden. Sie können in einem Ausdruck wie diesem auf eine Variable verweisen:

variables('nextStart')

Daher sieht der Ausdruck für die Endzeit des Ereignisses folgendermaßen aus:

addMinutes(variables('nextStart'), 15)



Fazit


Dies ist das Ende der Geschichte. Sie müssen nur den Stream speichern, und Microsoft Flow startet ihn für uns.

Hoffe, dieser Artikel ist hilfreich für Sie. Für mich war Microsoft Flow ein großartiges Tool zur Aufgabenautomatisierung.

Source: https://habr.com/ru/post/de425847/


All Articles