Lier des éléments de deux listes à leur création

Étiquetté : 

  • Lier des éléments de deux listes à leur création

    Posté par Delphine sur 17 février 2022 à 10h18

    Bonjour,

    Je bosse sur une appli me permettant d’ouvrir des tickets.

    Mes tickets sont dans une liste appelée liTickets.

    Selon la catégorie de tickets, je dois générer une fiche de suivi complémentaire, dans la liste appelée liFicheSuivi, et qui contient une colonne LookUp pour récupérer le Ticket lié.

    J’ai mon form1 lié à liTickets, et en fonction de la valeur de ma DataCard “TypeTicket”, je fais apparaître mon form2 lié à liFicheSuivi avec une DataCard masquée “TicketLié”.

    Mon bouton “Enregistrer” lance d’abord le formulaire liTickets et ensuite le formulaire liFicheSuivi avec la donnée Form1.LastSubmit pour ma DataCard “TicketLié” (j’intègre la donnée dans ma datacard dans la fonction select du bouton Enregistrer et non à l’initialisation du formulaire)

    Malheureusement dans ma liste liFicheSuivi, la donnée “TicketLié” ne correspond pas à l’item “liTickets” souhaité. Il me prend systématiquement celui d’avant. Je pense qu’il s’agit d’un problème de temporisation (le lastsubmit prend le dernier actuellement dans la table et non pas celui généré dans l’application).

    J’ai essayé avec le couple ID et Title mais c’est comme s’ils n’existaient pas encore au moment de la requête, mon champ reste vide.

    Si vous avez des pistes …

    Merci

    PostID=YZsSIl0iuKjZa8u

    Alexandre a répondu Il y a 7 mois, 3 semaines 1 Membre · 7 Réponses
  • 7 Réponses
  • R3dKap

    Membre
    17 février 2022 à 15h38

    Salut @Delphine,

    Effectivement c’est un problème d’enchaînement des instructions. Contrairement à ce que beaucoup de citizen devéloppeurs pensent, Power Apps n’attend pas la fin de l’exécution d’une instruction pour passer à la suivante… En gros, y’a pas mal de choses qui se passent en parallèle. Et c’est encore plus vrai pour le SubmitForm().

    Dans ton cas, ce qu’il faut faire c’est soumettre le formulaire de la fiche de suivi uniquement une fois que la soumission du ticket est terminée.

    Pour cela, il suffit que tu utilises la propriété OnSuccess de ton formulaire de Tickets, dans lequel tu mettras ton SubmitForm(FormSuiviTicket).

    L’utilisation du OnSuccess est capital lorsque l’on utilise des formulaires. Il garantit que l’élément de liste a bien été créé ou mis à jour. Et donc son identifiant (via le LastSubmit) est bien disponible.

    Voilou… Tiens-nous au courant… 😉

    CommentID=J7VpecO9SKod6cK, PostID=YZsSIl0iuKjZa8u

  • Delphine

    Membre
    18 février 2022 à 8h39

    Salut @R3dKap

    Encore une fois, un grand merci. Je n’avais pas pensé à utiliser le OnSuccess.

    Tout fonctionne parfaitement

    CommentID=p0TFh90Wbn67Rq9, PostID=YZsSIl0iuKjZa8u

  • Alexandre

    Membre
    20 février 2022 à 10h09

    @R3dKap en passant, tu saurais me pointer un lien qui évoquerait les actions paralellisées de celles au contraire qui sont sérialisées ? Merci

    CommentID=rbOPSzhJRCBPldx, PostID=YZsSIl0iuKjZa8u

    • Loïc Cimon

      Membre
      20 février 2022 à 16h50

      Je suis preneur aussi d’info et ressources à ce sujet si tu en as @R3dKap

      SubCommentID=lOobcMjv8d9vp0H, CommentID=rbOPSzhJRCBPldx, PostID=YZsSIl0iuKjZa8u

  • R3dKap

    Membre
    21 février 2022 à 12h12

    @Alexandre @Lo

    Il n’existe pas à proprement parler une documentation qui liste ce genre de choses. C’est plus un feeling basé sur l’expérience. Mais maintenant que j’y pense ça pourrait être intéressant que je pose la question à l’équipe Power Apps chez MS pour qu’ils me donnent quelques billes sur la mécanique interne d’exécution et de traitements des formules dans les applications de canevas.

    Je me base aussi sur le fait, par exemple, qu’il existe une option qui permet de désactiver l’exécution du App.OnStart en parallèle des autres événements de lancement d’une application :

    👉 D’une manière générale, les formules sont quand-même traitées en séquence. Sinon on aurait de grave soucis lorsqu’il y a des dépendances entre variables par exemple. Et d’ailleurs, c’est pas pour rien non plus qu’il existe une fonction Concurrent() qui sert précisément à paralléliser les traitements (ce qui laisse sous-entendre que le reste est séquentiel).

    Par contre, il y a quelques cas particuliers :

    • Le SubmitForm() justement… En règle général on ne met pas de code après le SubmitForm() car là, pour le coup, le système n’attends pas que le formulaire soit entièrement soumis pour continuer à traiter un éventuel code qui suivrait juste derrière. Pourquoi ? Justement parce qu’il y a un événement OnSuccess qui est là pour garantir la fin de la soumission du formulaire. Donc, en toute logique, s’il y a un traitement à faire après la soumission d’un formulaire, il doit être placé dans le OnSuccess.

    • Le Navigate() : comme pour le SubmitFormt() normalement on ne met pas de code après le Navigate() car on indique à Power Apps que l’on veut changer d’écran : si l’on veut changer d’écran pourquoi mettrions-nous encore du code juste après le Navigate() -> ça n’a pas de sens. Tout code situé après un Navigate() doit donc être placé dans le OnVisible de l’écran cible. Clairement, je pense que lorsque Power Apps voit une instruction Navigate() il navigue immédiatement et n’attends pas qu’un éventuel bout de code derrière le Navigate() soit entièrement exécuté pour changer d’écran.

    • L’appel de flux Power Automate : là c’est particulier car cela dépend si à la fin du flux il y a l’action suivante :

    • Si le flux se termine par cette action alors Power Apps attends la fin de l’exécution du flux pour continuer le code qui se situe après l’appel du flux. Dans le cas contraire, l’appel du flux ne fait que déclencher le flux et Power Apps poursuit l’exécution de l’application dans la foulée avant même que le flux n’aie terminé de s’exécuter.

    Voilou… 🙂

    CommentID=lzLXw1GYPx9MAt5, PostID=YZsSIl0iuKjZa8u

    • Loïc Cimon

      Membre
      21 février 2022 à 13h19

      Merci pour ce retour détaillé. Je partage ton analyse.

      SubCommentID=pD5BW9G9YrTarVG, CommentID=lzLXw1GYPx9MAt5, PostID=YZsSIl0iuKjZa8u

    • Alexandre

      Membre
      21 février 2022 à 18h09

      Merci.

      Juste une précision, même si ca n’a pas trop de sens, il est à noter que des commandes qui viendraient après un navigate s’exécuteraient quand même, et même si l’utilisateur a changé d’écran avant la fin des autres commandes.
      Ca peut éventuellement servir de “hack” (on pourrait peut être traiter des choses pendant que l’utilisateur observerait le chargement de sa page, mais oui je pense que c’est “casse gueule”)

      SubCommentID=pcVASpNe5IB0OeK, CommentID=lzLXw1GYPx9MAt5, PostID=YZsSIl0iuKjZa8u

Connectez-vous pour répondre.