← Accueil

Limites et astuces du déclencheur "pour un élément sélectionné" dans SharePoint pour améliorer l'UX

👨🏻‍💻 Par Julien Leture · Expert technique SharePoint, Power Platform et Microsoft 365 Copilot
🗓️ 10 octobre 2024 · 🕖 12 minutes de lecture · 📖 Article original sur LinkedIn

Et si déclencher un flux dans SharePoint devenait encore plus simple, tout en évitant certains pièges ? Dans cet article, je partage mon retour d'expérience sur le déclencheur "pour un élément sélectionné" avec des astuces concrètes pour améliorer l'UX et contourner une limitation clé liée à la gouvernance (l'environnement par défaut !)

Contexte

Utiliser une liste SharePoint, ou directement Microsoft Lists, est un moyen simple pour stocker de l'information. Par exemple, on peut l'utiliser pour stocker des référentiels (marques, villes, statuts, services, produits, etc.) ou des listes d'éléments (tâches, activités, courses, idées, etc.).

Il peut arriver qu'on veuille effectuer un traitement spécifiquement sur une ligne d'une liste SharePoint. Power Automate est ainsi l'outil idéal au sein de Microsoft 365.

Le déclencheur "pour un élément sélectionné" permet ainsi de lancer un traitement pour une ligne sélectionnée dans une liste.

Quel traitement appliquer sur une ligne ? Dans des précédents projets, j'avais eu différents besoins, notamment :

Mise en place du flux

Depuis l'interface de la liste SharePoint, le bouton Automatiser , accessible à la fois dans le ruban en tête de liste ou dans le menu contextuel d'un élément permet de lister les flux Power Automate existants et associés à cette liste.

Menu Automatiser
Menu "Automatiser"

De manière native, il est même possible de créer directement un flux basique (appelés Règles dans cet écran) mais uniquement avec l'un des trois déclencheurs suivants :

Seulement trois déclencheurs sont présents dans cet écran
Seulement trois déclencheurs sont présents dans cet écran
Aucune trace du déclencheur "pour un élément sélectionné" qui existe pourtant bien.

👉 Qu'importe. On peut se rendre sur le portail de Power Automate, dans l'environnement par défaut, et créer un nouveau flux instantané . Au niveau du déclencheur, il suffit de choisir "Pour un élément sélectionné - SharePoint".

Nouveau flux de cloud instantané
Nouveau flux de cloud instantané
Déclencheur Pour un élément sélectionné - SharePoint
Déclencheur "Pour un élément sélectionné - SharePoint"
Pour illustrer cet article, je vais mettre en place un flux qui duplique une ligne sélectionner.

Dans le flux, une seule action SharePoint est donc nécessaire : Créer un élément .

Pour le titre, qui est la seule colonne de cette liste pour le moment, il suivi de renseigner le titre d'origine (de l'élément sélectionné) suivi, par exemple, de la mention - Copie.

Construction du flux
Construction du flux

🔐 Concernant l'autorisation d'exécution du flux par les utilisateurs, dans ce scénario, on peut appliquer les mêmes autorisations que la liste SharePoint. C'est à dire que les utilisateurs qui ont accès à la liste, ont aussi accès au flux.

Ce comportement peut être modifié, notamment pour changer les autorisations. Cela s'effectue depuis la page du flux : Utilisateurs avec autorisations d'exécution uniquement > Gérer les autorisations Exécution uniquement > Inviter une liste ou bibliothèques SharePoint

Le flux peut avoir les mêmes autorisations que la liste SharePoint
Le flux peut avoir les mêmes autorisations que la liste SharePoint

Retour dans la liste SharePoint depuis l'interface web. En sélectionnant un élément, le menu Automatiser affiche désormais le nouveau flux créé (ici appelé Dupliquer l'élément). En cliquant dessus, un panneau Power Automate s'ouvre sur le côté droit. A la première exécution, l'utilisateur doit confirmer l'utilisation d'une connexion à SharePoint.

En l'exécutant, le flux se lance et une nouvelle ligne apparait au bout de quelques secondes.

