Collection dataverse

Étiquetté : ,

  • Collection dataverse

    Posté par ChezWam sur 7 février 2023 à 10h25

    Bien le bonjour à tous,

    j’ai une table dans dataverse for teams que je charge dans une collection dès le Onstart de l’application.

    Dans cette table j’ai crée deux colonnes : la première : Nom ; la deuxième : Valeur. Les deux colonnes contiennent des données, dix entrés maximum.

    Lorsque je vérifie le contenu de la collection dans PA, la colonne “Nom” est vide alors que la colonne “Valeur” contient les données de la table. Si je modifie une valeur dans la base je la retrouve dans la collection.

    Je peux faire tourner l’appli sans cette collection mais je ne comprend pas d’où cela peut venir. J’ai tenté de créer une nouvelle collection mais idem.

    Au secours, Obi-Wan Kenobi. Vous êtes mon seul espoir.

    Merci d’avance.

    PostID=k6g7xoF01YEzi9Y

    ChezWam a répondu Il y a 9 mois, 3 semaines 1 Membre · 9 Réponses
  • 9 Réponses
  • Sebastien

    Membre
    7 février 2023 à 11h11

    Bonjour ChezWam

    Est ce que tu peux envoyer une copie ou un screenshot des formules avec lesquelles tu génères cette collection ?

    CommentID=mxho2toWbV0f4OH, PostID=k6g7xoF01YEzi9Y

    • ChezWam

      Membre
      7 février 2023 à 11h39

      Bonjour Sébastien,

      voici ce que l’on trouve dans le OnStart :

      Concurrent(nnClearCollect(ColMagasin;MagasinReceptions);nnClearCollect(ColCommande;Commande);nnClearCollect(ColIntervention;ListeIntervention);nnClearCollect(ColEtatCommande;SuiviCommande))

      SubCommentID=NDuD5908JWNkcSn, CommentID=mxho2toWbV0f4OH, PostID=k6g7xoF01YEzi9Y

    • Sebastien

      Membre
      7 février 2023 à 12h20

      C’est un peu difficile de te dire ce qui se passe mal avec seulement ça, mais je peux te donner des façons de construire des collections fonctionnelles.

      J’imagine que MagasinReceptions, ListeIntervention, etc.. sont de sources de données basées sur Dataverse. C’est toujours possible d’écrire : ClearCollect(ColCollection; SourceDeDonnée) pour faire une copie de la table, mais on perd pas mal en flexibilité, et on vise en général trop large par rapport au but. Il y a de nombreuses options pour monter des collection comme on l’entend.

      Exemple 1 :

      ClearCollect(nNomCollection;n       AddColumns(n             ShowColumns(n                    Filter(SourceDeDonnée; TesteLogique);n                          NomLogiqueDataColonne1;n                          NomLogiqueDataColonne2;n                          NomLogiqueDataColonne3;n                          NomLogiqueDataColonne4n                          );n                       FormuleColonne5;n                       FormuleColonne6n));;

      Cette formule permet de construire une collection a partir d’une autre source de donnée, en choisissant les colonnes que l’on met dedans. C’est une formule relativement courte et efficace.

      Exemple 2 :

      Clear(CollectionN);;nForAll(n      Filter(SourceDeDonnée; TesteLogique);n            Collect(CollectionN;n                  {n                        NomColonne1: NomValeur1DeSourceDeDonnée;n                        NomColonne2: NomValeur2DeSourceDeDonnée;n                        NomColonne3: NomValeur3DeSourceDeDonnée;n                        ......n                  })n           )

      Cette formule permet plus de flexibilité, on peut manipuler plusieurs source de données dans un ForAll() afin de mettre en place une collection complexe, ou monter plusieurs collections en même temps.. En bref, cela donne des options.

      En espérant que cela t’aide !

      SubCommentID=M03TmBRizOf2qMh, CommentID=mxho2toWbV0f4OH, PostID=k6g7xoF01YEzi9Y

    • ChezWam

      Membre
      7 février 2023 à 13h35

      Excellent je vais tester tout ça 🙂 Merci pour ton temps !

      SubCommentID=Yleq12BpM8DtNNr, CommentID=mxho2toWbV0f4OH, PostID=k6g7xoF01YEzi9Y

  • Alexandre

    Membre
    8 février 2023 à 22h27

    Ca ressemble bien fort à l’éternel problème des champs qui n’arrivent pas à être découverts automatiquement par powerapps.
    Plusieurs possibilités si c’est ca :

    • désactiver l’option “sélection de colonne explicite” : powerapps remonte alors systématiquement tous les champs (mais pour de larges collections ca ralenti sérieusement les chargements)

    • forcer la découverte des champs en bidouillant un truc du genre :

      ClearCollect(ColEtatCommande;SuiviCommande);;nWith({etat:First(colEtatCommande)};etat.Name&etat.Value)

      Ca ne fera rien de particulier, mais ca risque d’aider à forcer le chargement des champs. Dans le même style tu peux aussi brancher ta collection sur une gallerie invisible et utiliser des labels pour afficher tes propriétés name et value mais je trouve ca un peu trop bourrin.

      La solution de Sebastien Brandeis te conduirait à la même idée, mais je trouve ca un peu lourd aussi de faire tout ces traitements si tu as besoin systématiquement de tous les enregistrement de la table concernée.

      L’idée c’est surtout de “faire comprendre” à powerapps que ton application va avoir besoin de ces champs.

    CommentID=VNk1VIvNb5bzhy1, PostID=k6g7xoF01YEzi9Y

    • ChezWam

      Membre
      9 février 2023 à 7h21

      Bonjour Alexandre,

      merci pour ton retour. En effet l’impression que PA ne découvre pas les champs est bien là, je ne comprend pas trop comment ni pourquoi mais après avoir tester divers solutions sur la base des propositions de Sébastien le ClearCollect(ColEtatCommande;SuiviCommande) fonctionne… ce qui m’ennuis c’est que je ne sais pas pourquoi vu que je n’ai rien changé. J’ai seulement ajouté pour un test et depuis ma ColEtatCommande est fonctionnelle.

      ClearCollect(ColEtatCommandeTest; AddColumns(SuiviCommande;"EtatCommande";NomSuiviCommande));;

      Merci pour vos retours et pour votre temps. La belle journée 😉

      SubCommentID=YQVBI8mgBDMQlx2, CommentID=VNk1VIvNb5bzhy1, PostID=k6g7xoF01YEzi9Y

    • Alexandre

      Membre
      9 février 2023 à 9h43

      Attention si tu trouves que ça marche “comme par magie” alors teste bien une fois ton application publiée. Car il se peut alors que cela ne fonctionne pas lorsque c’est publié alors que tu constatais le bon fonctionnement dans l’éditeur …

      SubCommentID=viYU3PI8kOU3a3v, CommentID=VNk1VIvNb5bzhy1, PostID=k6g7xoF01YEzi9Y

  • R3dKap

    Membre
    9 février 2023 à 9h11

    ChezWam c’est comme on dit “by-design”… 😅

    C’est marrant, avant-hier au aMS Sophia Antipolis, Rémi Delarboulas (qui a travaillé avec l’équipe PowerCAT de Microsoft), lors de sa session, a justement expliqué qu’actuellement Power Apps n’est pas capable d’identifier les colonnes utilisées par l’application lorsque l’on fait un ClearCollect(colMaCollection; MaTableDataverse) si l’option Sélection de colonne explicite est activée. Le ClearCollect() n’alimente que la colonne principale ainsi que la colonne qui contient le GUID des enregistrements de la table.

    Il faut donc utiliser l’astuce d’Alexandre Perret ou encore spécifier clairement les colonnes à rapatrier :

    ClearCollect(n    colMaCollection;n    ShowColumns(n        MaTableDataverse;n        "MaColonne1";n        "MaColonne2";n        "MaColonne3";n        ...n    )n)

    Inconvénient : du coup les noms des colonnes dans ta collection seront les noms techniques et non plus les libellés d’affichage.

    Du coup, c’est la solution d’Alexandre Perret qui est la plus pratique car les noms des colonnes sont bien les libellés d’affichage.

    Et surtout, ne pas désactiver l’option Sélection de colonne explicite au risque de voir les perfs de son application chuter drastiquement… 😉

    CommentID=EVhw9nbVZ01B4nF, PostID=k6g7xoF01YEzi9Y

  • ChezWam

    Membre
    10 février 2023 à 6h39

    Un grand merci pour vos retours je vais suivre vos recommandations 😄

    CommentID=ZEO0BElK6woquYL, PostID=k6g7xoF01YEzi9Y

Connectez-vous pour répondre.