

R3dKap
Expert Power AppsRéponses céées sur le Forum
R3dKap
Membre28 janvier 2025 à 12h23 en réponse à: Barre de recherche de type liste de choix et texte dans un composantSalut Diane,
Lorsque tu dis que tu as créé ta barre de recherche à partir d’un composant que veux-tu dire ? Tu as créé un composant dans lequel tu as mis une liste déroulante et une zone de texte pour en faire une barre de recherche réutilisable sur tous tes écrans ?
Peux-tu nous mettre une capture de ta barre de recherche sur l’écran où se trouve la galerie ?
Qu’y a-t-il d’affiché dans ta galerie ?
Quelle est ta source de données (SharePoint / Dataverse) ?
Qu’as-tu dans le Items de ta galerie ?
Comment la barre de recherche doit-elle fonctionner ? Sur quels champs de ta source de données permet-elle de filtrer ?
C’est normal que tu aies cette erreur… Le code de ton OnSelect est faux :
Set(PhotoCaptured;AddMediaButton1.Media)
Dans mon message précédent j’ai bien insisté sur le fait que on ne peut pas utiliser AddMediaButton1.Media. Cette propriété contient une chaîne de caractères qui représente un genre de lien vers le blob qui contient l’image. C’est la propriété Image du contrôle Set(PhotoCaptured;AddMediaButton1.Media)qui contient l’image à enregistrer dans SharePoint.
Le bon code du OnSelect doit être :
Set(PhotoCaptured; UploadedImage1.Image)
Et non, la mise en forme de la colonne image de ta liste n’a pas d’impact ici.
Tu as changé le nom de ta colonne de photo dans ta liste ?
Avant, elle s’appelait PhotoCaptured non ?
Puisque tu as 2 cas de figure qui peuvent se présenter pour un matricule, alors il te faut une condition. C’est aussi simple que ça.
Au début du flux, tu initialises une variable de chaîne strTabHTML à vide.
Ensuite, dans la boucle, tu peux mettre en place la logique suivante :
- le Set variable pour récupérer le matricule ça c’est OK
- ensuite tu mets une condition qui détermine si c’est le 420 qui est atteint
- dans la branche OUI tu construis le tableau HTML pour le 420 et tu mets le résultat dans strTabHTML
- dans la branche NON tu construis le tableau HTML pour le 840 et tu mets le résultat dans strTabHTML
- après la condition, tu mets l’action d’envoi du mail en y insérant le strTabHTML
- et puis tu mets à jour la ligne pour indiquer que la notif est envoyée
Tu vois ce que je veux dire ?
Top !
Si tu changes le déclencheur d’un flux qui est déjà dans ton application, il faut que tu enlèves complètement le flux de ton app et que tu le réinjectes… 😉
Salut François,
La fonction IsBlank() sert à vérifier si une variable ou un enregistrement est vide. Pour vérifier si une table est vide il faut utiliser la fonction IsEmpty(). En effet, la propriété Attachments (attention ça s’écrit comme ça 😉) est une table car il peut y avoir plusieurs pièces jointes.
Autre remarque (voir mon post LinkedIn sur le sujet de la logique booléenne) : écrire
If(Test; True; False)
revient à écrireTest
(tout seul).Dernière chose : tu dis que tu veux vérifier la présente de pièces jointes dans un formulaire. Si ton icône se trouve à l’intérieur d’un datacard du formulaire alors tu dois utiliser :
ThisItem.'Pièces jointes'.Attachments
si tu veux rendre l’icône visible lorsque les PJ actuellement sur l’enregistrement en cours sont bien présentes (le mot-clé ThisItem à l’intérieur d’un formulaire représente l’enregistrement en cours dans la source de données -> il est en lecture seule et ne change pas lorsque tu modifies les données du formulaire)DataCardValueNN.Attachments
si tu veux rendre l’icône visible lorsque l’utilisateur ajoute des pièces jointes dans le champ correspondant du formulaire
Si l’icône est sur l’écran en dehors du formulaire, alors tu vas devoir utiliser la variable qui contient l’enregistrement en cours de ta source de données (en gros, ce que tu as mis dans la propriété Item de ton formulaire).
Donc, au final, sur la propriété OnVisible de ton icône, il te faut mettre (je par sur le 1er cas de figure) :
Not(IsEmpty(ThisItem.'Pièces jointes'.Attachments))
ou, comme précisé par Geoffroy :
CountRows(ThisItem.'Pièces jointes'.Attachments) > 0
Voilou… 😉
Essaie peut-être déjà de faire fonctionner ton flux avec le modèle Word vu que t’as déjà pas mal avancé.
En fait, après l’action de remplissage du modèle, utilise une action Créer un fichier du connecteur OneDrive Entreprise. Dans cette action, renseigne le contenu du fichier avec la sortie Document Microsoft Word de ton action précédente de remplissage du modèle.
Puis, remplace ton action de conversion du document Word en PDF par une action Convertir le fichier du connecteur OneDrive Entreprise. Dans le paramètre Fichier de cette action, utilise la propriété ID de l’action Convertir le fichier.
En gros ça doit ressembler à ça :
- Remplir un modèle Word [ Word Online (Business) ]
- Créer un fichier [ OneDrive Entreprise]
- Contenu du fichier = Document Microsoft Word étape 1
- Convertir le fichier [ OneDrive Entreprise ]
- Fichier = ID étape 2
- Créer un fichier [ SharePoint ]
- Contenu du fichier = Contenu du fichier étape 3
Sinon, non je ne crois pas qu’il existe de méthode pour remplir tous les champs d’une action Remplir un modèle Word. Faut les faire un par un…
Ok, je vois. Alors en fait, tes 2 boucles doivent être fusionnées. En fait c’est dans ta première boucle que tu dois faire tous les traitements pour un matricule donné.
Par contre le filtre des lignes par date du jour doit se faire AVANT la boucle et donc brancher ensuite la boucle sur la sortie de ce filtre.
En gros ça doit ressembler à ça :
- Récupérer les lignes du tableau
- Filter les lignes du tableau
- Boucler sur les lignes filtrées
- Récupérer le matricule en cours
- Construire le tableau HTML avec les données du matricule en cours
- Envoyer le mail en y intégrant le tableau HTML
- Mettre à jour la ligne en cours pour indiquer que la notif a été envoyée
Tu vois ce que je veux dire ?
Ok, alors je pense que ça vient du fait que le résultat de ton action de remplissage du modèle Word doit être utilisé pour créer un fichier sur OneDrive et c’est la sortie de cette action de création de fichier qui doit servir d’entrée à une action Convertir de le fichier du connecteur OneDrive Entreprise.
A mon avis, la sortie du remplissage du modèle ne peut pas servir directement à l’entrée du convertisseur Word. Mais peut-être que je me trompe.
A tester…
Salut @Mous,
Vu que ton flux est planifié, comment le matricule est-il choisi ?
Est-ce que le flux balaye toutes les lignes du fichier Excel qui ont les dates 420 ou 840 à aujourd’hui et il envoie un mail à chacun des destinataires ? Passke je vois que toutes les étapes FilterTable…, FilterByID, Compose 6, etc. sont situés en dehors de la boucle Apply to each 2. Bizarre…
Ou est-ce que le flux ne traite qu’un seul matricule à la fois ? Dans ce cas, comment est-il déterminé ?
Il manque le 2è paramètre de ton Patch(). Regarde le code que j’avais mis précédemment… 😉
Dans le Patch() tu utilises Image1 pour alimenter ta colonne PhotoCaptured -> c’est quoi ? C’est nouveau ça non ? Comment Image1 est alimenté ? Pourquoi tu n’utilises pas la variable PhotoCaptured définie dans le OnSelect du AddMediaButton1 ?
D’ailleurs, il faut que tu oublies AddMediatButton1.Media -> cette propriété ne contient pas l’image. C’est la propriété UploadedImage1.Image qui contient l’image. Donc au choix :
- Tu fais
Set(PhotoCaptured; UploadedImage1.Image)
et puis dans le Patch() tu metsPhotoCaptured: PhotoCaptured
- Ou alors tu fais directement dans ton Patch() :
PhotoCaptured: UploadedImage1.Image
et tu n’as plus besoin du Set()
Tu me suis ?
- Tu fais
Salut Scooby,
Quelques questions (utilise les n° pour répondre 😉)…
- Lorsque tu dis “tableau SharePoint” parle-t-on d’un fichier Excel stocké dans SP où il y a un tableau à l’intérieur qui doit être rempli par Power Apps ? Ou s’agit-il d’une liste SharePoint ?
- Est-ce que dans le flux Power Automate le remplissage du fichier Word fonctionne ?
- Qu’est-ce qui ne fonctionne pas au niveau de la conversion en PDF ? Y a-t-il un message d’erreur ou le contenu du PDF est vide ou erroné ?
Peux-tu nous mettre une capture :
- de ta liste SharePoint (ou du tableau dont tu parles)
- du document Word pour qu’on voie à quoi il ressemble
- de l’erreur de conversion s’il y en a une
Perso, je préfère créer mes PDF à partir d’HTML. Mais c’est un choix personnel… 😉
Est-ce que la photo n’est pas visible dans SharePoint ou dans ton application ? Dans ton application c’est normal. Il y a du code à mettre en place pour que ça fonctionne. Mais normalement, si la fonction Patch() fonctionne sans erreur, ton image doit être stockée dans la colonne PhotoCaptured de ta liste SharePoint.
Est-ce que tu vois l’image quand tu vas dans SharePoint ? Est-ce que tu peux mettre une capture de ta liste où on est censé voir la photo de l’enregistrement créé ou mis à jour ?
Pour afficher la photo dans l’application, cela veut dire qu’à un moment donné tu reviens en modification sur un élément de ta liste TOUR TERRAIN. Et donc tu dois avoir quelque part une donnée qui te permet de savoir quel est l’élément concerné. Comment as-tu géré ça dans ton application ? Comment fais-tu pour éditer un tour terrain enregistré précédemment ? Peux-tu mettre une capture de ton écran d’accueil ? Ou as-tu un écran qui liste tous les tours terrain ?
Super merci…
Comment ça se fait que ton AddMediaButton1 est tout seul ? Normalement il devrait être dans un groupe avec un UploadedImage1 comme sur ma capture. Car c’est le contrôle UploadedImage1 qui contient le code de l’image, pas le
AddMediaButton1.Media
. Il faut que tu remettes un contrôles Ajouter une image depuis le menu Insérer. Et ensuite mettre le code que j’avais donné dans le OnSelect :Set(photoCaptured; UploadedImage1.Image)
.Et ton Patch() du coup, selon ce que je vois, devrais être ainsi :
Patch(
'TOUR TERRAIN';
Defaults('TOUR TERRAIN');
{
Combobox1Selection: Combobox1Selection.Selected.Value;
Combobox2Selection: Combobox2Selection.Selected.Value;
PhotoCaptured: photoCaptured;
Date: DatePicker1.SelectedDate
}
)Voilou…
Bon, j’ai pas mal cherché mais sans succès. L’idée c’est d’arriver à choper les différentes versions des thumbnails de l’image mais je n’y arrive pas. J’ai regardé Graph API, j’ai regardé HTTP,… J’ai essayé avec ChatGPT.
Si tu y arrives, je suis preneur… 😅
Salut @Ludovic,
Alors je t’explique comment marchent les options dans Dataverse… 😉
Dans la table Accounts native de Dataverse il existe une colonne d’options Category avec 2 valeurs :
Voici comment j’accède à la colonne de la table :
Sur cette capture tu vois que j’accède au premier enregistrement de la table et qu’en tapant le début du mot “category” j’ai l’intellisense qui me propose d’office la colonne Category de la table. Il s’agit bien ici de la colonne qui porte la valeur du champ Category pour le premier enregistrement de la table.
Par contre, sur la capture ci-dessous j’accède aux valeurs des options de la colonne Category :
Pourquoi ? Parce-que en tapant dans le code directement le mot “Category” (sans préciser la table) il va chercher toutes les options qui s’appellent Category dans les différentes sources de données de ton application. Et comme il doit pouvoir différencier toutes les options Category des différentes tables où elles sont utilisées, il te met entre parenthèse le nom de la table. C’est comme ça que tu sais que tu accèdes aux valeurs d’une option : parce-qu’il y a le nom de la table entre parenthèses derrière.
Et quand tu va taper le point, alors il va te lister les valeurs :
Voilou… J’espère que c’est plus clair… 😋