Forum Replies Created

Page 4 of 4
  • Guillaume

    Member
    21 avril 2022 at 13h50 en réponse à: Séparer 2 adresses emails – Split ";

    Bonjour @Mimii,

    Pour être sûr de bien comprendre ton besoin, tu disposes dans ton application Power Apps un champ texte, dans lequel l’utilisateur peut saisir plusieurs addresses mails, séparées par des “;” ?

    Peux-tu indiquer quel est le type de champ SharePoint que tu utilises pour sauvegarder cette donnée ? Et si possible nous montrer le code qui te permet de sauvegarder cette donnée dans SharePoint.

    J’en profite également pour te proposer une autre écriture dans la formule d’affichage du message d’erreur dans ton label. Tu utilises actuellement ceci :

    If(IsMatch(txtEmail.Text; Email) = false; "Invalid email"; "")

    La fonction IsMatch() renvoyant une valeur true ou false, tu peux directement écrire

    If(!IsMatch(txtEmail.Text; Email); "Invalid email")

    Tu peux également l’améliorer en testant chacune des addresses séparées par le “;” :

    If(n    Len(n        Concat(n            Split(TextInput1.Text;";");n            If(n                IsBlank(Trim(Result)) || (CountRows(MatchAll(Result; "@")) = 1 && IsMatch(Result;Match.Email));n                "";n                "Error"n            )n        )n    ) > 0; "Invalid email"n)

    La fonction Concat() permet ici de vérifier pour chacune des entrées du tableau de valeurs renvoyées par la fonction Split(), si celle-ci respecte bien le format d’email.

    J’ai ajouté deux éléments dans la condition If() :
    – le premier pour ne pas remonter d’erreur si un “;” ou “; ” a été ajouté à la fin du champ texte
    – le second pour valider que c’est au format attendu : IsMatch(Email) ET avec un seul “@” (la fonction IsMatch() renvoyant true si l’addresse mail contient deux “@”)

    Je mesure enfin la longeur de la chaîne renvoyée par la fonction Concat()

    Avec cette formule, les entrées suivantes sont bien remontées en erreur :
    – test@test@test.com
    test@test.com; test

    Celle-ci est en revanche considérée comme correcte :
    test@test.com;

    CommentID=juvH0XeAMxOFgw2, PostID=rfGsKIJq3osCCIZ

  • Bonjour @CedZ,

    Le problème ne provient pas de l’action Get items, mais comme l’erreur l’indique, sur le paramétrage de l’action Apply to each 2.

    Le paramètre à indiquer pour ce champ doit être la propriété body de l’action Obtenir les pièces jointes.
    A ce niveau du flux, c’est sur les pièces jointes de notre élément SharePoint que l’on souhaite faire une boucle pour récupérer le contenu des fichiers.

    CommentID=ud9NwcQt782vK4p, PostID=jVjLGvVNxvZ2sbz

  • Bonjour Cédric,

    L’erreur retournée par Power Automate semble liée à une mauvaise utilisation de l’action Append to string variable, celle-ci ne pouvant pas faire référence à elle-même.
    Cependant, je pense que dans ton cas d’utilisation, il n’y ait pas besoin d’utiliser une variable pour l’email.

    Si je comprends bien, tu disposes d’une liste SharePoint avec :
    – une colonne Email : champ texte contenant le destinaire de l’email à envoyer
    – des pièces jointes attachées aux éléments de la liste SharePoint

    La première action à effectuer est bien de récupérer les éléments de la liste SharePoint (Get Items)

    Il faut effectivement ensuite faire une boucle sur les éléments récupérés pour pouvoir envoyer un mail pour chacun.
    Dans cette boucle, on ajoute l’action Send an email V2, et on renseigne le destinataire directement avec la valeur contenue dans le champ correspondant dans la liste SharePoint (ici pour moi le champ Title)

    Pour la récupération de la pièce jointe, cela se passe en plusieurs étapes.
    Il faut tout d’abord utiliser l’action Get attchments, pour récupérer les pièces jointes liées à notre élément de liste.

    Après cette action, comme plusieurs pièces peuvent être jointes à un seul et même élément SharePoint, il faut faire une nouvelle boucle (Apply to each) pour traiter chacune d’entre elles.

    L’action Get attachments ne nous retournant que l’ID et le nom de la pièce jointe, il faut dans cette nouvelle boucle, utiliser une seconde action (Get attachement content) pour récupérer le contenu de la pièce jointe.

    Pour pouvoir joindre les pièces jointes aux emails, il faut dans les propriétés avancées de l’action, cliquer sur l’icône T pour pouvoir modifier la valeur attendue pour la propriété Attachment.

    Et ainsi pouvoir passer les informations liées aux pièces jointes sous forme de tableau de données.

    Le format attendu pour ce tableau de données est le suivant :

    {n    "Name":nom_piece_jointe,n    "ContentBytes":contenu_piece_jointen}

    Pour construire ce tableau, il faut déclarer une variable en début de flow, avec l’action Initialize variable.

    Et dans la boucle sur les pièces jointes, ajouter l’action Append to array variable pour ajouter pour chacune des pièces jointes, une entrée dans le tableau.

    Il reste alors à indiquer dans l’action de l’email, pour la propriété Attachments, la variable de type tableau.

    Et à utiliser une action Set variable, pour vider le tableau des pièces jointes avant de boucler sur l’élément suivant de la liste SharePoint.

    C’est en tout cas un très bon cas d’utilisation d’automatisation d’une tâche récurrente et qui peut faire gagner un temps précieux 👍

    CommentID=koBMScwjF2s0MrI, PostID=jVjLGvVNxvZ2sbz

  • Guillaume

    Member
    20 avril 2022 at 13h19 en réponse à: Contrôle carte dans PowerApps : Zoom dynamique?

    Tanguy,

    Tu peux mettre ta variable myZoomLevel sur la propriété DefaultZoomLevel de la carte.

    Attention de bien changer la prorpiété DefaultLocation à true pour que cela soit pris en compte.

    CommentID=gbFcgujkr5qivLP, PostID=yUOXLikgS6UV9CO

  • Guillaume

    Member
    20 avril 2022 at 13h13 en réponse à: Contrôle carte dans PowerApps : Rechargement

    Bonjour Tanguy,

    Il semble pas possible de bloquer le rechargement de la carte lors de l’affichage de l’écran.

    Il existe cependant 2 solutions permettant de repositionner la carte dans sa configuration précédente.

    La première : lors du clic de l’utilisateur sur l’épingle, récupérer la latitude et la longitude du point central de la carte à cet instant avec les propriétés Map.CenterLocation.Latitude et Map.CenterLocation.Longitude

    Stocker ces valeurs dans des variables pour qu’elles puissent être réutilisées pour définir la position par défaut de la carte lors du retour sur l’écran, avec les propriétés DefaultLatitude et DefaultLongitude.

    Malheureusement, il n’est pas possible de récupérer le niveau de zoom, la propriété DefaultZoomLevel devra donc prendre une valeur fixe (par exemple 10).

    Attention, ne pas oublier de passer la valeur de la propriété DefaultLocation à true pour que cela soit bien pris en compte.

    La seconde : moins propre, mais permettant de conserver le niveau de zoom également, serait de “fusionner” tes 2 écrans. Les informations de détail affichées lors du clic sur l’épingle seraient dans le même écran que la carte, et affichées/masquées en jouant sur la propriété OnVisible des contrôles. En ajoutant à cela un fond un peu transparent (style popin) ou opaque (pour conserver l’impression de changement d’écran), il n’y aurait dans ce cas plus de rechargement de la carte.

    CommentID=Vyg7n9ceOaZBUEG, PostID=nfrxoaYdjlrIFok

  • Guillaume

    Member
    20 avril 2022 at 12h24 en réponse à: GESTION DES DROITS D'ACCÈS

    Bonjour @EDK,

    Une solution possible serait d’utiliser les propriétés de profil des utilisateurs.

    En ajoutant le connecteur Utilisateurs Office 365 dans ton application, tu peux ajouter une condition sur la propriété Visible de tes contrôles dans les écrans (ex : department ou jobTitle)

    Pour masquer des écrans, même principe, en modifiant la visibilité du bouton permettant de naviguer vers ces écrans.

    CommentID=j149OJD7iLAwH1j, PostID=KxB3OuSi067sknY

    • Guillaume

      Member
      20 avril 2022 at 17h15 en réponse à: GESTION DES DROITS D'ACCÈS

      Le Switch() sur la propriété Text du bouton devrait fonctionner.
      Tout dépend du paramètre à prendre en compte pour modifier l’état du bouton.

      Par exemple, ici avec une variable incrémentée lors du clic sur le bouton :

      SubCommentID=rWv5XaM6pEO9ZDJ, CommentID=j149OJD7iLAwH1j, PostID=KxB3OuSi067sknY

    • Guillaume

      Member
      20 avril 2022 at 15h53 en réponse à: GESTION DES DROITS D'ACCÈS

      Directement dans SharePoint, non ce n’est pas possible. On peut masquer les éléments d’une liste (ligne complète), mais pas uniquement un champ (toute une colonne de la liste)

      SubCommentID=yax4xORVvnpNFEW, CommentID=j149OJD7iLAwH1j, PostID=KxB3OuSi067sknY

Page 4 of 4