
Mise à jour de plusieurs enregistrements
Étiquetté : powerapps
Mise à jour de plusieurs enregistrements
Posté par Vince sur 14 mai 2022 à 5h22Bonjour à tous,
Dans une app, j’ai une galerie sur laquelle j’applique des filtres.
Une fois mes éléments filtrés je ‘stock’ le résultat dans une collection ‘Temp’.
Je voudrais ensuite mettre à jour un champ OUI/NON de la liste de cette galerie en utilisant les élément de la collectionVoici ce que j’ai fais
ForAll(Temp;
Patch(T_Liste_VEH;LookUp(T_Liste_VEH;Num_VEH = Num_VEH)
{VehDisponible:true})
)…et bien sur ça ne fonctionne pas, d’où la raison de mon appel à l’aide
Je vous met en annexe le message que je reçoisPostID=DvDmlANkdWsNjSD
Vince a répondu Il y a 1 année, 3 mois 1 Membre · 8 Réponses- 8 Réponses
C’est bon, j’ai trouvé
ForAll(Temp;UpdateIf(T_Liste_VEH;Num_VEH=Num_VEH;{VehDisponible:true}))Ca peut être utile à quelqu’un 😉
CommentID=2wnDjzYE3luJC6i, PostID=DvDmlANkdWsNjSD
Et bien non !!!
J’ai parlé trop vite, il met tout la liste à jour …. GRRRRR😧CommentID=nwT98layn5OOWPO, PostID=DvDmlANkdWsNjSD
Bonjour,
Il te faut mettre ton test logique true/false dans un filter sur la source de ton forall:
Forall(Filter(Temp;VehDisponible=true);Patch(T_Liste_VEH;Thisrecord;{Num_VEH:ThisRecord.Num_VEH}))
Ce qui donne en gros :
Pour tous les enregistrements de ma collection “Temp” qui ont la valeur disponible=true, met à jour l’enregistrement correspondant dans ma source de données “T_liste”
Si ca ne marche toujours pas, il faudra peut-etre insérer un remove column(*ton filtre*;”VehDisponible:true”) toujours dans la source du forall
CommentID=COT3xNCASc7ABtU, PostID=DvDmlANkdWsNjSD
Salut,
Je ne comprends pas, tout les enregistrements de ma collection temp on une valeur ‘Disponible’ = false.
Mon problèmes est que la mise à jour se fait bien, mais elle ne se limite pas aux enregistrements de la collection Temp, toute la liste est mise à jour !!!
CommentID=2yVESsG4uJ9xYOr, PostID=DvDmlANkdWsNjSD
Salut, le problème vient de ton patch dans ton ForAll, dans le paramètre record,
ForAll(Temp;
Patch(T_Liste_VEH;LookUp(T_Liste_VEH;Num_VEH = Num_VEH)
{VehDisponible:true})
)A cet endroit, tu es censé faire le lien entre le record de ta collection que tu es en train d’évaluer dans ton Forall et le record correspondant dans ta source de données.
Or il y a deux soucis dans ta formule :→ ton lookup() ne se base que sur des données de la source de données, techniquement, chaque itération du forall devrait patcher le 1er record de la liste
→ il n’y a pas de “;” pour séparer l’argument record de l’argument modification de ton patch (2eme et 3eme arguments). Donc je pense que ton patch ignore totalement le lookup et interprete ton 2eme argument comme la modification: à chaque itération du for all, il patch tous les records de ta list pour leur mettre {VehDisponible:true}
J’ai mal compris ton besoin dans mon premier post, tu n’as pas besoin de mettre le filtre dans le forall:
Forall(Temp;Patch(T_Liste_VEH;Thisrecord;{VehDisponible:true}))
CommentID=xrE4PzqADfDDuJB, PostID=DvDmlANkdWsNjSD
Comment faire appel au record alors??
Ta 2eme remarque, bien que tout a fait correcte, ne s’applique pas, j’ai simplement oublié le “;” dans ce que j’ai recopier l’instruction ici (mea culpa).
La référence à l’enregistrement balayé par le ForAll de la collection Temp, s’appelle de la même façon que le champ de la liste qui doit être MàJ.
LookUp(T_Liste_VEH;Num_VEH = Num_VEH)J’ai essayé un truc du genre :
LookUp(T_Liste_VEH;Num_VEH = Temp.Num_VEH)
Pas concluent non plus !!!Je comprends vraiment pas comment faire, j’ai essayé ceci, mais là il n’y a aucune MàJ qui se produit
ForAll((Gallery1.AllItems);
Patch(T_Liste_VEH;
LookUp(T_Liste_VEH;Num_VEH=LabNum_VEH.Text);
{VehDisponible:true})
)
La encore une fois aucune erreur de syntaxe mais pas de résultat
😞 😓SubCommentID=BtkiTUdgm1y04GC, CommentID=xrE4PzqADfDDuJB, PostID=DvDmlANkdWsNjSD
Salut @Vince,
Alors tout d’abord : t’es pas obligé de passer par une collection. Tu peux directement boucler sur la propriété AllItems de ta galerie… EDIT: ah bin je vois que c’est ce que t’as fait dans ta dernière formule ci-dessus… 👍
Du coup, ta formule devrait fonctionner mais tant qu’à faire voici comment l’améliorer :
ForAll(n Gallery1.AllItems As LoopItem;n Patch(n T_Liste_VEH;n LookUp(n T_Liste_VEH;n Num_VEH=LoopItem.Num_VEHn );n {n VehDisponible:truen }n )n)
En effet, pour éviter de se mélanger les pinceaux dans les noms des champs selon le niveau de profondeur où on se trouve dans une formule complexe, on utilise le mot-clé As comme tu peux le voir dans ma formule ci-dessus.
Ensuite, pour le LookUp() de ton Patch(), si ta galerie est bien alimentée par ta liste T_Liste_VEH, tant qu’à faire autant exploiter les champs de la liste en question, d’où le test
Num_VEH=LoopItem.Num_VEH
.Dis-nous si c’est bon cette fois…
PS : tu devrait pouvoir faire la même chose de cette façon également…
UpdateIf(n T_Liste_VEH; n Num_VEH in ShowColumns(Gallery1.AllItems; "Num_VEH");n {VehDisponible: true}n)
CommentID=J8rCjGE4tWTQMGF, PostID=DvDmlANkdWsNjSD
Salut Manu,
Ca marche, c’est parfait.
Donc l’astuce vient du fait de “renomer” le champ auquel je fait référence dans la boucle.
Je ne connaissais pas ce AS bien pratique.Merci encore (à vous 2)
👍
SubCommentID=nL6mLogGSz4c2bW, CommentID=J8rCjGE4tWTQMGF, PostID=DvDmlANkdWsNjSD
Connectez-vous pour répondre.