Le flux est présent dans le menu Automatiser
Le flux est présent dans le menu Automatiser
Panneau de confirmation du lancement du flux
Panneau de confirmation du lancement du flux
Une nouvelle ligne a été créée
Une nouvelle ligne a été créée
Voilà donc un premier exemple ultra simple de l'appel d'un flux Power Automate en sélectionnant un élément dans une liste SharePoint.

💡 Mais pourquoi avoir créé le flux dans l'environnement par défaut ? Cet article n'est pas un cours de gouvernance, mais, pour résumer, l'environnement par défaut est un environnement où tous les flux de tous les utilisateurs sont stockés en vrac.

Ce n'est pas une bonne pratique de l'utiliser. Il est plutôt conseillé d'utiliser des environnements dédiés avec un découpage par géographique (pour les groupes internationaux), par services ou directions (RH, marketing, ventes, etc.) ou par type (production, tests, développement). Il est bien sûr possible de croiser ces types de découpage, par exemple pour proposer l'environnement de test du service RH Europe, l'environnement de production du marketing Asie, etc.

👉 Retour dans le portail Power Automate, mais cette fois-ci en allant dans un environnement autre que celui par défaut : par exemple un environnement de développement. On peut recréer le même flux, avec le même déclencheur et sur la même liste. Pour faire "bien", on en profite aussi pour créer une solution et utiliser des variables d'environnement pour stocker l'URL du site et le nom de la liste.

Environnement de développement
Environnement de développement
Nouvelle solution
Nouvelle solution
Construction du même flux que précedemment
Construction du même flux que précedemment

🔐 Dernier point important : celui du partage et de l'autorisation d'exécution du flux par les utilisateurs. Dans le cadre d'un flux hébergé dans une solution et dans un environnement dédié, il faut partager ce flux à un ou plusieurs utilisateurs, ou mieux, à des groupes de sécurité (ou équipes Dataverse). Il n'est plus possible, contrairement à la première solution, de récupérer les autorisations de la liste SharePoint.

Cela s'effectue depuis la page du flux : Utilisateurs avec autorisations d'exécution uniquement > Gérer les autorisations Exécution uniquement > Inviter des équipes ou utilisateurs système

Partage en lecture du flux à un groupe d'utilisateurs
Partage en lecture du flux à un groupe d'utilisateurs

😏 Sans surprise, côté SharePoint, seul le premier flux est affiché. C'est-à-dire celui de l'environnement par défaut. Ce point est bien expliqué dans la documentation du connecteur :

Pour un élément sélectionné : permet aux utilisateurs de listes de déclencher un flux après avoir sélectionné un élément dans une liste. Notes : Seuls les flux au sein de l'environnement par défaut peuvent être exécutés manuellement à partir d'une liste SharePoint.

Cependant, dans une autre page non traduite en français, la documentation est légèrement différente et apporte une nuance à cette limitation :

For Flows that use the 'For a selected item' or the 'For a selected file' trigger, only those that are part of the default environment in Power Automate are listed within the SharePoint Automate menu.

Pour aller plus loin, en analysant les échanges réseau sur la page de la liste, SharePoint récupère les flux associés à la liste, mais ne retourne que ceux de l'environnement par défaut :

_api/web/GetListUsingPath(DecodedUrl=@a1)/SyncFlowInstances
Requête qui retourne les flux de la liste
Requête qui retourne les flux de la liste

Problématiques

À ce stade, il y a trois problèmes souvent remontés par les clients :

  • L'accès au flux n'est pas aisé, il faut passer par le menu Automatiser ;
  • Le stockage dans l'environnement par défaut ne respecte pas la gouvernance en place ;
  • Un panneau Power Automate s'affiche sur la droite avant de lancer le flux, même s'il n'y a rien à renseigner ;

Solutions

1️⃣ Se passer du menu Automatiser

Pour le premier point, il est facile de créer un bouton sur chaque ligne pour lancer un flux. Cela passer par du formattage JSON. La documentation est très complète à ce sujet, on peut donc facilement la mettre en place :

La mise en forme des colonnes vous permet de créer des boutons qui exécutent des flux sur l'élément de liste correspondant lorsque vous les sélectionnez. (...) Le panneau de lancement de flux s'affiche après avoir choisi le bouton et le flux s'exécute simplement.

