Répondre à: Actions en cascade sans attente précédente

  • R3dKap

    Membre
    3 mai 2022 à 10h50

    @JLF mon avis…

    Si je comprends bien, toutes tes opérations de action_RECORD_num_1 jusqu’à action_TICKET_Record_1 dépendent en gros de action_Refresh_1 car tu as besoin de tes données les plus à jour possible pour faire les actions concernées.

    Ce que je ferais c’est de sortir le code de action_Refresh_1 (et donc supprimer le bouton correspondant) pour le mettre directement à la place du Select(action_Refresh_1). Car lorsque tu fais appel à la fonction Refresh(), Power Apps attends que le rafraîchissement soit terminé avant de poursuivre le code…

    Par contre je vois un problème potentiel plus grave dans ton approche : si action_TICKET_Record_1 a besoin des données récupérées par les actions de action_RECORD_num_1 à action_colHAB_get_1, rien ne te garantis que tes données auront été récupérées à temps pour les utiliser dans action_TICKET_Record_1. En effet, utiliser la fonction Select() c’est comme cliquer sur le bouton : là les clics vont s’enchaîner en moins d’une milliseconde, et potentiellement la récupération des données ne sera pas terminée que tu vas déjà créer ton enregistrement dans la table TICKET. Tu me suis ?

    Au passage, ton Concurrent() ici va te faire gagner 0,000001ms vu que la seule opération qui est parallélisée avec ton Select() c’est un Set() (qui est ultra rapide). Le Concurrent() a du sens lorsque tu veux par exemple paralléliser des chargements multiples qui peuvent potentiellement prendre du temps.

    Du coup, au vu de mes 2 dernières remarques, ce que je te suggère c’est de faire c’est ceci : tu vires tous tes boutons et tu parallélises les chargements des données dont tu vas avoir besoin pour créer ton ticket. Globalement ton code serait donc plutôt structuré ainsi (j’invente un peu hein vu que je connais pas exactement ton modèle de données) :

    Set(glbTICKET, Blank());nSet(glbETAPE, "Saisie Ticket");nConcurrent(n    Refresh(AGENT),n    Refresh(RECORD),n    Refresh(TICKET),n    Refresh(TECH),n    Refresh(HAB)n);nConcurrent(// Là je sais pas si c'est plutôt des LookUp() ou des ClearCollect() que t'as besoinn    ClearCollect(colRECORD, Filter(RECORD, ...)),n    ClearCollect(colTICKET, Filter(TICKET, ...)),n    ClearCollect(colTECH, Filter(TECH, ...)),n    ClearCollect(colHAB, Filter(HAB, ...))n);nPatch(TICKET; Defaults(TICKET); {...})

    Remarque générale : l’utilisation du Select() pour déclencher du code sur un bouton est utile lorsque l’on veut éviter de dupliquer le code sur un écran où il est utilisé à différent endroits. Mais ATTENTION à ne pas faire un Select() sur un bouton qui est sur un autre écran !!! Ce n’est pas du tout recommandé, voire ça ne marche plus désormais… Pour mutualiser du code il faut plutôt partir sur des fonctions dans des composants comme proposé par @Guillaume RENARD qui fait référence à mon article sur le sujet… 😉

    CommentID=pYojEl1fFqKa4d0, PostID=QwgjeaKmdvRNPuH