Un exemple d'utilisation de Microsoft Flow ou Comment donner des fleurs à votre femme

Ici, je vais démontrer un exemple pas si simple d'utiliser Microsoft Flow pour résoudre un problème pratique.

Énoncé du problème


Parfois, les tâches d'un programmeur découlent de la vie quotidienne. C'était un tel cas. Je voulais donner des fleurs à ma femme de temps en temps, disons une fois par mois. Mais en même temps, je ne voulais pas le faire à une date précise, par exemple, le premier jour du mois. Ce ne serait donc pas une surprise. Je voulais la randomisation. Par exemple, la prochaine fois que je donnerai des fleurs, il devrait y avoir un mois après l'heure précédente, plus / moins quelques jours.

Ces exigences n'ont rien de spécial. Il est assez facile d'écrire un programme qui me rappelle ces événements. Mais l'application de bureau présente un inconvénient important. Il ne fonctionnera que sur une seule machine, alors que j'en ai plusieurs (à la maison, au travail, ...). Et il y a un smartphone ... Ne serait-il pas agréable de recevoir des notifications sur l'un de mes appareils?

Eh bien, vous pouvez enregistrer des informations sur les événements dans une sorte de stockage en ligne (comme Mlab ). Dans ce cas, toutes les instances de mon application fonctionneront avec les mêmes informations, ce qui leur permettra d'être synchronisées entre elles. Cependant, je devrai installer ces applications sur tous mes ordinateurs. De plus, j'utilise Windows sur les ordinateurs et Android sur mon smartphone, je devrai donc écrire plusieurs applications différentes si je veux vraiment recevoir mes notifications partout. Comment surmonter ce problème? Utiliser le Web, bien sûr.

Si je crée une application Web, je peux l'utiliser sur presque tous les appareils. Super! Mais pas encore assez grand. Permettez-moi d'expliquer mon point. Bien qu'il ne soit pas si difficile d'écrire une application Web qui résout mon problème, je dois encore m'occuper de beaucoup de choses dans ce cas. Vous devez penser à l'hébergement, au stockage de données, au stockage de code, ... Et pourquoi? Presque toutes les fonctionnalités requises sont déjà implémentées dans les calendriers Web modernes tels que Google Calendar . Il peut créer des événements, les rendre récurrents, m'envoyer des notifications sur leur occurrence, etc. La seule chose qui manque est la randomisation requise par moi. Ne serait-ce pas formidable si je pouvais simplement ajouter cette fonctionnalité et utiliser toutes les autres fonctionnalités déjà disponibles?

Quand j'ai pensé à ce problème, je suis tombé sur le site Web IFTTT.com . L'idée de ce site est simple mais productive. Si quelque chose arrive, il fait quelque chose. Je sais que cela semble étrange, alors laissez-moi vous donner quelques exemples. Si j'ai reçu un e-mail d'une personne spécifique, envoyez-moi un SMS. Si mon auteur préféré a posté un nouvel article sur son blog, faites le moi savoir sur Slack. Ou s'il est temps pour un événement spécifique dans Google Agenda, envoyez-moi un e-mail. J'espère que maintenant je vois clairement vers quoi je mène. Ce service peut surveiller certains événements (ils sont appelés déclencheurs) et effectuer certaines actions lorsque ces événements se produisent. IFTTT prend en charge un grand nombre de déclencheurs et d'actions possibles. Je pouvais suivre mes événements dans Google Agenda et lorsqu'un événement spécifique se produisait, je m'envoyais un e-mail, supprimais l'ancien événement et j'en ajoutais un nouveau ultérieurement. Ouah! Exactement ce qui est requis! Mais pas vraiment.

Tout d'abord, IFTTT n'autorise qu'une seule action sur un déclencheur. Ce n'est pas un gros problème, car Vous pouvez créer plusieurs applets avec des déclencheurs identiques (une applet est une combinaison d'un déclencheur et d'une action dans IFTTT). L'un m'enverra une lettre, l'autre supprimera l'ancien événement, le troisième créera un nouvel événement. Mais il y a un obstacle plus sérieux. Pour un nouvel événement, je dois créer un temps de réponse avec randomisation. Et je n'ai pas trouvé comment faire cela dans IFTTT. Cela signifie que ce service ne peut pas résoudre mon problème. Mais peut-être existe-t-il d'autres services similaires sur Internet? Oui.