Pour cela, il faut créer une nouvelle colonne vide qui va accueillir le bouton, par exemple une colonne Action 1. En cliquant sur l'entête de la nouvelle colonne, puis Formatter la colonne, on peut injecter du code JSON issue de la documentation.

Création d'une colonne vide
Création d'une colonne vide
Formattage de la colonne
Formattage de la colonne

La seule information manquante pour lancer un flux est celle de l'identifiant du flux. On peut l'obtenir depuis la page Power Automate du flux en cliquant sur Exporter > Obtenir l'identificateur de flux.

L'id du flux s'obtient depuis l'interface Power Automate
L'id du flux s'obtient depuis l'interface Power Automate
Il suffit de copier l'id du flux
Il suffit de copier l'id du flux

Par cette méthode, l'identifiant intègrera également l'identifiant de l'environnement par défaut, par exemple :

v1/Default-aaa80bce-0f68-4c60-0000-c8b82a7e0758/108994ff-1234-44db-b299-8fb37c45f8bb

Il est aussi possible de ne mettre que la fin avec l'identifiant du flux pour les flux hors solution. On peut le retrouver dans l'adresse de la page de modification du flux. Dans ce cas, SharePoint considéra qu'il s'agit de l'environnement par défaut :

108994ff-1234-44db-b299-8fb37c45f8bb

Le JSON pour créer le bouton qui va appeler le flux est donc celui-ci (le coeur de la solution est dans le bloc customRowAction avec l'id du flux dans actionParams):

 {
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "button",
  "customRowAction": {
    "action": "executeFlow",
    "actionParams": "{\"id\": \"v1/Default-aaa80bce-0f68-4c60-0000-c8b82a7e0758/108994ff-1234-44db-b299-8fb37c45f8bb\"}"
  },
  "attributes": {
    "class": "ms-fontColor-themePrimary ms-fontColor-themeDarker--hover"
  },
  "style": {
    "border": "none",
    "background-color": "transparent",
    "cursor": "pointer"
  },
  "children": [
    {
      "elmType": "span",
      "attributes": {
        "iconName": "Flow"
      },
      "style": {
        "padding-right": "6px"
      }
    },
    {
      "elmType": "span",
      "txtContent": "Dupliquer"
    }
  ]
}
Bouton pour lancer un flux
Bouton pour lancer un flux
En cliquant sur ce nouveau bouton, le flux de l'environnement par défaut s'exécute et la ligne est correctement dupliquée. Cela permet donc de lancer le flux plus facilement et de manière plus intuitive sans passer par le menu Automatiser.

L'affichage du bouton, le libellé, le style, l'icône, peuvent aussi être paramètres et dépendre du statut de la ligne.

Il est également possible de changer le libellé du panneau et du bouton en les spécifiant dans le JSON (headerText et runFlowButtonText). Pour des raisons de lisibilité, seul la partie modifié du bloc customRowAction est affichée ici :
"customRowAction": {
    "action": "executeFlow",
    "actionParams": "{\"id\": \"v1/Default-aaa80bce-0f68-4c60-0000-c8b82a7e0758/108994ff-5a15-44db-b299-8fb37c45f8bb\", \"headerText\": \"Titre Dupliquer la ligne\", \"runFlowButtonText\": \"Bouton Dupliquer la ligne\"}"
  }
Affichage par défaut
Affichage par défaut
Surcharge des libellés
Surcharge des libellés

2️⃣ Lancer un flux d'un autre environnement que celui par défaut

La bonne nouvelle est que l'astuce du bouton en JSON permet de lancer le flux de l'environnement dédié, qui n'est pas celui par défaut ! Car oui, le flux de l'environnement dédié, possède aussi un identifiant unique et cet identifiant peut être utilisé depuis l'interface de SharePoint. Toujours depuis le menu Exporter > Obtenir l'identificateur de flux, on obtient par exemple :

v1/2491dbb1-0000-e0ff-9fa8-64ab156cf0f9/d6949e71-1234-4cdc-ba3d-9fc40f1d00bb

Pour la démonstration, je crée une nouvelle colonne Action 2 dans la liste SharePoint afin d'avoir les deux comportements en parallèle. Bien sûr, cela n'a pas de sens en production. En cliquant sur mon nouveau bouton appelé ici Dupliquer DEV cela lance bien le flux de l'environnement dédié !

Le bouton permet de lancer un flux d'un environnement autre que celui par défaut
Le bouton permet de lancer un flux d'un environnement autre que celui par défaut
Il s'agit du deuxième flux, et pas celui de l'environnement par défaut
Il s'agit du deuxième flux, et pas celui de l'environnement par défaut

Bien que la documentation officielle indique que seuls les flux dans l'environnement par défaut sont compatibles avec le déclencheur "pour un élément sélectionné" (et également "pour un fichier sélectionné", l'équivalent pour une bibliothèque de documents), cela ne concerne en réalité que le bouton "Automatiser".

