Salut Julien,
Alors oui c’est possible mais effectivement la mise à jour est un peu “tricky” à faire.
En fait, la logique est la suivante :
-
on considère que la colonne de la collection parente qui contient la collection enfant est une donnée comme une autre
-
et donc, pour la mettre à jour il faut fournir à cette colonne une collection entière
-
il faut donc passer par une collection intermédiaire dans laquelle on va placer la collection enfant
-
on met à jour la collection intermédiaire
-
on met à jour la collection parente en lui fournissant la collection enfant dans son ensemble
Peut-être un exemple sera plus parlant :
ClearCollect(n colHeroes; n {n Name: "Starlight";n Gender: "F"n };n {n Name: "Captain America";n Gender: "F"n }n);;nClearCollect(n colUniverses;n {n Name: "Marvel";n Heroes: colHeroesn }n);;n// ----- Code pour corriger le genre de 'Captain America'nUpdateContext(// Récupérer l'élément parent où la collection enfant doit être modifiéen {n locUniverse: LookUp(colUniverses; Name = "Marvel")n }n);;n// Récupérer la collection enfant de l'élément parentnClearCollect(colTempHeroes; locUniverse.Heroes);;nPatch(// Modifier la collection enfantn colTempHeroes;n LookUp(n colTempHeroes;n Name = "Captain America"n );n {n Gender: "M"n }n);;nPatch(// Mettre à jour la collection enfant de l'élément parentn colUniverses;n locUniverse;n {n Heroes: colTempHeroesn }n)
Remarque : évidemment, en termes de perfs, l’idée même d’imbriquer une collection dans une autre n’est pas terrible car il y a des chances que pour mettre à jour la collection enfant pour l’ensemble des lignes de la collection parent il faille imbriquer 2 boucles ForAll()… mais y’a moyen d’optimiser un peu selon les cas
Voilà, j’espère que c’est suffisamment clair. J’ai pas testé le code mais le principe est là…
N’hésite pas si t’as besoin encore d’aide…
CommentID=uajk3tawzta5hu3, PostID=TKBmKhYLTh5UzWR