Le site suivant que j'ai examiné était Zapier . Ici, nous pouvons utiliser plusieurs actions sur un déclencheur, ce qui est bien. Mais il n'est disponible que pour de l'argent, ce qui n'est pas si bon. Je n'ai pas joué avec Zapier depuis assez longtemps, mais j'ai eu l'impression que cela ne donne pas non plus la possibilité de la randomisation dont j'ai besoin. Bien qu'ici, je puisse me tromper. En tout cas, je suis passé au candidat suivant.

C'était Microsoft Flow . Ce service me permet de suivre gratuitement 750 déclencheurs par mois. C'est plus que suffisant pour mes besoins. De plus, il prend en charge les expressions, y compris la fonction rand () ! C'est exactement ce dont vous avez besoin. Maintenant, laissez-moi vous montrer comment résoudre le problème décrit à l'aide de Microsoft Flow.

Solution


Vous devez d'abord créer un nouveau flux. Un flux est une combinaison de déclencheur et d'action. Pour ce faire, inscrivez-vous sur le site et dans le menu principal cliquez sur Mes flux puis sur Créer à partir du blanc :



Cliquez sur le bouton Créer à partir de blanc:



Il vous sera demandé de sélectionner un déclencheur. Saisissez "calendrier" dans le champ de recherche et sélectionnez Google Agenda :



Dans la liste des déclencheurs disponibles pour Google Agenda, sélectionnez Quand un événement commence :



Ici, vous pouvez être invité à autoriser l'accès de Microsoft Flow à Google Agenda en votre nom.

Le déclencheur est maintenant prêt. Son seul paramètre est le calendrier:



Oui, vous pouvez créer plusieurs calendriers dans Google Agenda. Chaque événement appartient à l'un des calendriers et vous devez sélectionner un calendrier dont les événements déclencheront vos actions.

Il n'y a rien de mal à créer un nouveau calendrier et à y mettre tous les événements pour lesquels vos actions doivent être déclenchées. Mais si tous les événements du calendrier ne doivent pas être traités, vous pouvez utiliser le filtrage. Cliquez sur Nouvelle étape puis sur Ajouter une condition :



Cela créera un filtre pour vous. Vous devez maintenant décider exactement comment nous voulons filtrer les événements. Par exemple, je souhaite traiter uniquement les événements qui contiennent le texte «[RANDOM]» dans le champ «location». Pour ce faire, cliquez sur le champ de saisie Choisir une valeur . Microsoft Flow vous montrera une liste de valeurs possibles avec lesquelles vous pouvez travailler:



Cliquez sur Liste des événements Lieu de l'événement . Et remplissez les champs restants avec les valeurs appropriées:



Faites attention au lien Modifier en mode avancé . Elle est très serviable. Si vous cliquez dessus, vous obtenez une représentation de la même condition qu'une expression de texte:



Cela vous aidera beaucoup quand viendra le temps d'écrire vos propres expressions.

Vous pouvez maintenant ajouter des actions pour nos événements. Dans la section Si oui de votre filtre, cliquez sur le lien Ajouter une action . Ici, je vais créer une action qui m'enverra une notification d'événement sur Gmail:



Comme vous pouvez le voir, vous pouvez utiliser les données de votre événement pour remplir le sujet, le corps et d'autres propriétés de cette action.

Maintenant, nous avons des notifications. Il est temps de supprimer l'ancien événement du calendrier et d'en créer un nouveau ultérieurement. Utilisez le lien Ajouter une action pour créer l'action Supprimer un événement pour Google Agenda:



Il faut dire qu'il est tout à fait possible de simplement changer l'événement sur le calendrier au lieu de supprimer l'ancien et d'en créer un nouveau. Mais ici, je vais néanmoins m'en tenir à cette dernière option pour vous montrer une autre fonctionnalité Microsoft Flow. Supposons que je souhaite que la création d'un nouvel événement dans le calendrier se produise non pas après la suppression de l'ancien, mais en parallèle avec cela. Passez la souris sur les actions Envoyer un e - mail et Supprimer un événement . Un signe plus apparaîtra à l'écran. Cliquez dessus et sélectionnez Ajouter une branche parallèle → Ajouter une action dans le menu contextuel:



Nous pouvons maintenant ajouter l'action parallèle Créer un événement à partir de Google Agenda . Pour cette action, nous prendrons le titre, la description et l'emplacement de notre événement source. Il ne reste plus qu'à définir les heures de début et de fin du nouvel événement:



