Patch

Étiquetté : ,

  • Patch

    Posté par ChezWam sur 23 février 2022 à 15h46

    Bonjour à tous,

    j’essaye de créer une application pour mon association de musique afin de gérer l’inscription aux sorties proposées.

    J’ai deux listes SP :

    • Liste Musicien avec IDMusicien; TitleMusicien

    • Liste Sorties avec IDSortie;NomSortie; Musicien; IDRef

    La colonne Musicien dans la liste Sorties est une LookUp : Title de la liste Musicien, IDRef également.

    Lorsque je souhaite ajouter un musicien dans une “sortie” avec un Patch, cela vient écraser la donnée existante au lieu d’ajouter une ligne avec le nouveau musicien.

    J’ai tenté pas mal de choses mais je ne vois pas clairement comment faire en sorte d’incrémenter une nouvelle ligne pour chaque musicien qui s’incrit à une sortie.

    Pourriez vous me donner des pistes ?

    Merci d’avance 🙂

    Patch(

    ‘Table Sortie’;

    LookUp(‘Table Sortie’;

    IDSortie = DataTableSortie.Selected.IDSortie);

    {

    Musicien : ComboboxMusicien

    }

    );;

    PostID=NjO0xGFEOIFNdIl

    R3dKap a répondu Il y a 9 mois, 3 semaines 1 Membre · 6 Réponses
  • 6 Réponses
  • Séb

    Membre
    24 février 2022 à 8h42

    Bonjour @ChezWam

    Tu trouveras ci dessous, une réponse apportée par @R3dKap à une sollicitation du même genre sur le précédent forum.

    Riche d’enseignement, comme d’habitude.

    T’en souhaitant bonne lecture,

    La fonction Patch() (doc officielle : Patch function) te sers principalement, comme tu le sais déjà sans doute, à créer ou modifier des enregistrements d’une collection ou d’une source de données.
    La fonction Patch() a 3 paramètres :

    • 1er paramètre : le nom de la collection ou de la source de données…

      • Exemple 1 : Patch(maCollection, ...) ou Patch(CustomersList, ...)

    • 2è paramètre : 3 possibilités…

      • pour créer un nouvel enregistrement : on utilise alors la fonction Defaults() en lui passant de la nom de la collection ou de la source de données qui est spécifiée dans le 1er paramètre…

        • Exemple 2 : Patch(CustomersList, Defaults(CustomersList), ...)

      • pour modifier un enregistrement existant : il faut alors spécifier l’enregistrement concerné qui va être modifié

        • soit l’enregistrement complet en utilisant une fonction du type LookUp() ou First() ou Last(), etc…

          • Exemple 3 : Patch(CustomersList, LookUp(CustomersList, Name='SMITH'), ...)

        • soit un enregistrement partiel en spécifiant la valeur d’un champ clé…

          • Exemple 4 : Patch(CustomersList, {ID: 12}, ...)

      • pour modifier un ensemble d’enregistrements existants : il faut alors fournir dans ce paramètre la liste des enregistrements à modifier…

        • Exemple 5 : Patch(CustomersList, Filter(CustomersList, CustomerType='Professionnel'), ...)

    • 3è paramètre : les valeurs des colonnes du nouvel enregistrement (s’il s’agit d’une création) ou des enregistrements qui vont être modifiés (s’il s’agit d’une modification)…

      • Exemple 6 : Patch(CustomersList, Defaults(CustomersList), {CustomerLastName: 'DUPONT', CustomerFirstName: 'Frédéric', CustomerType: 'Particulier'}) va créer un nouvel enregistrement dans la liste CustomersList avec les valeurs de colonnes indiquées…

      • Exemple 7 : Patch(CustomersList, LookUp(CustomersList, CustomerNumber='546887'), {CustomerType: 'Professionnel'}) va modifier l’enregistrement du client n° 546887 pour changer sa colonne CustomerType en Professionnel

      • Exemple 8 : Patch(CustomersList, Filter(CustomersList, CustomerLastName='DUPONT'), {CustomerType: 'Professionnel'}) va modifier tous les clients qui s’appellent DUPONT pour changeur leur colonne CustomerType en Professionnel

    Après avoir utilisé la fonction Patch(), il faut idéalement s’assurer que l’opération s’est bien déroulée. Pour cela, juste après le call du Patch() on utilise la fonction Errors(). Le moyen le plus simple d’utiliser cette fonction c’est de simplement lui passer le nom de la collection ou de la source de données qui figure dans le 1er paramètre du Patch() juste avant. La fonction Errors() te renvoie alors la liste des erreurs qui sont apparues lors de la dernière opération effectuée sur cette collection ou source de données.
    Exemple 9 :

    If(IsEmpty(Errors(CustomersList)),n    Notify('Modifications enregistrées avec succès !'),n    Notify('Une erreur est apparue lors de la mise à jour !')n)​

    CommentID=bWLagfnNLGjllH5, PostID=NjO0xGFEOIFNdIl

  • Vince

    Membre
    24 février 2022 à 12h39

    Essaie peut être Musicien : ComboboxMusicien.Selected.Value

    CommentID=pAvoJquYwDlv0YS, PostID=NjO0xGFEOIFNdIl

  • R3dKap

    Membre
    24 février 2022 à 14h04

    @S, merci pour le rappel… 😉

    @ChezWam tu écrases à chaque fois ta ligne car le 2è paramètre de ton Patch() renvoie une ligne déjà existante de ta liste -> du coup le Patch() fonctionne en mode modification.

    Si tu veux créer une ligne dans ta liste, il faut que tu mettes un Defaults('Table Sortie') dans le 2è paramètre de ton Patch().

    Sinon @Vince a (partiellement) raison : pour enregistrer le musicien, il est préférable de spécifier quelle propriété de ta ComboboxMusicien utiliser (même si implicitement Power Apps est capable de le savoir). C’est à dire, qu’il te faut mettre ceci :

    {n    Musicien : ComboboxMusicien.Selectedn}

    Attention : mettre Combobox.Selected.Value ne fonctionnerait pas car la structure de ta colonne Musicien est complexe et de la forme :

    {n    Id: ...;n    Value: ...n}

    Il faut donc respecter ce format-là lorsque tu alimentes ta colonne Musicien. Or, si le Items de ta ComboboxMusicien est bien alimenté avec un Choices(…) alors ce sera le cas. Car la fonction Choices() construit un tableau à 2 colonnes qui respecte le format ci-dessus.

    Voilou… N’hésite pas revenir ici si tu as le moindre souci…

    CommentID=l6qN0otoLG0dfxq, PostID=NjO0xGFEOIFNdIl

    • ChezWam

      Membre
      1 mars 2022 à 12h39

      Bonjour @R3dKap,

      je me permet de revenir car je ne comprend pas d’où vient mon erreur , j’ai essayé différentes approches mais sans succès :

      Type d’argument non valide.Valeur Record attendue mais avec un schéma différent. Colonne Manquant. Votre formule n’a pas de colonne Id avec un type de Number.

      Pourtant il me semble que j’ai bien un Id dans les deux listes sharepoint.

      est ce que vous auriez une piste ?

      Merci d’avance pour votre temps.

      Patch(‘Table Sortie’;

      Defaults(‘Table Sortie’);

      {

      Musicien:{

      ID:Value(ComboBoxMusicien.Selected.Id);

      value: ComboBox3.Selected.Id

      };

      }

      )

      SubCommentID=xIaFIQlg1vR1BuT, CommentID=l6qN0otoLG0dfxq, PostID=NjO0xGFEOIFNdIl

  • ChezWam

    Membre
    1 mars 2022 à 12h59

    Finalement j’ai trouvé mais je n’attendais pas à cela et je ne suis pas sur de bien comprendre pourquoi cela fonctionne. Je partage mon retour à toutes fins utiles :

    NomIntervenantSortie:{

    Id:ComboBox3.Selected.Id;

    Value: ComboBox3.Selected.Id

    }

    Et c’est bien “Id” mais pas “ID”

    CommentID=5xbp8rogzvsMGjg, PostID=NjO0xGFEOIFNdIl

  • R3dKap

    Membre
    2 mars 2022 à 10h11

    Exactement… Tu as trouvé ! Tout ce qui est noms de colonnes, variables, fonctions, etc. dans Power Apps est sensible aux majuscules/minuscules.

    Or, pour les colonnes de recherche, dans la structure que j’avais indiqué plus haut tu remarques qu’effectivement c’est “Id” (et non “id” ni “ID”) et “Value” (et non “value”).

    D’ailleurs au passage, tu noteras aussi que l’identifiant automatique des éléments de listes dans SharePoint s’appelle “ID” (et non “Id”)… 😉

    CommentID=M7o6vOjzIONAmEd, PostID=NjO0xGFEOIFNdIl

Connectez-vous pour répondre.