Dans le cadre de l’automatisation des processus métiers ou IT, Microsoft offre de très bons outils, comme Power Apps. Cependant dans certains cas, la gestion des dates et heures peut se révéler être un vrai casse-tête. Et c’est encore plus vrai lorsque les utilisateurs sont présents sur différents fuseaux horaires.
Contexte : un client international
Environnement technique : Power Apps, Power Automate et Azure Automation.
Permettre à des utilisateurs IT présents sur différents fuseaux horaires de programmer des actions dans Power Apps :
- Réinitialiser le jeton d’authentification d’un utilisateur dont le compte serait compromis ;
- Réinitialiser des comptes invités dans le cadre de partage externe ;
- Désactiver un compte lors du départ d’un collaborateur ;
- Déléguer un compte OneDrive à un autre utilisateur.
PowerApps sert d’interface pour effectuer cette action. En effet, il existe un composant « Sélecteur de dates », permettant aux utilisateurs de sélectionner une date de façon simple et efficace. Il est également capable d’afficher l’heure mais ne propose pas de la sélectionner rendant alors la planification plus complexe.
Cette fonctionnalité – a priori basique mais manquante – nécessite donc de bricoler deux listes déroulantes contenant respectivement les heures et les minutes.
Grâce à une formule alambiquée, il est possible de reformater cette date pour qu’elle respecte le format Timestamp attendu par Power Automate.
Concatenate(Text(DateValue(DatePickerToken.SelectedDate);"yyyy-mm-dd");"T";DrpTokenHours.Selected.Value;":";DrpTokenMinuts.Selected.Value;"Z")
Ce sélecteur de dates gère dans sa propriété DateTimeZone deux types différents, Local ou UTC.
Les utilisateurs devant planifier la tâche en se basant sur leur fuseau horaire, il est nécessaire de sélectionner le type « Local ».
Toutefois, un problème se pose. En effet PowerAutomate, dans sa fonction « Delay Until » qui permet de mettre en pause une action jusqu’à l’heure programmée, attend un format UTC. Or, pour pouvoir convertir l’heure envoyée par PowerApps, il faut connaître le fuseau Horaire de l’utilisateur qui a effectué l’action depuis PowerApps.
C’est là qu’une fonction méconnue mais très pratique entre en jeu, la fonction TimeZoneOffset(). En y passant la fonction Now(), qui retourne l’heure locale de l’utilisateur, elle permet de retourner la différence de temps avec l’heure UTC.
La dernière étape consiste à utiliser cette différence de temps pour calculer l’heure UTC, il suffit alors d’utiliser la fonction addToTime() à notre date. Cette fonction, comme son nom ne l’indique pas permet également de soustraire du temps, en effet la valeur envoyée par TimeZoneOffset est de la forme +120 (minutes) ou –120 (Minutes).
Cette petite astuce vous permettra de gérer au mieux vos planifications dans le cadre de développement d’applications avec des utilisateurs qui sont sur des fuseaux horaires différents.
Laurent Heroguelle
Administration Microsoft Capitaine Obvie Green IT Microsoft Viva MS Teams OneDrive Outlook Power Apps Power BI Power Platform SharePoint Solution Obvie Stream Transformation Numérique