Erreur collect

Étiquetté : 

  • Erreur collect

    Posté par StevannS sur 26 avril 2023 à 12h54

    Lorsque je sauvegarde les éléments de ma collection Liste_A (initialement importée depuis ma liste SP_A) back vers ma liste SP_A (les 2 ayant les mêmes colonnes), à l’aide de la formule Collect(SP_A;Liste_A), je prends l’erreur suivante : <Erreur réseau lors de l’utilisation de la fonction Collect : le champ “ID” est obligatoire. >

    Merci de vos lumières !

    PostID=R5nCVJhe1JU9gQa

    StevannS a répondu Il y a 4 mois, 2 semaines 1 Membre · 16 Réponses
  • 16 Réponses
  • DavidZed

    Membre
    26 avril 2023 à 13h29

    Hello StevannS,

    Pour mettre à jour une source de données, il faut utiliser Patch() ou UpdateIf()

    CommentID=oLsHQzJV8FH3r2n, PostID=R5nCVJhe1JU9gQa

  • StevannS

    Membre
    26 avril 2023 à 14h58

    J’ai appliqué la formule collect(SP_list;Col_List) suite vidéo de Shane Young (Vidéos Bing / 17min50”). Le sujet de l’ID n’y est pas évoqué. Cela a-t-il changé depuis ?

    CommentID=vaqoaDjXLDXTWYX, PostID=R5nCVJhe1JU9gQa

    • R3dKap

      Membre
      26 avril 2023 à 16h18

      Salut StevannS,

      Ton lien vers la vidéo ne fonctionne pas. Tu pourrais mettre le bon lien parce-que le coup du Collect() pour manipuler une liste SharePoint je demande à voir… 😊

      SubCommentID=oAgBNJp4NfJbcgX, CommentID=vaqoaDjXLDXTWYX, PostID=R5nCVJhe1JU9gQa

  • Geoffroy

    Membre
    26 avril 2023 à 16h09

    Bonjour StevannS

    Quand tu visualises ta collection, est-ce que le champ ID apparait bien ?

    Comment importes-tu la liste dans ta collection au départ ?

    CommentID=exfGfDWHs7Xl6sf, PostID=R5nCVJhe1JU9gQa

  • StevannS

    Membre
    26 avril 2023 à 16h26

    Au départ, je l’importe comme suit : ClearCollect(Liste_Commentaires;’NRJ Commentaires’)

    La liste SP contient une colonne ID automatiquement créée. Ma collection contient bien cette colonne. Lorsque je créée mes nouveaux éléments, j’implémente le champ ID en max+1. Mais je ne vois pas vraiment pourquoi je doit m’occuper de cela ? Pour moi, ca se faisait tout seul en tâche de fond ?

    CommentID=CzS8ui6CTVvEhtP, PostID=R5nCVJhe1JU9gQa

    • DavidZed

      Membre
      26 avril 2023 à 16h32

      Ok je vois,

      La colonne ID est gérée par Sharepoint, tu ne peux pas choisir la valeur de l’ID pour les nouveaux enregistrements.

      Il y a plusieurs workarounds :

      • Collecter les nouveaux enregistrements dans une collection séparée

      • Identifier les nouveaux enregistrements dans la collection avec une colonne ajoutée (AddColumns)

      L’idée, c’est au moment du patch, de procéder par étape :

      1. Ajouter les nouveaux records : Patch(Liste_Commentaires,Defaults(Liste_Commentaires); [Updates])

        • l’ID va être généré automatiquement grace au Defaults(Liste_Commentaires)

        • Remplacer l'[update] par l’enregistrement à ajouter ou la collection dans un ForAll

      2. Ensuite patcher les lignes à mettre à jour

      3. Enfin supprimer les lignes qui ont été marquées comme à supprimer

      A noter qu’avec Dataverse, c’est plus simple, on peut générer localement le GUID qui sert de clé primaire, et donc on peut se passer de l’étape 1

      SubCommentID=fMGTgATE1fcxi8J, CommentID=CzS8ui6CTVvEhtP, PostID=R5nCVJhe1JU9gQa

  • StevannS

    Membre
    26 avril 2023 à 16h27

    CommentID=8OorCu7CO91gh0J, PostID=R5nCVJhe1JU9gQa

  • StevannS

    Membre
    26 avril 2023 à 16h27

    Et voilà, comme demandé

    CommentID=O4NsOQaR6O270vj, PostID=R5nCVJhe1JU9gQa

  • R3dKap

    Membre
    26 avril 2023 à 17h39

    Merci StevannS. J’ai regardé la vidéo avec attention et repéré où Shane parle du fait d’utiliser un Collect() pour écrire dans une source de données (et pas dans une collection) : minutage 17’52.

    Et effectivement il semblerait (et ça je ne le savais pas) que tu puisses écrire dans une source de données avec la fonction Collect() du moment que tu respectes la structure entre ta source et ta cible. Pour moi, c’était plutôt le rôle de la fonction Patch() avec seulement 2 paramètres : ta source de données cible, puis ta collection source.

    Mais attention, à mon avis (et il ne le précise pas) ça ne fonctionne que pour de la mise à jour d’enregistrements déjà existants. Pour créer de nouveaux enregistrements dans ta source de données (comme expliqué par DavidZed) il te faut impérativement passer par la fonction Patch() avec Defaults(TaSourceDeDonnées) en deuxième paramètre.

    CommentID=bIhFTm5pPkQws4s, PostID=R5nCVJhe1JU9gQa

  • Geoffroy

    Membre
    26 avril 2023 à 18h10

    Bonjour R3dKap

    Désolé de te contredire mais j’ai une appli où je crée un nouvel enregistrement dans une liste SharePoint avec le dernier élément d’une collection, grâce à la commande Collect(LSP_Panier_MGC;Last(colPanier)).

    Ou alors, j’ai raté un truc 😉

    CommentID=7Ez3X7qhQufOmlU, PostID=R5nCVJhe1JU9gQa

  • DavidZed

    Membre
    26 avril 2023 à 18h24

    A tester, dans ce cas le collect serait en effet plus intéressant, mais du coup je pense que l’ID ne doit pas contenir de donnée dans la collection, sinon SharePoint n’acceptera pas que l’on tente d’écrire une valeur dans une colonne en lecture seule.

    CommentID=5Ht4kOoHL7F2Dor, PostID=R5nCVJhe1JU9gQa

  • Geoffroy

    Membre
    26 avril 2023 à 18h27

    Je confirme. Le champ ID de la collection est vide (cf mon post ci-dessus) et un nouvel ID est généré automatiquement dans la liste SharePoint. 😀

    CommentID=jvq8OjXcWTtddD1, PostID=R5nCVJhe1JU9gQa

  • StevannS

    Membre
    26 avril 2023 à 18h58

    Du coup, j’en reviens à mon pb du début ? Pourquoi ai-je ce message d’erreur alors que je ne générais pas d’ID, et que SP & PA sont sensés en faire leur affaire ?

    CommentID=m3IrtuZjrPpRTCK, PostID=R5nCVJhe1JU9gQa

  • DavidZed

    Membre
    27 avril 2023 à 7h24

    J’ai fait quelques essais :

    Collect d’item depuis une Source de donnée SP

    collect de ces items vers la liste SP et retirant toutes les colonnes systeme avec DropColumns

    Ca ne marche toujours pas, pour chaque colonne complexe (Choix, personne, recherche…), il y aura une erreur car elles contiennent elle même des colonnes systeme :

    Donc pour que cela fonctionne, il ne faut inclure dans la collection que des items simples.

    D’ailleurs on voit comment Shane Young procède dans sa vidéo, a aucun moment il ne collect un élément complet depuis la source, il collecte seulement un record avec les éléments qui l’intéressent (vers 16:00)

    CommentID=nJxrnXGTiIuP0tP, PostID=R5nCVJhe1JU9gQa

  • R3dKap

    Membre
    27 avril 2023 à 8h16

    Ah, on est bien d’accord…

    Donc, pour résumer StevannS, mon avis au vu de ces éléments :

    • Collect() doit être réservé au traitement des collections

    • Patch() doit être utilisé pour les créations et mise à jour des sources de données

    Donc, dans ton cas, si tu veux mettre à jour ta liste SharePoint, utilise le Patch() pour le faire. On va dire que c’est la bonne pratique… 😊

    CommentID=3hr0xDspJ031Kua, PostID=R5nCVJhe1JU9gQa

  • StevannS

    Membre
    27 avril 2023 à 8h27

    Merci à vous tous pour ces échanges pertinents ! OK donc, je laisse tomber collect !

    CommentID=Maa0q9B5SxBLUtA, PostID=R5nCVJhe1JU9gQa

Connectez-vous pour répondre.