{"id":2683,"date":"2017-08-21T15:29:58","date_gmt":"2017-08-21T15:29:58","guid":{"rendered":"https:\/\/answers.gurussolutions.com\/answers\/how-to-add-a-custom-button-to-a-sublist-in-netsuite-suitescript-2-1-2\/"},"modified":"2026-07-28T18:25:07","modified_gmt":"2026-07-28T18:25:07","slug":"comment-ajouter-un-bouton-personnalise-a-une-sous-liste-dans-netsuite-suitescript-2-1","status":"publish","type":"qa_entry","link":"https:\/\/answers.gurussolutions.com\/fr\/answers\/comment-ajouter-un-bouton-personnalise-a-une-sous-liste-dans-netsuite-suitescript-2-1\/","title":{"rendered":"Comment ajouter un bouton personnalis\u00e9 \u00e0 une sous-liste dans NetSuite SuiteScript 2.1"},"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":"Apprenez \u00e0 ajouter de mani\u00e8re dynamique des boutons personnalis\u00e9s \u00e0 des sous-listes ou \u00e0 des formulaires \u00e0 l\u2019aide d\u2019un script d\u2019\u00e9v\u00e9nement utilisateur dans NetSuite, afin de garantir une int\u00e9gration correcte du script client.","ga_short_answer":"Pour ajouter un bouton personnalis\u00e9 \u00e0 une sous-liste NetSuite, utilisez un script d\u2019\u00e9v\u00e9nement utilisateur sur l\u2019\u00e9v\u00e9nement beforeLoad. R\u00e9cup\u00e9rez l\u2019objet de la sous-liste \u00e0 l\u2019aide de form.getSublist(), puis utilisez sublist.addButton() avec un objet options. Assurez-vous que la fonction c\u00f4t\u00e9 client est d\u00e9finie dans un module de script client distinct et li\u00e9e via form.clientScriptModulePath.","ga_scenario":"Un utilisateur de NetSuite doit ajouter un bouton personnalis\u00e9 \u00e0 une sous-liste sp\u00e9cifique d\u2019un formulaire, telle que la sous-liste \u00ab Articles \u00bb d\u2019une commande client, afin de d\u00e9clencher une action personnalis\u00e9e c\u00f4t\u00e9 client. Si la sous-liste n\u2019est pas disponible, le bouton doit s\u2019afficher directement sur le formulaire principal.","ga_solution":"La m\u00e9thode principale pour ajouter un bouton personnalis\u00e9 \u00e0 une sous-liste dans NetSuite consiste \u00e0 d\u00e9ployer un script d\u2019\u00e9v\u00e9nement utilisateur configur\u00e9 pour se d\u00e9clencher lors de l\u2019\u00e9v\u00e9nement `beforeLoad`\n\n. Ce script ajoute dynamiquement le bouton \u00e0 la sous-liste cible ou, \u00e0 d\u00e9faut, au formulaire principal lui-m\u00eame.1.  **Cr\u00e9er un script d\u2019\u00e9v\u00e9nement utilisateur** : d\u00e9ployez un script d\u2019\u00e9v\u00e9nement utilisateur sur le type d\u2019enregistrement o\u00f9 le bouton est n\u00e9cessaire, en d\u00e9finissant son point de d\u00e9clenchement sur `beforeLoad`\n\n.2.  **R\u00e9cup\u00e9rez l\u2019objet de sous-liste** : au sein de la fonction `beforeLoad`\n\n, utilisez `form.getSublist()`\n\npour tenter de r\u00e9cup\u00e9rer la sous-liste souhait\u00e9e.3.  **Ajoutez le bouton** : utilisez la m\u00e9thode `addButton()`\n\nsoit sur l\u2019objet de sous-liste r\u00e9cup\u00e9r\u00e9, soit sur l\u2019objet du formulaire principal, en lui transmettant un objet d\u2019options qui sp\u00e9cifie les param\u00e8tres `id`\n\n, `label`\n\net le `functionName`\n\ndu script c\u00f4t\u00e9 client \u00e0 ex\u00e9cuter.4.  **Lier le module de script client** : assurez-vous que la fonction c\u00f4t\u00e9 client r\u00e9f\u00e9renc\u00e9e par `functionName`\n\nest d\u00e9finie dans un module de script client distinct. Ce module doit \u00eatre explicitement associ\u00e9 au formulaire \u00e0 l\u2019aide de `form.clientScriptModulePath`\n\nou `form.clientScriptFileId`\n\ndans le script d\u2019\u00e9v\u00e9nement utilisateur. Exemple de code SuiteScript 2.1 pour un script d\u2019\u00e9v\u00e9nement utilisateur :\n\n```\njavascript\/** * @NApiVersion 2.1 * @NScriptType UserEventScript *\/define(['N\/ui\/serverWidget'], (serverWidget) => {    function beforeLoad(scriptContext) {        const form = scriptContext.form;        \/\/ Assume 'url' is defined or derived earlier in the script, e.g., from a record field or configuration.        \/\/ For demonstration, let's assume 'url' is a placeholder.        const url = '\/app\/site\/hosting\/scriptlet.nl?script=123&deploy=1\u00b6m=value'; \/\/ Placeholder URL        \/\/ Link a client script module to the form.        \/\/ Replace 'SuiteScripts\/myClientScriptModule.js' with the actual path to your client script file.        form.clientScriptModulePath = 'SuiteScripts\/myClientScriptModule.js';        \/\/ Attempt to capture the 'item' sublist        var subList form.getSublist({ id: 'item' }); \/\/ Note: Original typo 'subList  form' preserved as per strict instruction. Corrected 'getSubList' casing.        \/\/ If the items sublist is successfully retrieved, add the button directly to it        if (subList != null && subList != '' && typeof(subList) != 'undefined') {            subList.addButton({                id: 'custpage_order_form_btn',                label: 'Order Form',                functionName: 'openOrderForm' \/\/ Assumes 'openOrderForm' is defined in the linked client script            });        } else {            \/\/ Otherwise, add the button directly to the form            form.addButton({                id: 'custpage_order_form_btn',                label: 'Order Form',                functionName: 'openOrderForm' \/\/ Assumes 'openOrderForm' is defined in the linked client script            });        }        \/\/ If the client script needs the 'url' variable, it would typically be passed        \/\/ via a hidden field on the form, or by setting a global variable in the client script        \/\/ from the User Event script (less common for direct URL passing).        \/\/ For example, form.addField({ id: 'custpage_hidden_url', type: serverWidget.FieldType.LONGTEXT, label: 'Hidden URL' }).defaultValue = url;    }    return { beforeLoad };});\n```\n\nExemple de code SuiteScript 2.1 pour le module de script c\u00f4t\u00e9 client (`myClientScriptModule.js`\n\n) :\n\n```\njavascript\/** * @NApiVersion 2.1 * @NScriptType ClientScript *\/define([], () => {    function openOrderForm() {        \/\/ This function will be called when the button is clicked.        \/\/ The 'url' would need to be passed to the client script,        \/\/ for example, via a hidden field on the form or a global variable        \/\/ set by the User Event script.        \/\/ For this example, we'll use a placeholder.        const dynamicUrl = '\/app\/site\/hosting\/scriptlet.nl?script=123&deploy=1\u00b6m=value'; \/\/ Example URL        window.open(dynamicUrl, '_blank');    }    return { openOrderForm };});\n```\n\nCette approche garantit que le bouton est correctement positionn\u00e9 et li\u00e9 \u00e0 une fonction c\u00f4t\u00e9 client, conform\u00e9ment aux meilleures pratiques actuelles de SuiteScript 2.1. Le m\u00e9canisme de secours garantit que le bouton reste accessible m\u00eame si la sous-liste cible n\u2019est pas pr\u00e9sente.","ga_source_author":"","ga_source_author_email":"","ga_date_original":"2017-08-21T17:29:58+02:00","ga_date_verified":"2026-07-05","ga_source_subject":"How to add a custom button under a sublist","ga_ans_id":"ANS-0944","ga_publish_decision":"publish_with_edits","ga_staleness_risk":"high","ga_review_priority":"spot_check","ga_tier2_verdict":"partially_outdated","ga_tier2_concerns":"The `form.getSubList()` function name casing is `getSublist()` in current SuiteScript 2.x\/2.1 documentation.; The `form.getSublist()` and `subList.addButton()` functions now require an options object as a parameter, not positional arguments.; The `functionName` parameter for `addButton` expects the name of a function defined in a separate client script module, which must be explicitly attached to the form using `form.clientScriptModulePath` or `form.clientScriptFileId`. The original answer's inline function string is not the current best practice or documented syntax for SuiteScript 2.x\/2.1.","ga_final_category":"SuiteScript Development","footnotes":""},"ga_category":[108,23,108],"ga_audience":[10],"ga_difficulty":[92],"class_list":["post-2683","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\/2683","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\/2683\/revisions"}],"predecessor-version":[{"id":4603,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/2683\/revisions\/4603"}],"wp:attachment":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/media?parent=2683"}],"wp:term":[{"taxonomy":"ga_category","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_category?post=2683"},{"taxonomy":"ga_audience","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_audience?post=2683"},{"taxonomy":"ga_difficulty","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_difficulty?post=2683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}