Problème de mise à jour de table sur Power Apps

  • Problème de mise à jour de table sur Power Apps

    Posté par jayne sur 10 janvier 2024 à 11h33

    Bonjour,

    Je espère que vous allez bien. Je suis actuellement confronté à un problème avec Power Apps. Récemment, j’ai commencé à travailler sur une application de demande d’intervention technique, et je suis à la recherche d’aide pour mettre à jour une table.

    J’ai essayé le code ci-dessous, mais malheureusement, il ne fonctionne pas, un triangle jaune apparaît. Voici le code (Iddmd est la colonne des ID dans mon excel):

    Patch(Tableau1_1; First(Filter(Tableau1_1;Tableau1_1; Iddmd)); {emailreparateur: TextInput5.Text; Solution: TextInput6.Text; analysetechnicien: TextInput8.Text; importance: TextInput2.Text; Statut: Dropdown2.Selected.Value});; Refresh(Tableau1_1);; Reset(TextInput5);; Reset(TextInput6);; Reset(TextInput8)

    R3dKap a répondu Il y a 1 mois, 1 semaine 5 Membres · 25 Réponses
  • 25 Réponses
  • Geoffroy

    Membre
    10 janvier 2024 à 12h02

    Bonjour jayne,

    Dans ton Filter, quel est le critère pour définir les données ? Il devrait y avoir quelque chose comme Iddmd = XXX

    Par ailleurs, il y a deux fois Tableau1_1

    • jayne

      Membre
      10 janvier 2024 à 13h22

      Merci pour ta réponse ! Si j’ai bien compris il faut définir la colonne Iddmd à travers une variable par exemple en faisant un Set(ValeurID; ThisItem.Iddmd) ce qui donnerait ce code pour la partie du filter : Filter(Tableau1_1; Iddmd = ValeurID). Est ce bien cela ?

      • Geoffroy

        Membre
        10 janvier 2024 à 14h21

        On peut même faire encore plus simple en mettant l’item complet dans une variable.

        Ca donnerait alors Set(varItem;ThisItem) ;; Patch(Tableau1_1;varItem;{…})

        • jayne

          Membre
          10 janvier 2024 à 15h12

          J’ai modifié mon code mais il ne fonctionne malheureusement pas, auriez vous une idée de ce qui ne va pas s’il vous plait ?

          Voici le code :

          Set(varItem; ThisItem);;
          Patch(
          Tableau1_1;
          varItem;
          {
          emailreparateur: TextInput5.Text;
          Solution: TextInput6.Text;
          analysetechnicien: TextInput8.Text;
          importance: TextInput2.Text;
          Statut: Dropdown2.Selected.Value
          }
          );;
          Refresh(Tableau1_1);;
          Reset(TextInput5);;
          Reset(TextInput6);;
          Reset(TextInput8);;

          • Geoffroy

            Membre
            10 janvier 2024 à 15h17

            Quel est le message d’erreur ?

            • jayne

              Membre
              10 janvier 2024 à 15h44

              Le message d’erreur est “Type incompatible. Nous ne pouvons pas évaluer votre formule, car les types de variables de contexte ne sont pas compatibles avec les types de valeurs ailleurs dans votre application”

            • Geoffroy

              Membre
              10 janvier 2024 à 15h57

              Dans ce cas, il faut vérifier dans ta liste SharePoint si le type de données de chaque colonne correspond bien à ce que tu mis dans les contrôles PowerApps

              emailreparateur: Texte
              Solution: Texte
              analysetechnicien: Texte
              importance: Texte
              Statut: idem que Dropdown2

              • Cette réponse a été modifiée Il y a 1 mois, 1 semaine par  Geoffroy.
            • jayne

              Membre
              11 janvier 2024 à 9h26

              Bonjour,

              J’ai vérifié sur mon Excel et toutes les colonnes indiqués sont formatés en Texte.

            • jayne

              Membre
              11 janvier 2024 à 9h30

              Bonjour,

              J’ai vérifié sur mon Excel et toutes les colonnes indiqués sont formatés en Texte. En ce qui concerne les variables je n’en avais aucun du nom de varItem. Parcontre j’ai une variable importance qui peut être modfiable.

            • Geoffroy

              Membre
              10 janvier 2024 à 15h58

              A moins que ça vienne de varItem qui est peut-être utilisé ailleurs.

              • Cette réponse a été modifiée Il y a 1 mois, 1 semaine par  Geoffroy.
          • DavidZed

            Membre
            10 janvier 2024 à 20h04

            Tout dépend de ce que tu as stocké dans ta variable varItem,

            Si tu as stocké uniquement l’ID de la ligne, ça devrait fonctionner

            Si tu as stocké l’enregistrement entier, tu peux appeler la valeur de l’ID avec vartItem.Iddmd

            Pour la fonction Patch, il y a une erreur sur le 2nd argument: celui où tu es censée renseigner l’enregistrement à patcher, tu as trois possibilités :

            • Mettre les valeurs par défaut
              Patch(Tableau1_1; Defaults(‘Ta source de données’) ; {emailreparateur: TextInput5.Text; …….} )
              , ce qui va créer une nouvelle ligne
            • Renseigner l’ID:
              Patch(Tableau1_1; {Iddmd : 54} ; {emailreparateur: TextInput5.Text; …….} )
              Où 54 est l’ID de la ligne que tu souhaites patcher
            • Fournir l’enregistrement complet avec un LookUp :
              Patch(Tableau1_1; LookUp(Tableau1_1; emailreparateur = “polo@moumoute.com” ) ; {emailreparateur: TextInput5.Text; …….} )
            • jayne

              Membre
              11 janvier 2024 à 9h56

              Bonjour,

              Merci de ta réponse. J’ai essayé d’effectuer les deux manœuvres de patch à savoir définir le varItem comme une valeur qui stock tout et en faisant varItem.Iddmd :

              Set(varItem; ThisItem);;
              Patch(
              Tableau1_1;
              {Iddmd: varItem.Iddmd};
              {
              emailreparateur: TextInput5.Text;
              Solution: TextInput6.Text;
              analysetechnicien: TextInput8.Text;
              importance: TextInput2.Text;
              Statut: Dropdown2.Selected.Value
              }
              );;
              Refresh(Tableau1_1);;
              Reset(TextInput5);;
              Reset(TextInput6);;
              Reset(TextInput8);;

              Le message d’erreur indiqué est “Le type de cet argument ‘Iddmd’ ne correspond pas au type attendu ‘Text’. Type trouvé ‘Error’ ” or j’ai pourtant j’ai vérifier dans excel que toute était mis en format Texte et j’ai aussi fais avec une variable qui stock uniquement l’ID :

              Set(ValeurID; ThisItem.Iddmd);;

              Patch(

              Tableau1_1;

              {Iddmd: ValeurID};

              {

              emailreparateur: TextInput5.Text;

              Solution: TextInput6.Text;

              analysetechnicien: TextInput8.Text;

              importance: TextInput2.Text;

              Statut: Dropdown2.Selected.Value

              }

              );;

              Refresh(Tableau1_1);;

              Reset(TextInput5);;

              Reset(TextInput6);;

              Reset(TextInput8);;

            • DavidZed

              Membre
              11 janvier 2024 à 13h44

              C’est surprenant

              A tester : Mettre un ID en dur d’une ligne qui existe dans le tableau et voir si le problème est le même, exemple :

              <code class="language-diff">
              Patch(
              Tableau1_1;
              {Iddmd: "34"};
              {
              emailreparateur: TextInput5.Text; .......
              • Cette réponse a été modifiée Il y a 1 mois, 1 semaine par  DavidZed.
            • jayne

              Membre
              11 janvier 2024 à 14h28

              J’ai tester avec ce code mais ça n’a toujours pas fonctionné. La première fois c’était dû au format du du “Statut”. Le message d’erreur était “Le type de cet argument ‘Statut ne correspond pas au attendu ’Text’. Type ”Error” “. J’ai donc mis le statut en commentaire pour voir si il n’y avait que cela comme problème. Le deuxième message d’erreur qui est ensuite apparu est ”La colonne spécifiée “_” n’existe pas. La colonne avec le nom le plus proche est ‘ID2’ ” .

              Voici mon code :

              Patch(
              Tableau1_1;
              {Iddmd: “2ccac311bc”};
              {
              emailreparateur: TextInput5.Text;
              Solution: TextInput6.Text;
              analysetechnicien: TextInput8.Text;
              importance: TextInput2.Text;
              //Statut: Dropdown2.Selected.Value
              }
              );;
              Refresh(Tableau1_1);;
              Reset(TextInput5);;
              Reset(TextInput6);;
              Reset(TextInput8);;

            • Geoffroy

              Membre
              11 janvier 2024 à 14h36

              Un bon moyen d’éviter tous ces ennuis est de laisser tomber Excel et de passer sur Sharepoint.

  • R3dKap

    Membre
    11 janvier 2024 à 14h40

    Jayne, si il te dit Statut ne correspond pas au attendu ‘Text’. Type ‘Error’ c’est que tu as une erreur dans le Items de ton Dropdown2. Qu’as-tu dans le Items de ton Dropdown2 ?

    Sinon, mets-nous plutôt une capture complète de ton code avec la souris qui survole l’erreur. Ce sera plus facile d’identifier le pb je pense…

    Voici comment remonter clairement ses erreurs Power Apps dans le forum : https://ppfc.fr/groupes/infos-ppfc/forum/topic/%f0%9f%92%a1-power-apps-remonter-clairement-une-erreur-de-formule/

    • jayne

      Membre
      11 janvier 2024 à 15h46

      Dans l’Item de mon dropdown2 j’ai variable correspondant à une petite table. etatsituation ne comprends que 2 valeurs : “fait” et “non fait”:

      et mon code sur Power Apps s’affiche ainsi :

      Et voici comment s’affiche l’erreur :

      • Geoffroy

        Membre
        11 janvier 2024 à 17h35

        Qu’est-ce qu’il te propose après Dropdown2.Selected. ?

        • jayne

          Membre
          12 janvier 2024 à 9h44

          Il me propose etat. Et cela à corriger l’erreur, merci. Mais lorsque j’exécute mon code, il n’y plus de message d’erreur mais une ligne est ajouté et ce malgré le fait que j’ai spécifié l’id:

          J’ai aussi testé le code suivant en utilisant une variable. Dans ce cas j’ai un message d’erreur:

          • Geoffroy

            Membre
            12 janvier 2024 à 10h09

            A mon avis, le problème vient de Set(id;ThisItem.Iddmd).

            Comme tu n’es pas dans une galerie, il ne reconnait pas ThisItem.

            De plus, il vaut mieux éviter les noms qui ressemblent trop aux noms “System” comme id. Une bonne pratique consiste à mettre, par exemple, le préfixe var pour une variable.

            • jayne

              Membre
              12 janvier 2024 à 12h11

              Avant le formulaire, j’ai une galerie qui est présente afin de sélectionné le problème. Sur cette écran j’ai donc set la variable varRecordID, on a donc cela :

              En ce qui concerne la page de la mise à jour via le formulaire je n’ai plus de message d’erreur avec ce code ci-dessous mais encore une fois une nouvelle ligne apparait au lieu de mettre à jour la ligne concerné :

            • R3dKap

              Membre
              15 janvier 2024 à 9h32

              Plutôt que d’utiliser {Iddmd: …} en 2è paramètre du patch, essaie plutôt un :

              LookUp(TaSourceDeDonnées; Iddmd=varRecordID)
            • jayne

              Membre
              15 janvier 2024 à 11h19

              merci ! Cela a fonctionné !

  • Laurent CARRIERE

    Membre
    12 janvier 2024 à 10h23

    Une autre Bonne pratique est de ne pas utiliser Excel Comme source de données.

    Oups Désolé :)))

    Bonne journée à tous -discussion intéressante

  • R3dKap

    Membre
    15 janvier 2024 à 11h39

    A noter @David que le 2è paramètre du Path() au format {…} n’est pas forcément fiable (et c’est ce que j’avais déjà remarqué par le passé). Mieux vaut privilégier le LookUp() ou une variable contenant l’enregistrement en entier… 😉

Connectez-vous pour répondre.