Oui, on peut lancer un flux "pour un élément sélectionné" sur un environnement autre que celui par défaut et dans une solution avec un bouton construit en JSON. Cela permet donc de respecter la gouvernance en place chez les clients.
Par le passé, la documentation était moins claire à ce sujet. En regardant l'historique de la documentation dans GitHub, cette possibilité a été documentée uniquement à la fin de l'année 2021. Je tiens à apporter cette précision car j'ai été confronté à ce problème début 2020, date à laquelle cela n'était pas possible... 🤯
La documentation a été mise à jour le 15 novembre 2021
La documentation a été mise à jour le 15 novembre 2021
Une version française de la documentation du connecteur ne précise toujours pas que la limitation ne concerne que le bouton Automatiser !
Une version française de la documentation du connecteur ne précise toujours pas que la limitation ne concerne que le bouton Automatiser !"
Pour un fichier sélectionné a la même limitation que pour un élément sélectionné
"Pour un fichier sélectionné" a la même limitation que "pour un élément sélectionné"

3️⃣ Lancer un flux sans ouvrir le panneau Power Automate

Reste un problème qui est souvent gênant pour les utilisateurs : l'affichage d'un panneau Power Automate sur la droite afin de valider l'exécution d'un flux. Si celui-ci est nécessaire quand il y a des paramètres d'entrée, quand on veut juste lancer un flux, cela fait perdre du temps.

Une des astuces est de changer le déclencheur afin de ne pas utiliser "pour un élément sélectionné" mais "lorsqu'un élément est créé ou modifié".

Dans les grandes lignes, il faut :

Pour éviter les boucles infinies, on ajoute une condition dans le déclencheur. C'est souvent une option "oubliée" par les concepteurs de flux car elle est cachée dans le menu Paramètres. Dans les paramètres du déclencheur, au niveau du bloc Conditions du déclencheur, ajouter la condition suivante :
@triggerOutputs()?['body/Dupliquer']

Dupliquer étant déjà un booléen, inutile de tester sa valeur avec true. Le code suivant est à proscrire, bien que fonctionnel :

@equals(triggerOutputs()?['body/Dupliquer'], true)

Cela évite que le flux ne se lance inutilement. Idéal pour ne pas consommer des quotas d'exécution. Il est aussi possible de "doubler" la vérification sur la valeur de la colonne Dupliquer dans une action à l'intérieur du flux pour ceux qui auraient peur de tomber dans une boucle inifinie. Mais cela n'est pas nécessaire et alourdit la lisibilité du flux.

Création d'une colonne Oui/Non
Création d'une colonne Oui/Non
Nouveau flux alternatif avec un déclencheur qui ne dépend plus de la sélection
Nouveau flux alternatif avec un déclencheur qui ne dépend plus de la sélection
Ajout d'une condition pour éviter une boucle infinie
Ajout d'une condition pour éviter une boucle infinie
Problème : si on ne passe plus par le panneau de droite, il faut modifier la ligne en ouvrant son formulaire. On ne gagne donc pas de temps ! On pourrait utiliser l'édition en mode grille, mais sortir de ce mode nécessite aussi un clic de plus, donc toujours aucun gain de temps.
Modification de la valeur par le formulaire
Modification de la valeur par le formulaire
Modification de la valeur par le mode grille
Modification de la valeur par le mode grille
Si la colonne Dupliquer est à Oui, alors une coche s'affiche
Si la colonne Dupliquer est à Oui, alors une coche s'affiche
A la fin du traitement, la ligne est dupliquée et Dupliquer revient à Non (absence de coche)
A la fin du traitement, la ligne est dupliquée et Dupliquer revient à Non (absence de coche)
Le formattage JSON est encore la solution ! Si pour la première problématique on a utilisé un bouton pour lancer un flux Power Automate, on peut aussi créer un bouton pour modifier une valeur d'une ligne sans ouvrir le formulaire.

