R3dKap
Expert Power AppsRéponses céées sur le Forum
-
Alexandre Perret, oui ça marchera aussi avec ta technique…
On est bien d’accord que c’est un contournement d’un problème qui ne devrait pas exister.
Ceci étant dit, bien que j’aie accès en tant que MVP à une liste de distribution directement connectée aux équipes de développement de Power Apps chez Microsoft, lors de l’identification d’un problème il faut impérativement leur fournir les étapes qui permettent de reproduire le souci à 100% pour qu’ils puissent l’analyser. Or dans ce cas de figure, c’est assez compliqué puisque cela semble plutôt aléatoire. Si jamais t’arrives à construire une mini-app branchée sur une bête liste SP et où tu constates ce pb de non chargement de colonnes alors c’est gagné : je peux leur transmettre et ils mettront le nez dedans…
C’est tout ce qu’on peut faire pour l’instant…
CommentID=ViHgiaPKfP5ZimB, PostID=Uzt2PrjPiHH58gi
-
Pour enchaîner plusieurs fonctions à l’intérieur de la condition True ou False d’un If() il suffit de les séparer par des double point-virgules si ton Studio est en français (sinon un seul point-virgule si ton Studio est en anglais) :
If(n <test>;// Un seul point-virgule pour passer à la partie TRUE ci-dessousn RemoveIf(...);;n Patch(...);;n ClearCollect(...);// Un seul point-virgule pour passer à la partie FALSE ci-dessousn AddColumns(...);;n Navigate(...);;n etc...n)
Autre astuce :
If(n <Condition 1>;n <Action(s) Condition 1>;n <Condition 2>;n <Action(s) Condition 2>;n <Condition 3>;n <Action(s) Condition 3>;n <Action(s) SINON>// C'est à dire si aucune des conditions précédente n'a été remplien)
Voilou…
CommentID=fUPi8g0p3TrCZwV, PostID=xHxNzUANXNphGy2
-
C’est pas un sujet simple Alexandre Perret.
Cette option étant activée par défaut, le système est censé détecter tout seul comme un grande quelles sont les colonnes utilisées par une source de données OU par une collection alimentée par une source de données afin de ne charger que les données réellement nécessaires à l’application.
Mais comme tu as pu le constater, l’intelligence qu’il y a derrière cette détection n’est pas très intelligente justement… 😩
Alors, surtout -> ne jamais désactiver cette option sous peine de voir les perfs de ton application chuter… pire que DRASTIQUEMENT… j’ai pas de mots… ça chute bien quoi… 😁
Je suis passé par différentes techniques pour contourner ce problème (qui de mon avis n’est pas près d’être solutionné nativement), dont celle de faire un ShowColumns() pour cibler les colonnes concernées ce qui force leur chargement. Mais l’inconvénient que je lui trouve c’est que du coup les colonnes ressortent avec leur nom interne plutôt que leur nom d’affichage qui devient alors inconnu du système -> relou, faut changer tous les noms de colonnes dans le code.
La dernière technique que j’utilise actuellement (et que je n’utilise QUE lorsque je vois que certaines colonnes ne sont pas chargées) c’est celle-ci :
ClearCollect(colMaListe, 'Ma Liste');nUpdateContext(n {n locMaListeCol1: First(colMaListe).Colonne1,n locMaListeCol2: First(colMaListe).Colonne2,n locMaListeCol3: First(colMaListe).Colonne3,n ...n }n)
Le fait d’accéder aux colonnes juste après le ClearCollect() indique clairement au système qu’elles sont utilisées et du coup elles sont chargées.
Voilà… Dis-moi si de ton côté ça résouds ton pb…
En regardant le code, je me dis qu’on peut peut-être optimiser ainsi (mais j’ai pas testé) :
ClearCollect(colMaListe, 'Ma Liste');nUpdateContext({locMaListeFirst: First(colMaListe)});nUpdateContext(n {n locMaListeCol1: colMaListeFirst.Colonne1,n locMaListeCol2: colMaListeFirst.Colonne2,n locMaListeCol3: colMaListeFirst.Colonne3,n ...n }n)
CommentID=t8rdPExF2E0Ofwh, PostID=Uzt2PrjPiHH58gi
-
R3dKap
Membre25 novembre 2022 à 15h10 en réponse à: Importer des données excel dans une liste sharepoint existanteDavidZed, Geoffroy WAGNER si c’est possible… 😉
Voir la solution ici :
CommentID=z4wo2wHatYQAfnK, PostID=X0eLsdQhYjGBtJc
-
R3dKap
Membre25 novembre 2022 à 15h08 en réponse à: Importer des données excels dans une liste sharepoint existanteSalut RANDRIATAHINA Charles,
Pas possible effectivement de modifier ces colonnes avec les actions natives de SharePoint. Le seul moyen d’y parvenir c’est de passer par un appel HTTP.
Voici la procédure :
CommentID=yYFcZb8U4LTBphe, PostID=6AhyQ5UcAwYzCMU
-
Alain Pujol tu peux nous mettre une capture d’un exemple de contenu de ton Array actuel ?
CommentID=bxpk5TDuoIAzkDG, PostID=99rRI701BfRhXmr
-
R3dKap
Membre21 novembre 2022 à 13h10 en réponse à: Afficher une liste de statuts dans un Dropdown en fonction du rôle de l'utilisateur connectéSalut RANDRIATAHINA Charles,
Alors, pour moi (en tout cas c’est toujours comme ça que je procède), lorsque l’on veut filtrer une liste de valeurs d’un champ dropdown parce-que derrière il y a une colonne de type Choice par exemple, alors je travaille toujours sur le contenu par défaut de la dropdown, à savoir le résultat de Choices().
Je m’explique…
Lorsque dans un formulaire tu as un datacard pour une colonne de type Choice (ou LookUp) alors le contrôle dans le datacard est une combo box (je dis bien une “combo box”, pas une “dropdown” qui est un contrôle différent et moins puissant).
Dans la propriété Items de cette combo box on y retrouve ceci :
Choices(TaListeSharePoint.TaColonne)
Cela a pour effet de générer automatiquement derrière une table qui a la bonne structure selon le type de colonne, à savoir :
-
Dans le cas d’une colonne de type Choice :
[n { Value: "<valeur>" },n { Value: "<valeur>" },n ...n]
-
Dans le cas d’une colonne de type LookUp :
[n {n Id: "<ID SharePoint>",n Value: "<valeur>"n },n {n Id: "<ID SharePoint>",n Value: "<valeur>"n },n ...n]
Donc, quoiqu’il arrive, il est absolument impératif que dans le Items de ta combo box tu respectes cette structure de données.
C’est pour respecter cette structure de données que je travaille toujours sur le
Choices(Liste, Colonne)
pour générer les éléments finaux que je veux rendre disponibles dans ma combo box.Du coup, si tu veux filtrer les valeurs de ta colonne de type Choice, il faudrait le faire comme ceci :
Filter(n Choices(TaListe, TaColonne),n Value in If(n varResult.reviewer = "True",n ["Draft",n "Submitted",n "Deployed",n "Under evaluation",n "Ready for IRM review",n "Under IRM review",n "Approved",n "Rejected"],n ["Draft",n "Submitted",n "Deployed"]n )n)
Tu vois la logique ?
Mais c’est pas une obligation non plus. Tu peux aussi modifier, comme tu le suggère, la propriété Update de ton datacard pour faire en sorte que tu envoies à SharePoint la donnée dans le bon format (
{Value: "Valeur"}
) mais ça c’est quelque chose que j’essaie d’éviter en général.Ceci étant dit, y’a quand même un truc bizarre : c’est que de la manière dont tu construis ta collection, elle a bien au final une structure du type :
[n { Value: "Draft" },n { Value: "Submitted" },n ...n]
…qui est celle attendue par SharePoint sur une colonne de type Choice. Donc, ça devrait marcher. Mais peut-être y a-t-il une différence interne très subtile (que je ne maîtrise pas bien encore aujourd’hui) entre la TABLE qui est générée par le Choices() et la COLLECTION qui est générée par le ClearCollect().
CommentID=oRWO3bBiXG8JvZf, PostID=MJxzdiFfpGOhFgv
-
-
abusatif, sauf erreur de ma part cela est dû au fait que l’application mobile Power Apps n’est pas capable d’élargir ton authentification à SharePoint : en gros, lorsque tu exécutes ton application sur ton téléphone, tu es bien authentifié sur Power Apps mais pas sur SharePoint.
Pour le problème de l’image, que tu puisses la voir sur ton mobile il faut utiliser la propriété Thumbnails (Miniatures) de la colonne Image de ta liste. Cette propriété t’offres 4 tailles différentes :
-
Small
-
Medium
-
Large
-
Full
Essaie déjà ça pour voir si ton image apparaît sur ton téléphone…
CommentID=dEmkZqBgupAKJid, PostID=0NtvydPw53xVQqG
-
-
R3dKap
Membre5 novembre 2022 à 9h30 en réponse à: Problème sur la fonction SortByColumns() pour une colonne LookUpTiens… DavidZed : et t’as pas de pb de délégation sous ce format là lorsque tu attaques directement la source de données (SharePoint ou autre) ?
CommentID=gOAru63Tlxyiwkh, PostID=in101jVUu6i4VvT
-
R3dKap
Membre4 novembre 2022 à 17h53 en réponse à: Problème sur la fonction SortByColumns() pour une colonne LookUpSalut RANDRIATAHINA Charles,
Effectivement ce n’est pas possible directement. La colonne de Lookup étant une colonne complexe (avec une structure de type
{Id: <...>; Value: <...>}
), elle ne peut pas être utilisée directement dans la fonction SortByColumns().Pour contourner ça, il faut rajouter à ta source de données une colonne qui va contenir uniquement la valeur de ta colonne de Lookup :
SortByColumns(n AddColumns(n colMaCollection;n "ValeurLookup";n ColonneLookup.Valuen );n "ValeurLookup";n SortOrder.Ascendingn)
Ceci étant dit, tant que tu travailleras avec des collections tu n’auras pas de problème de délégation. Mais si tu fais la même chose sur une source de données en direct (liste SharePoint ou table Dataverse) tu vas être confronté au problème classique de délégation qui fait que ta fonction AddColumns() ne fonctionnera que sur les 2 000 premiers éléments de ta source de données. Donc il faut impérativement se débrouiller pour récupérer moins de 2 000 éléments avant de faire cette opération de tri.
Est-ce que cela répond à ton problème ?
CommentID=xhXP8r1VYLOBLHa, PostID=in101jVUu6i4VvT
-
Salut Julien,
Alors oui c’est possible mais effectivement la mise à jour est un peu “tricky” à faire.
En fait, la logique est la suivante :
-
on considère que la colonne de la collection parente qui contient la collection enfant est une donnée comme une autre
-
et donc, pour la mettre à jour il faut fournir à cette colonne une collection entière
-
il faut donc passer par une collection intermédiaire dans laquelle on va placer la collection enfant
-
on met à jour la collection intermédiaire
-
on met à jour la collection parente en lui fournissant la collection enfant dans son ensemble
Peut-être un exemple sera plus parlant :
ClearCollect(n colHeroes; n {n Name: "Starlight";n Gender: "F"n };n {n Name: "Captain America";n Gender: "F"n }n);;nClearCollect(n colUniverses;n {n Name: "Marvel";n Heroes: colHeroesn }n);;n// ----- Code pour corriger le genre de 'Captain America'nUpdateContext(// Récupérer l'élément parent où la collection enfant doit être modifiéen {n locUniverse: LookUp(colUniverses; Name = "Marvel")n }n);;n// Récupérer la collection enfant de l'élément parentnClearCollect(colTempHeroes; locUniverse.Heroes);;nPatch(// Modifier la collection enfantn colTempHeroes;n LookUp(n colTempHeroes;n Name = "Captain America"n );n {n Gender: "M"n }n);;nPatch(// Mettre à jour la collection enfant de l'élément parentn colUniverses;n locUniverse;n {n Heroes: colTempHeroesn }n)
Remarque : évidemment, en termes de perfs, l’idée même d’imbriquer une collection dans une autre n’est pas terrible car il y a des chances que pour mettre à jour la collection enfant pour l’ensemble des lignes de la collection parent il faille imbriquer 2 boucles ForAll()… mais y’a moyen d’optimiser un peu selon les cas
Voilà, j’espère que c’est suffisamment clair. J’ai pas testé le code mais le principe est là…
N’hésite pas si t’as besoin encore d’aide…
CommentID=uajk3tawzta5hu3, PostID=TKBmKhYLTh5UzWR
-
-
R3dKap
Membre20 octobre 2022 à 10h52 en réponse à: Suppression clé secondaire après import solutionBon, apparemment, juste après l’import les 2 clés étaient visibles en parallèle car le traitement d’arrière plan qui les mets en place/qui supprime les anciennes n’avait pas encore fini de tourner…
Après quelques minutes, l’ancienne a bien disparu…
Veuillez nous excuser pour la gêne occasionnée… 😅
CommentID=DWceEj5SRUqzm0I, PostID=NSwZDnlJq98Kzr9
-
Salut Alexandre Perret,
Oui, tu trouveras l’état des services M365 ici : https://portal.office.com/AdminPortal/Home#/servicehealth (faut avoir les droits par contre)…
Sinon, je n’ai rien vu de particulier remonter ailleurs si ce n’est ce point-là remonté via la mailing-list réservée aux MVP :
Est-ce que ça ressemble à ton problème ?
CommentID=iGsk5BEM7NeP6BP, PostID=5b0t4kYaWhoeTaF
-
Shalaya, perso, je le gère à la main… 😊
Dans le OnStart je défini une variable globale gloAppVersion à
"v0.28"
par exemple que j’affiche ensuite sur les écrans souhaités avec un libellé. Et à chaque enregistrement de mon application je précise bien ce numéro de version et je l’incrémente après chaque modif/ensemble de modifs enregistrées.CommentID=NNYIoVhlVX68yGW, PostID=VJluJNE23OqJ84i
-
Je te suis Alexandre Perret et je met à jour l’article… Car c’est en effet une recommandation que j’ai vu ailleurs…
CommentID=VoF1jTIn8ScFPSV, PostID=rBXRms6gmFVcdT5