{"id":2911,"date":"2017-08-21T15:43:46","date_gmt":"2017-08-21T15:43:46","guid":{"rendered":"https:\/\/answers.gurussolutions.com\/answers\/how-to-generate-a-csv-file-for-download-in-netsuite-suitelets-without-storing-it-2\/"},"modified":"2026-07-28T18:25:18","modified_gmt":"2026-07-28T18:25:18","slug":"comment-generer-un-fichier-csv-a-telecharger-dans-netsuite-suitelets-sans-lenregistrer","status":"publish","type":"qa_entry","link":"https:\/\/answers.gurussolutions.com\/fr\/answers\/comment-generer-un-fichier-csv-a-telecharger-dans-netsuite-suitelets-sans-lenregistrer\/","title":{"rendered":"Comment g\u00e9n\u00e9rer un fichier CSV \u00e0 t\u00e9l\u00e9charger dans NetSuite Suitelets sans l&rsquo;enregistrer ?"},"content":{"rendered":"","protected":false},"template":"","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","ga_subtitle":"D\u00e9couvrez comment cr\u00e9er et fournir de mani\u00e8re dynamique un fichier CSV directement \u00e0 partir d\u2019un Suitelet NetSuite, permettant ainsi \u00e0 l\u2019utilisateur de le t\u00e9l\u00e9charger imm\u00e9diatement sans avoir \u00e0 l\u2019enregistrer dans le \u00ab File Cabinet \u00bb.","ga_short_answer":"Pour g\u00e9n\u00e9rer un fichier CSV \u00e0 t\u00e9l\u00e9charger sans l\u2019enregistrer dans le \u00ab File Cabinet \u00bb de NetSuite, cr\u00e9ez un Suitelet qui construit dynamiquement le contenu du fichier CSV sous forme de cha\u00eene de caract\u00e8res. Utilisez ensuite `context.response.addHeader()` pour d\u00e9finir les en-t\u00eates \u00ab Content-Type \u00bb et \u00ab Content-Disposition \u00bb, puis `context.response.write()` pour g\u00e9n\u00e9rer la cha\u00eene CSV, ce qui invitera l'utilisateur \u00e0 enregistrer le fichier.","ga_scenario":"Les utilisateurs de NetSuite ont souvent besoin de pouvoir g\u00e9n\u00e9rer des exportations de donn\u00e9es au format CSV directement \u00e0 partir d\u2019un Suitelet. Le d\u00e9fi consiste \u00e0 fournir cette fonctionnalit\u00e9 sans passer par l\u2019\u00e9tape interm\u00e9diaire consistant \u00e0 enregistrer le fichier g\u00e9n\u00e9r\u00e9 dans le \u00ab NetSuite File Cabinet \u00bb, ce qui peut s\u2019av\u00e9rer inefficace pour les t\u00e9l\u00e9chargements ponctuels ou les rapports dynamiques.","ga_solution":"Un fichier CSV est un fichier texte dans lequel les valeurs sont s\u00e9par\u00e9es par des d\u00e9limiteurs, g\u00e9n\u00e9ralement des virgules. Pour g\u00e9n\u00e9rer un fichier CSV pouvant \u00eatre t\u00e9l\u00e9charg\u00e9 directement \u00e0 partir d\u2019un Suitelet NetSuite sans le stocker dans le \u00ab File Cabinet \u00bb, proc\u00e9dez comme suit :\n1. D\u00e9finissez un script de Suitelet avec un point d\u2019entr\u00e9e `onRequest`.\n2. Dans la fonction `onRequest`, initialisez une variable de type cha\u00eene de caract\u00e8res destin\u00e9e \u00e0 contenir le contenu du fichier CSV.\n3. Construisez dynamiquement la cha\u00eene CSV, en incluant les en-t\u00eates et les donn\u00e9es. Chaque ligne doit \u00eatre s\u00e9par\u00e9e par un retour chariot et un saut de ligne (`rn`).\n4. D\u00e9finissez les en-t\u00eates HTTP appropri\u00e9s \u00e0 l\u2019aide de `context.response.addHeader()` afin de sp\u00e9cifier le type de contenu comme \u00ab text\/csv \u00bb et de proposer un nom de fichier pour le t\u00e9l\u00e9chargement.\n5. Enfin, \u00e9crivez la cha\u00eene CSV compl\u00e8te dans la r\u00e9ponse \u00e0 l\u2019aide de `context.response.write()`. Vous trouverez ci-dessous un exemple d\u2019extrait de code Suitelet illustrant cette approche :\n\n```\njavascript\/** * @NApiVersion 2.x * @NScriptType Suitelet *\/define([], function() {    function suiteletEntryPoint(context) {        var csv = '';        \/\/ Dynamically create the CSV structure        \/\/ Header        csv + 'Id,Name' + 'rn';        csv + '101,Stan';        \/\/ Set response headers for CSV download        context.response.addHeader({            name: 'Content-Type',            value: 'text\/csv'        });        context.response.addHeader({            name: 'Content-Disposition',            value: 'attachment; filename=\"File Name.csv\"'        });        \/\/ Write the CSV content to the response        context.response.write({            output: csv        });    }    return {        onRequest: suiteletEntryPoint    };});\n```","ga_source_author":"","ga_source_author_email":"","ga_date_original":"2017-08-21T08:43:46-07:00","ga_date_verified":"2026-07-05","ga_source_subject":"Generate Excel file without storing it in the file cabinet","ga_ans_id":"ANS-1172","ga_publish_decision":"publish_with_edits","ga_staleness_risk":"high","ga_review_priority":"spot_check","ga_tier2_verdict":"partially_outdated","ga_tier2_concerns":"The function `response.setContentType('CSV', 'File Name');` is outdated in current NetSuite SuiteScript 2.x. The modern approach involves using `context.response.addHeader()` to set the 'Content-Type' and 'Content-Disposition' headers.","ga_final_category":"SuiteScript Development","footnotes":""},"ga_category":[108,23,108],"ga_audience":[10],"ga_difficulty":[92],"class_list":["post-2911","qa_entry","type-qa_entry","status-publish","hentry","ga_category-developpement-suitescript","ga_category-suitescript-development","ga_audience-developer-suitescript","ga_difficulty-niveau-intermediaire"],"taxonomy_info":{"ga_category":[{"value":108,"label":"D\u00e9veloppement SuiteScript"},{"value":23,"label":"SuiteScript Development"},{"value":108,"label":"D\u00e9veloppement SuiteScript"}],"ga_audience":[{"value":10,"label":"Developer\/SuiteScript"}],"ga_difficulty":[{"value":92,"label":"Niveau interm\u00e9diaire"}]},"featured_image_src_large":[],"author_info":[],"comment_info":"","_links":{"self":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/2911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry"}],"about":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/types\/qa_entry"}],"version-history":[{"count":1,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/2911\/revisions"}],"predecessor-version":[{"id":4831,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/2911\/revisions\/4831"}],"wp:attachment":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/media?parent=2911"}],"wp:term":[{"taxonomy":"ga_category","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_category?post=2911"},{"taxonomy":"ga_audience","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_audience?post=2911"},{"taxonomy":"ga_difficulty","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_difficulty?post=2911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}