Erreur collect
Étiquetté : Bulles carte powerbi
-
Erreur collect
Posté par StevannS sur 26 avril 2023 à 12h54Lorsque 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 11 mois, 4 semaines 1 Membre · 16 Réponses -
16 Réponses
-
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
-
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
-
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 :
-
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
-
-
Ensuite patcher les lignes à mettre à jour
-
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
-
-
-
Et voilà, comme demandé
CommentID=O4NsOQaR6O270vj, PostID=R5nCVJhe1JU9gQa
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
-
Merci à vous tous pour ces échanges pertinents ! OK donc, je laisse tomber collect !
CommentID=Maa0q9B5SxBLUtA, PostID=R5nCVJhe1JU9gQa
Connectez-vous pour répondre.