Erreur sauvegarde collection vers liste sharepoint

  • Erreur sauvegarde collection vers liste sharepoint

    Posté par Florian Gajdos sur 21 septembre 2023 à 14h11

    Bonjour à tous,

    J’ai besoin d’aide car je n’arrive pas à ajouter des items d’une collection vers une liste sharepoint.

    Pour donner le context je souhaite faire des ajouts multiples dans une liste sharepoint via une collection complétée par l’utilisateur.

    Pour peupler ma collection je pars de 4 textinput et de deux dropdowns relié à deux listes sharepoint (liste technologie et liste centre) .

    Ensuite je souhaite enregistrer ma collection dans une autre liste nommé : liste parc. Dans cette liste les colonnes Technologie et Centre sont des colonnes “recherche”. Ci-dessous pour illustrer mon cas :

    Voici le message d’erreur :

    Je comprends que la liste parc attend pour les colonnes Technologie et Centre des données en .value mais reçois du text.

    Donc comment faire pour que les données dans la collection soient les mêmes que pour la liste sharepoint.

    Merci par avance.

    PostID=ukZsywYt1asBB4K

    Florian Gajdos a répondu Il y a 9 mois, 1 semaine 1 Membre · 5 Réponses
  • 5 Réponses
  • DavidZed

    Membre
    21 septembre 2023 à 18h28

    Hello Florian Gajdos ,

    Pour que l’update de ton patch fonctionne dans un ForAll, il faut appeler les valeurs de l’enregistrement actuellement traité avec ThisRecord, exemple :

       ForAll(CreationParc ; Patch( 'Liste Parc' ; Defaults('Liste Parc') ; {Parc: ThisRecord.Parc ; Turbine: ThisRecord.Turbine  /* etc.... */ } ))

    Bonne pratique :

    Idéalement, je te conseille de toujours coupler un ForAll avec As, pour nommer ta référence à l’enregistrement en cours d’évaluation, le nom personnalisé remplacera le ThisRecord :

    ForAll(CreationParc As CeParc ; Patch( 'Liste Parc' ; Defaults('Liste Parc') ; {Parc: CeParc.Parc ; Turbine: CeParc.Turbine  /* etc.... */ } ))

    Optimisation :

    • Si tu fais un Patch() dans un ForAll() , tu vas faire X Patchs (donc des requêtes) à ta source de données.

    • Si tu fais un Forall() dans un patch, tu vas faire une seule requête de X enregistrements (Lignes) ce qui sera beaucoup plus rapide à traiter.

    Patch( 'Liste Parc' ;ForAll(CreationParc As CeParc ; {Parc: CeParc.Parc ; Turbine: CeParc.Turbine  /* etc.... */ } ))

    Et enfin, si ta collection a exactement le même schéma de données que ta source (Avec uniquement la colonne Id et les colonnes que tu as créé), tu peux patcher le plus simplement du monde :

    Patch( 'Liste Parc' ; CreationParc)

    , pour chaque ligne, si la colonne Id est vide : un nouvel enregistrement sera créé, sinon l’enregistrement existant sera mis à jour

    CommentID=9ubWcN7NrMit77j, PostID=ukZsywYt1asBB4K

  • Florian Gajdos

    Membre
    25 septembre 2023 à 14h55

    DavidZed Merci beaucoup pour ton partage instructif ! Je garde le ForAll() dans un patch 👍

    Dans un premier temps j’ai modifié le ForAll en ajoutant le ThisRecord comme tu le préconises mais j’ai toujours le message d’erreur: “Le type de cet argument ‘CentreID’ ne correspond pas au type attendu ‘Record’. Type trouvé ‘Text’.

    Comment obtenir un type de donné ‘Record’ ? Il y a peut-être une action à faire dans le code ?

    CommentID=KWptYou3iAwwDH7, PostID=ukZsywYt1asBB4K

    • DavidZed

      Membre
      25 septembre 2023 à 15h03

      C’est parce que ton Centre est une colonne de type recherche, il attend une valeur de type record enregistrement au format {Id : 45; Value:”Ablis Test”} (qui vont correspondre aux colonnes ID et Title de ta liste lié à cette colonne recherche.

      L’idéal est de récupérer ce schéma sur ta liste déroulante ou ton combobox: ComboBox1.Selected (au moment ou tu collecte les réponses)

      SubCommentID=9wYhjXrfpGiuSiJ, CommentID=KWptYou3iAwwDH7, PostID=ukZsywYt1asBB4K

    • Florian Gajdos

      Membre
      28 septembre 2023 à 7h40

      Peux-tu me préciser la façon de faire pour récupérer le record du dropdown ?

      Car j’ai essayer ainsi pour le dropdown “Centre” qui reprend les données d’une colonne recherche :

      Choices([@'Liste parc'].CentreID)
      Collect(n    CreationParc;n    {n        Parc: TextInputParc.Text;n        Technologie: DropdownTechnologie.Selected.Technologie;n        Turbine: TextInputSnTurbine.Text;n        Centre: {Value:DropdownCentre.Selected.Value};n        Exploitant: TextInputExploitant.Text;n        Emailexploitant: TextInputEmailExploitant.Textn    }n)

      Mais je reste avec la même erreur et je n’ai pas d’autre idée.

      Merci pour ton aide.

      SubCommentID=tdl88NdR9gkXybI, CommentID=KWptYou3iAwwDH7, PostID=ukZsywYt1asBB4K

  • Florian Gajdos

    Membre
    28 septembre 2023 à 9h50

    DavidZed J’ai une méthode pour récupérer correctement les données des colonnes recherche :

    Collect(n    CreationParc;n    {n        Centre: {n            Id:LookUp('Liste centre de maintenance';'Centre de maintenance'=ComboBoxCentreAjoutParc.Selected.Value;ID);n            Value:ComboBoxCentreAjoutParc.Selected.Valuen        };n        Technologie:{n            Id:LookUp('Liste technologie';Technologie=DropdownTechnologie.Selected.Technologie;ID);n            Value:DropdownTechnologie.Selected.Technologien        };n        Parc: TextInputParc.Text;n        Turbine: TextInputSnTurbine.Text;n        Exploitant: TextInputExploitant.Text;n        Emailexploitant: TextInputEmailExploitant.Textn    }n)

    Ensuite le patch vers ma liste sharepoint fonctionne correctement !

    Encore merci d’avoir pris le temps pour mon problème.

    CommentID=X5VTjm7Yk1SK6cR, PostID=ukZsywYt1asBB4K

Connectez-vous pour répondre.