[{"data":1,"prerenderedAt":1032},["ShallowReactive",2],{"docs-nav:fr":3,"docs:\u002Ffr\u002Fdocs\u002Fbusiness\u002Fpresenters":137},[4],{"title":5,"path":6,"stem":7,"children":8,"page":44},"Fr","\u002Ffr","fr",[9],{"title":10,"path":11,"stem":12,"children":13},"Qu'est-ce que Fougere","\u002Ffr\u002Fdocs","fr\u002Fdocs\u002Findex",[14,15,19,23,27,45,66,95,116],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},"Démarrer","\u002Ffr\u002Fdocs\u002Fgetting-started","fr\u002Fdocs\u002F01.getting-started",{"title":20,"path":21,"stem":22},"App Nuxt existante","\u002Ffr\u002Fdocs\u002Fexisting-app","fr\u002Fdocs\u002F02.existing-app",{"title":24,"path":25,"stem":26},"La CLI","\u002Ffr\u002Fdocs\u002Fcli","fr\u002Fdocs\u002F03.cli",{"title":28,"path":29,"stem":30,"children":31,"page":44},"Concepts","\u002Ffr\u002Fdocs\u002Fconcepts","fr\u002Fdocs\u002F2.concepts",[32,36,40],{"title":33,"path":34,"stem":35},"Philosophie","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fphilosophy","fr\u002Fdocs\u002F2.concepts\u002F1.philosophy",{"title":37,"path":38,"stem":39},"La Frond","\u002Ffr\u002Fdocs\u002Fconcepts\u002Ffrond","fr\u002Fdocs\u002F2.concepts\u002F2.frond",{"title":41,"path":42,"stem":43},"Le chemin le plus court","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fshortest-path","fr\u002Fdocs\u002F2.concepts\u002F3.shortest-path",false,{"title":46,"path":47,"stem":48,"children":49,"page":44},"Schéma","\u002Ffr\u002Fdocs\u002Fschema","fr\u002Fdocs\u002F3.schema",[50,54,58,62],{"title":51,"path":52,"stem":53},"Entités","\u002Ffr\u002Fdocs\u002Fschema\u002Fentities","fr\u002Fdocs\u002F3.schema\u002F1.entities",{"title":55,"path":56,"stem":57},"Vues","\u002Ffr\u002Fdocs\u002Fschema\u002Fviews","fr\u002Fdocs\u002F3.schema\u002F2.views",{"title":59,"path":60,"stem":61},"La carte d'identité","\u002Ffr\u002Fdocs\u002Fschema\u002Fcard","fr\u002Fdocs\u002F3.schema\u002F3.card",{"title":63,"path":64,"stem":65},"Standard Schema","\u002Ffr\u002Fdocs\u002Fschema\u002Fstandard-schema","fr\u002Fdocs\u002F3.schema\u002F4.standard-schema",{"title":67,"path":68,"stem":69,"children":70,"page":44},"Métier","\u002Ffr\u002Fdocs\u002Fbusiness","fr\u002Fdocs\u002F4.business",[71,75,79,83,87,91],{"title":72,"path":73,"stem":74},"Handlers","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fhandlers","fr\u002Fdocs\u002F4.business\u002F1.handlers",{"title":76,"path":77,"stem":78},"Presenters","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fpresenters","fr\u002Fdocs\u002F4.business\u002F2.presenters",{"title":80,"path":81,"stem":82},"Collectors","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fcollectors","fr\u002Fdocs\u002F4.business\u002F3.collectors",{"title":84,"path":85,"stem":86},"Erreurs","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ferrors","fr\u002Fdocs\u002F4.business\u002F4.errors",{"title":88,"path":89,"stem":90},"Seeds","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fseeds","fr\u002Fdocs\u002F4.business\u002F5.seeds",{"title":92,"path":93,"stem":94},"Les faits","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ffacts","fr\u002Fdocs\u002F4.business\u002F6.facts",{"title":96,"path":97,"stem":98,"children":99,"page":44},"Client","\u002Ffr\u002Fdocs\u002Fclient","fr\u002Fdocs\u002F5.client",[100,104,108,112],{"title":101,"path":102,"stem":103},"Queries & commands","\u002Ffr\u002Fdocs\u002Fclient\u002Fqueries-commands","fr\u002Fdocs\u002F5.client\u002F1.queries-commands",{"title":105,"path":106,"stem":107},"Formulaires","\u002Ffr\u002Fdocs\u002Fclient\u002Fforms","fr\u002Fdocs\u002F5.client\u002F2.forms",{"title":109,"path":110,"stem":111},"Session","\u002Ffr\u002Fdocs\u002Fclient\u002Fsession","fr\u002Fdocs\u002F5.client\u002F3.session",{"title":113,"path":114,"stem":115},"invoke","\u002Ffr\u002Fdocs\u002Fclient\u002Finvoke","fr\u002Fdocs\u002F5.client\u002F4.invoke",{"title":117,"path":118,"stem":119,"children":120,"page":44},"Infrastructure","\u002Ffr\u002Fdocs\u002Finfra","fr\u002Fdocs\u002F6.infra",[121,125,129,133],{"title":122,"path":123,"stem":124},"Le gradient","\u002Ffr\u002Fdocs\u002Finfra\u002Fgradient","fr\u002Fdocs\u002F6.infra\u002F1.gradient",{"title":126,"path":127,"stem":128},"Surfaces — REST & GraphQL","\u002Ffr\u002Fdocs\u002Finfra\u002Fsurfaces","fr\u002Fdocs\u002F6.infra\u002F2.surfaces",{"title":130,"path":131,"stem":132},"Déploiement","\u002Ffr\u002Fdocs\u002Finfra\u002Fdeployment","fr\u002Fdocs\u002F6.infra\u002F3.deployment",{"title":134,"path":135,"stem":136},"Hôtes","\u002Ffr\u002Fdocs\u002Finfra\u002Fhosts","fr\u002Fdocs\u002F6.infra\u002F4.hosts",{"id":138,"title":76,"body":139,"description":1027,"extension":1028,"meta":1029,"navigation":271,"path":77,"seo":1030,"stem":78,"__hash__":1031},"docs_fr\u002Ffr\u002Fdocs\u002F4.business\u002F2.presenters.md",{"type":140,"value":141,"toc":1021},"minimark",[142,146,155,783,794,799,812,815,819,832,898,906,910,913,946,953,957,1011,1017],[143,144,76],"h1",{"id":145},"presenters",[147,148,149,150,154],"p",{},"Un presenter ajoute des ",[151,152,153],"strong",{},"champs calculés"," à la sortie d'une entité. Chaque méthode définit\nun champ. Elle reçoit toutes les lignes de la réponse et renvoie une valeur par ligne.",[156,157,162],"pre",{"className":158,"code":159,"language":160,"meta":161,"style":161},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import { Presenter } from '@fougere\u002Fcore';\nimport type { EntityOrm } from '@fougere\u002Fcore';\nimport Post from '..\u002Fentities\u002FPost.js';\nimport Author from '..\u002Fentities\u002FAuthor.js';\n\n\u002F** Alias typé — la DI résout par nom de TYPE, et `AuthorOrm` est la clé du container. *\u002F\ntype AuthorOrm = EntityOrm\u003CAuthor>;\n\nexport default class PostPresenter extends Presenter(Post) {\n  constructor(private authorOrm: AuthorOrm) { super(); }\n\n  excerpt(posts: Post[]): string[] {\n    return posts.map((post) => post.body.slice(0, 200));\n  }\n\n  \u002F** Une lecture pour la page, pas une par ligne — c'est pourquoi la page est l'argument. *\u002F\n  async authorName(posts: Post[]): Promise\u003Cstring[]> {\n    const ids = [...new Set(posts.map((p) => p.authorId))];\n    const authors = await Promise.all(ids.map((id) => this.authorOrm.findById(id)));\n    const byId = new Map(authors.filter(Boolean).map((a) => [a!.id, a!.name]));\n    return posts.map((post) => byId.get(post.authorId) ?? 'Anonymous');\n  }\n}\n","ts","",[163,164,165,202,227,247,266,273,280,306,311,338,378,383,416,473,479,484,490,529,580,643,719,772,777],"code",{"__ignoreMap":161},[166,167,170,174,178,182,185,188,192,196,199],"span",{"class":168,"line":169},"line",1,[166,171,173],{"class":172},"sVHd0","import",[166,175,177],{"class":176},"sP7_E"," {",[166,179,181],{"class":180},"su5hD"," Presenter",[166,183,184],{"class":176}," }",[166,186,187],{"class":172}," from",[166,189,191],{"class":190},"sjJ54"," '",[166,193,195],{"class":194},"s_sjI","@fougere\u002Fcore",[166,197,198],{"class":190},"'",[166,200,201],{"class":176},";\n",[166,203,205,207,210,212,215,217,219,221,223,225],{"class":168,"line":204},2,[166,206,173],{"class":172},[166,208,209],{"class":172}," type",[166,211,177],{"class":176},[166,213,214],{"class":180}," EntityOrm",[166,216,184],{"class":176},[166,218,187],{"class":172},[166,220,191],{"class":190},[166,222,195],{"class":194},[166,224,198],{"class":190},[166,226,201],{"class":176},[166,228,230,232,235,238,240,243,245],{"class":168,"line":229},3,[166,231,173],{"class":172},[166,233,234],{"class":180}," Post ",[166,236,237],{"class":172},"from",[166,239,191],{"class":190},[166,241,242],{"class":194},"..\u002Fentities\u002FPost.js",[166,244,198],{"class":190},[166,246,201],{"class":176},[166,248,250,252,255,257,259,262,264],{"class":168,"line":249},4,[166,251,173],{"class":172},[166,253,254],{"class":180}," Author ",[166,256,237],{"class":172},[166,258,191],{"class":190},[166,260,261],{"class":194},"..\u002Fentities\u002FAuthor.js",[166,263,198],{"class":190},[166,265,201],{"class":176},[166,267,269],{"class":168,"line":268},5,[166,270,272],{"emptyLinePlaceholder":271},true,"\n",[166,274,276],{"class":168,"line":275},6,[166,277,279],{"class":278},"sutJx","\u002F** Alias typé — la DI résout par nom de TYPE, et `AuthorOrm` est la clé du container. *\u002F\n",[166,281,283,287,291,295,297,300,303],{"class":168,"line":282},7,[166,284,286],{"class":285},"sbsja","type",[166,288,290],{"class":289},"sbgvK"," AuthorOrm",[166,292,294],{"class":293},"smGrS"," =",[166,296,214],{"class":289},[166,298,299],{"class":176},"\u003C",[166,301,302],{"class":289},"Author",[166,304,305],{"class":176},">;\n",[166,307,309],{"class":168,"line":308},8,[166,310,272],{"emptyLinePlaceholder":271},[166,312,314,317,320,323,326,329,332,335],{"class":168,"line":313},9,[166,315,316],{"class":172},"export",[166,318,319],{"class":172}," default",[166,321,322],{"class":285}," class",[166,324,325],{"class":289}," PostPresenter",[166,327,328],{"class":285}," extends",[166,330,181],{"class":331},"sGLFI",[166,333,334],{"class":180},"(Post) ",[166,336,337],{"class":176},"{\n",[166,339,341,344,347,350,354,357,359,362,364,368,372,375],{"class":168,"line":340},10,[166,342,343],{"class":285},"  constructor",[166,345,346],{"class":176},"(",[166,348,349],{"class":285},"private",[166,351,353],{"class":352},"s99_P"," authorOrm",[166,355,356],{"class":293},":",[166,358,290],{"class":289},[166,360,361],{"class":176},")",[166,363,177],{"class":176},[166,365,367],{"class":366},"s_hVV"," super",[166,369,371],{"class":370},"skxfh","()",[166,373,374],{"class":176},";",[166,376,377],{"class":176}," }\n",[166,379,381],{"class":168,"line":380},11,[166,382,272],{"emptyLinePlaceholder":271},[166,384,386,390,392,395,397,400,403,405,407,411,414],{"class":168,"line":385},12,[166,387,389],{"class":388},"sVXei","  excerpt",[166,391,346],{"class":176},[166,393,394],{"class":352},"posts",[166,396,356],{"class":293},[166,398,399],{"class":289}," Post",[166,401,402],{"class":180},"[]",[166,404,361],{"class":176},[166,406,356],{"class":293},[166,408,410],{"class":409},"sZMiF"," string",[166,412,413],{"class":180},"[] ",[166,415,337],{"class":176},[166,417,419,422,425,428,431,433,435,438,440,443,446,448,451,453,456,458,462,465,468,471],{"class":168,"line":418},13,[166,420,421],{"class":172},"    return",[166,423,424],{"class":180}," posts",[166,426,427],{"class":176},".",[166,429,430],{"class":331},"map",[166,432,346],{"class":370},[166,434,346],{"class":176},[166,436,437],{"class":352},"post",[166,439,361],{"class":176},[166,441,442],{"class":285}," =>",[166,444,445],{"class":180}," post",[166,447,427],{"class":176},[166,449,450],{"class":180},"body",[166,452,427],{"class":176},[166,454,455],{"class":331},"slice",[166,457,346],{"class":370},[166,459,461],{"class":460},"srdBf","0",[166,463,464],{"class":176},",",[166,466,467],{"class":460}," 200",[166,469,470],{"class":370},"))",[166,472,201],{"class":176},[166,474,476],{"class":168,"line":475},14,[166,477,478],{"class":176},"  }\n",[166,480,482],{"class":168,"line":481},15,[166,483,272],{"emptyLinePlaceholder":271},[166,485,487],{"class":168,"line":486},16,[166,488,489],{"class":278},"  \u002F** Une lecture pour la page, pas une par ligne — c'est pourquoi la page est l'argument. *\u002F\n",[166,491,493,496,499,501,503,505,507,509,511,513,516,518,521,523,526],{"class":168,"line":492},17,[166,494,495],{"class":285},"  async",[166,497,498],{"class":388}," authorName",[166,500,346],{"class":176},[166,502,394],{"class":352},[166,504,356],{"class":293},[166,506,399],{"class":289},[166,508,402],{"class":180},[166,510,361],{"class":176},[166,512,356],{"class":293},[166,514,515],{"class":289}," Promise",[166,517,299],{"class":176},[166,519,520],{"class":409},"string",[166,522,402],{"class":180},[166,524,525],{"class":176},">",[166,527,528],{"class":176}," {\n",[166,530,532,535,538,540,543,546,549,551,553,555,557,559,561,563,565,567,570,572,575,578],{"class":168,"line":531},18,[166,533,534],{"class":285},"    const",[166,536,537],{"class":366}," ids",[166,539,294],{"class":293},[166,541,542],{"class":370}," [",[166,544,545],{"class":293},"...new",[166,547,548],{"class":331}," Set",[166,550,346],{"class":370},[166,552,394],{"class":180},[166,554,427],{"class":176},[166,556,430],{"class":331},[166,558,346],{"class":370},[166,560,346],{"class":176},[166,562,147],{"class":352},[166,564,361],{"class":176},[166,566,442],{"class":285},[166,568,569],{"class":180}," p",[166,571,427],{"class":176},[166,573,574],{"class":180},"authorId",[166,576,577],{"class":370},"))]",[166,579,201],{"class":176},[166,581,583,585,588,590,593,595,597,600,602,605,607,609,611,613,616,618,620,624,626,629,631,634,636,638,641],{"class":168,"line":582},19,[166,584,534],{"class":285},[166,586,587],{"class":366}," authors",[166,589,294],{"class":293},[166,591,592],{"class":172}," await",[166,594,515],{"class":409},[166,596,427],{"class":176},[166,598,599],{"class":331},"all",[166,601,346],{"class":370},[166,603,604],{"class":180},"ids",[166,606,427],{"class":176},[166,608,430],{"class":331},[166,610,346],{"class":370},[166,612,346],{"class":176},[166,614,615],{"class":352},"id",[166,617,361],{"class":176},[166,619,442],{"class":285},[166,621,623],{"class":622},"s39Yj"," this",[166,625,427],{"class":176},[166,627,628],{"class":180},"authorOrm",[166,630,427],{"class":176},[166,632,633],{"class":331},"findById",[166,635,346],{"class":370},[166,637,615],{"class":180},[166,639,640],{"class":370},")))",[166,642,201],{"class":176},[166,644,646,648,651,653,656,659,661,664,666,669,671,674,676,678,680,682,684,687,689,691,693,695,698,700,702,704,707,709,711,714,717],{"class":168,"line":645},20,[166,647,534],{"class":285},[166,649,650],{"class":366}," byId",[166,652,294],{"class":293},[166,654,655],{"class":293}," new",[166,657,658],{"class":331}," Map",[166,660,346],{"class":370},[166,662,663],{"class":180},"authors",[166,665,427],{"class":176},[166,667,668],{"class":331},"filter",[166,670,346],{"class":370},[166,672,673],{"class":180},"Boolean",[166,675,361],{"class":370},[166,677,427],{"class":176},[166,679,430],{"class":331},[166,681,346],{"class":370},[166,683,346],{"class":176},[166,685,686],{"class":352},"a",[166,688,361],{"class":176},[166,690,442],{"class":285},[166,692,542],{"class":370},[166,694,686],{"class":180},[166,696,697],{"class":293},"!",[166,699,427],{"class":176},[166,701,615],{"class":180},[166,703,464],{"class":176},[166,705,706],{"class":180}," a",[166,708,697],{"class":293},[166,710,427],{"class":176},[166,712,713],{"class":180},"name",[166,715,716],{"class":370},"]))",[166,718,201],{"class":176},[166,720,722,724,726,728,730,732,734,736,738,740,742,744,747,749,751,753,755,758,761,763,766,768,770],{"class":168,"line":721},21,[166,723,421],{"class":172},[166,725,424],{"class":180},[166,727,427],{"class":176},[166,729,430],{"class":331},[166,731,346],{"class":370},[166,733,346],{"class":176},[166,735,437],{"class":352},[166,737,361],{"class":176},[166,739,442],{"class":285},[166,741,650],{"class":180},[166,743,427],{"class":176},[166,745,746],{"class":331},"get",[166,748,346],{"class":370},[166,750,437],{"class":180},[166,752,427],{"class":176},[166,754,574],{"class":180},[166,756,757],{"class":370},") ",[166,759,760],{"class":293},"??",[166,762,191],{"class":190},[166,764,765],{"class":194},"Anonymous",[166,767,198],{"class":190},[166,769,361],{"class":370},[166,771,201],{"class":176},[166,773,775],{"class":168,"line":774},22,[166,776,478],{"class":176},[166,778,780],{"class":168,"line":779},23,[166,781,782],{"class":176},"}\n",[147,784,785,786,789,790,793],{},"Placez la classe dans le dossier ",[163,787,788],{},"presenters\u002F"," de la Frond. Le scan l'enregistre sous le\nnom ",[163,791,792],{},"PostPresenter",". Les méthodes peuvent être synchrones ou asynchrones, et les\ndépendances du constructeur sont résolues par type.",[795,796,798],"h2",{"id":797},"pourquoi-ce-nest-pas-un-champ-de-lentité","Pourquoi ce n'est pas un champ de l'entité",[147,800,801,804,805,807,808,811],{},[163,802,803],{},"excerpt"," est calculé depuis ",[163,806,450],{}," et n'a pas besoin d'être stocké. ",[163,809,810],{},"authorName"," vient\nd'une autre entité ; le calculer à la lecture évite de dupliquer cette valeur lors d'un\nrenommage d'auteur.",[147,813,814],{},"Utilisez un presenter lorsque le calcul demande des I\u002FO, une autre entité ou les deux. Il\ns'agit d'une classe afin que ses dépendances, notamment un ORM, puissent être injectées.",[795,816,818],{"id":817},"application-aux-différentes-surfaces","Application aux différentes surfaces",[147,820,821,822,825,826,825,829,831],{},"Un champ calculé est ajouté à la sortie de l'entité sur les quatre surfaces : l'enveloppe\n(",[163,823,824],{},"useQuery",", ",[163,827,828],{},"useCommand",[163,830,113],{},"), le catch-all REST, un hôte REST standalone et\nGraphQL. Aucune configuration supplémentaire n'est nécessaire.",[156,833,835],{"className":158,"code":834,"language":160,"meta":161,"style":161},"const { items } = await useQuery\u003CPost>(Post, 'list');\nitems[0].excerpt;      \u002F\u002F ← présent, exactement comme dans une requête GraphQL\n",[163,836,837,879],{"__ignoreMap":161},[166,838,839,842,844,847,849,851,853,856,858,861,863,866,868,870,873,875,877],{"class":168,"line":169},[166,840,841],{"class":285},"const",[166,843,177],{"class":176},[166,845,846],{"class":366}," items",[166,848,184],{"class":176},[166,850,294],{"class":293},[166,852,592],{"class":172},[166,854,855],{"class":331}," useQuery",[166,857,299],{"class":176},[166,859,860],{"class":289},"Post",[166,862,525],{"class":176},[166,864,865],{"class":180},"(Post",[166,867,464],{"class":176},[166,869,191],{"class":190},[166,871,872],{"class":194},"list",[166,874,198],{"class":190},[166,876,361],{"class":180},[166,878,201],{"class":176},[166,880,881,884,886,889,891,893,895],{"class":168,"line":204},[166,882,883],{"class":180},"items[",[166,885,461],{"class":460},[166,887,888],{"class":180},"]",[166,890,427],{"class":176},[166,892,803],{"class":180},[166,894,374],{"class":176},[166,896,897],{"class":278},"      \u002F\u002F ← présent, exactement comme dans une requête GraphQL\n",[899,900,901],"blockquote",{},[147,902,903,904,427],{},"L'enrichissement est maintenant appliqué dans la façade commune. Les versions\nprécédentes l'appliquaient séparément dans les projections REST et GraphQL, et pas dans\n",[163,905,824],{},[795,907,909],{"id":908},"où-ça-sarrête-une-vue-nommée","Où ça s'arrête : une vue nommée",[147,911,912],{},"Lorsqu'une opération nomme une vue de sortie, seuls les champs de cette vue sont renvoyés.\nUn champ calculé qui n'y figure pas est exclu :",[156,914,916],{"className":158,"code":915,"language":160,"meta":161,"style":161},"Crud(Post, { list: PostCard })   \u002F\u002F list émet PostCard, et rien que PostCard\n",[163,917,918],{"__ignoreMap":161},[166,919,920,923,925,927,929,932,934,937,940,943],{"class":168,"line":169},[166,921,922],{"class":331},"Crud",[166,924,865],{"class":180},[166,926,464],{"class":176},[166,928,177],{"class":176},[166,930,931],{"class":370}," list",[166,933,356],{"class":176},[166,935,936],{"class":180}," PostCard ",[166,938,939],{"class":176},"}",[166,941,942],{"class":180},")   ",[166,944,945],{"class":278},"\u002F\u002F list émet PostCard, et rien que PostCard\n",[147,947,948,949,952],{},"Sans vue nommée, les champs calculés s'ajoutent à la sortie de l'entité. L'",[686,950,951],{"href":52},"axe\nboundary"," continue de s'appliquer aux champs de l'entité.",[795,954,956],{"id":955},"ce-que-ce-nest-pas","Ce que ce n'est pas",[958,959,960,978,992,1001],"ul",{},[961,962,963,966,967,970,971,974,975,427],"li",{},[151,964,965],{},"Pas un sérialiseur."," Ce qui peut sortir du tout est l'axe ",[163,968,969],{},"boundary"," ; ce qu'une\naudience donnée voit est une ",[686,972,973],{"href":56},"vue",". Un presenter ne fait\nqu'",[151,976,977],{},"ajouter",[961,979,980,983,984,987,988,427],{},[151,981,982],{},"Pas un endroit pour les règles métier."," Un champ calculé est une lecture. Une\ntransition (",[163,985,986],{},"publish",") est ",[686,989,991],{"href":990},"\u002Ffr\u002Fdocs\u002Fbusiness\u002Fhandlers#un-%C3%A9tat-change-par-une-op%C3%A9ration-jamais-par-une-%C3%A9criture-de-champ","une opération, pas une écriture de\nchamp",[961,993,994,997,998,1000],{},[151,995,996],{},"Pas automatiquement optimisé."," Une méthode reçoit toute la page, ce qui permet de\nregrouper les lectures. Un ",[163,999,633],{}," dans chaque itération produira toujours N lectures.",[961,1002,1003,1006,1007,1010],{},[151,1004,1005],{},"Pas d'échec silencieux."," Une erreur dans un champ calculé produit ",[163,1008,1009],{},"INTERNAL_ERROR"," en\nindiquant le champ concerné.",[147,1012,1013,1014,1016],{},"Suite : ",[686,1015,80],{"href":81}," — résoudre les paramètres par type.",[1018,1019,1020],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sVXei, html code.shiki .sVXei{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":161,"searchDepth":204,"depth":204,"links":1022},[1023,1024,1025,1026],{"id":797,"depth":204,"text":798},{"id":817,"depth":204,"text":818},{"id":908,"depth":204,"text":909},{"id":955,"depth":204,"text":956},"Ajouter des champs calculés aux sorties d'une entité, avec injection de dépendances et traitement par lot.","md",{},{"title":76,"description":1027},"0tfGWq7lOWJH7hIGt-AKXJ_XC-LhSw-zb-nSN9Y4iic",1786637819903]