Nous arrivons maintenant à la partie vraiment intéressante. Nous devons en quelque sorte ajouter un nombre aléatoire de jours au début de l'événement en cours. Nous utiliserons cette nouvelle date comme début de l'événement créé. Par exemple, je veux ajouter 30 jours plus / moins 2 jours. La documentation des fonctionnalités disponibles peut être trouvée ici . J'avoue, ce n'est pas une lecture très simple. J'avais beaucoup de questions, en particulier sur la façon d'extraire l'heure de début de l'événement source afin qu'il puisse être utilisé dans les fonctions. De l'aide peut être obtenue à partir de notre filtre. Rappelez-vous le lien Modifier en mode avancé :



Cliquer dessus montre l'expression correspondante:



Cela m'a donné un indice pour écrire mes expressions. Cliquez maintenant sur le champ Heure de début de l' événement Créer un événement et sélectionnez l'onglet Expression :



Dans le champ de saisie, écrivez l'expression suivante:

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

et cliquez sur OK . Cette expression résout exactement notre problème: ajoute 30 jours plus / moins 2 jours à l'heure de début de l'événement initial. Et si j'ai besoin de flexibilité? Et si je veux avoir plusieurs types d'événements? Pour les événements du premier type, je vais augmenter l'heure de début de 30 jours plus / moins 2 jours, pour les événements du deuxième type - de 14 jours plus / moins 3 jours, etc. Comment est-ce possible d'y parvenir?

Voici une façon. Rappelez-vous que nous stockons la chaîne «[RANDOM]» dans le champ «location» de nos événements? Nous allons maintenant écrire des informations supplémentaires dans ce domaine. Son contenu sera du texte au format "[ALÉATOIRE], NN, MM", où NN est à deux chiffres et MM est également à deux chiffres. Nous augmenterons le temps de survenance de l'événement de NN jours plus / moins MM jours. En utilisant ce format, je peux être sûr que les caractères aux positions 9 et 10 (à partir de 0) de la chaîne représenteront NN, et les caractères aux positions 12 et 13 seront MM. Et voici une expression qui utilise ce nouveau format de stockage d'informations pour augmenter l'heure de début d'un événement:

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))))

Il utilise la fonction de sous - chaîne pour sélectionner les parties nécessaires dans la chaîne et la fonction int pour les convertir en entier.

Ouah! Nous avons presque atteint notre objectif. Il ne reste plus qu'à régler l'heure de fin du nouvel événement. Et ici, nous rencontrons notre dernier obstacle. Il faut que l'heure de fin de l'épreuve soit égale à l'heure de son départ plus 15 minutes. Microsoft Flow prend en charge la fonction addMinutes et vous pouvez écrire une expression comme:

addMinutes(< >, 15)

Cependant, par la nature de la fonction rand , nous nous retrouvons avec une valeur qui n'a rien à voir avec la valeur au moment où l'événement a commencé. Au lieu de cela, il serait bien d'avoir la variable 'nextStart' qui contiendrait la valeur de notre expression. Ensuite, nous pourrions utiliser sa valeur pour le moment où l'événement a commencé, et utiliser

addMinutes(< 'nextStart'>, 15)

pour le moment où ça se termine. Et tu sais quoi? Microsoft Flow prend en charge les variables. Nous devons d'abord l'initialiser. Survolez la flèche entre la gâchette et le filtre. Cliquez sur le signe plus et sélectionnez Ajouter une action :



Entrez «Variables» dans le champ de recherche et sélectionnez Initialiser la variable :



Définissez le nom de la variable sur 'nextStart' et tapez 'String'. Microsoft Flow n'a pas de type distinct pour les dates et les heures; il utilise des chaînes partout.



Vous devez maintenant définir la valeur de cette variable. Cela ne peut pas être fait ici, car on ne sait pas encore si cet événement est correct. Ce n'est qu'après le filtre que nous pouvons en être sûrs. Par conséquent, nous ajoutons une autre action du type de variable Set après l'envoi de la notification par courrier électronique:



Ici, nous définissons la valeur de la variable créée sur notre expression longue. Il ne reste plus qu'à réutiliser cette variable dans les expressions pour l'heure de début et de fin de l'événement. Vous pouvez faire référence à une variable dans une expression comme celle-ci:

variables('nextStart')

Par conséquent, l'expression de l'heure de fin de l'événement ressemblera à:

addMinutes(variables('nextStart'), 15)



Conclusion


C'est la fin de l'histoire. Il vous suffit de sauvegarder le flux et Microsoft Flow le lancera pour nous.

J'espère que cet article vous sera utile. Pour moi, Microsoft Flow a été un excellent outil d'automatisation des tâches.

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


All Articles