Grâce à cette technique, on va pouvoir changer la valeur de la colonne Dupliquer sans ouvrir le formulaire (le coeur de la solution est dans le bloc customRowAction où on passe à "1" la valeur de la colonne Dupliquer) :

 {
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "button",
  "customRowAction": {
    "action": "setValue",
    "actionInput": {
      "Dupliquer": "1"
    }
  },
  "attributes": {
    "class": "ms-fontColor-themePrimary ms-fontColor-themeDarker--hover"
  },
  "style": {
    "border": "none",
    "background-color": "transparent",
    "cursor": "pointer"
  },
  "children": [
    {
      "elmType": "span",
      "attributes": {
        "iconName": "Flow"
      },
      "style": {
        "padding-right": "6px"
      }
    },
    {
      "elmType": "span",
      "txtContent": "Dupliquer la ligne"
    }
  ]
}
Et de 3 ! Bien sûr les 3 colonnes avec les boutons ne sont présentes que pour illustrer les différentes solutions.
Et de 3 ! Bien sûr les 3 colonnes avec les boutons ne sont présentes que pour illustrer les différentes solutions.
La ligne a bien été créée par le flux
La ligne a bien été créée par le flux.
L'historique de l'élément montre bien le changement de la valeur Dupliquer à Non, puis Oui, et enfin Non
L'historique de l'élément montre bien le changement de la valeur Dupliquer à Non, puis Oui, et enfin Non.
Attention, pour que cela fonctionne, la colonne qui est modifiée (ici Dupliquer) doit être affichée dans la vue. En effet, le formatage JSON s'exécute côté client. Si la colonne n'est pas visible, la modification n'aura pas lieu. Cette limitation peut avoir un impact et être source d'anomalie.
Place à la version finale. On ne garde qu'une colonne d'action, celle avec la méthode qui change la valeur de Dupliquer. D'un clic, l'utilisateur demande à dupliquer la ligne de son choix. Après quelques secondes (ou minutes, selon la licence Power Automate du propriétaire du flux), la ligne est dupliquée :
Démonstration en vidéo
Démonstration en vidéo : je clique sur le bouton / la colonne Dupliquer est cochée / une nouvelle ligne est créée et l'élément sélectionné n'a plus la coche

Conclusion

Les flux avec le déclencheur "pour un élément sélectionné" ne s'affichent dans le menu Automatiser de SharePoint que s'ils sont dans l'environnement par défaut.

Pour faciliter le déclenchement du flux par les utilisateurs, un bouton sur chaque ligne peut être mis en place avec du JSON.

Ce bouton peut, via l'identificateur composé du flux et de son environnement, appeler un flux qui n'est pas dans l'environnement par défaut, mais dans n'importe quel autre environnement et dans une solution. Cela permet de garantir les bonnes pratiques sur la gestion des environnements Power Platform.

Utiliser une propriété Oui/Non avec un bouton qui change la valeur d'un simple clic permet de lancer un flux Power Automate "lorsqu'un élément est modifié" sans faire apparaître le panneau sur la droite de l'écran qui ralentit le parcours utilisateur.

Pour moi, la meilleure solution pour les flux qui n'attendent pas de paramètre à l'entrée est l'usage d'une propriété Oui/Non qui déclenche l'exécution d'un flux asynchrone. Cela est le plus fluide pour l'utilisateur puisqu'elle ne nécessite qu'un seul clic et le flux peut être stocké dans un environnement autre que celui par défaut.
Et vous, quels sont vos techniques pour lancer facilement un traitement côté SharePoint avec Power Automate ? Je suis disponible dans les commentaires de l'article sur LinkedIn pour échanger à ce sujet.

#sharepoint #powerautomate #jsonformatting