{"id":2726,"date":"2017-08-21T15:15:39","date_gmt":"2017-08-21T15:15:39","guid":{"rendered":"https:\/\/answers.gurussolutions.com\/answers\/how-to-implement-custom-yes-no-dialogs-in-netsuite-save-records-2\/"},"modified":"2026-07-28T18:25:10","modified_gmt":"2026-07-28T18:25:10","slug":"comment-mettre-en-place-des-boites-de-dialogue-personnalisees-oui-non-lors-de-lenregistrement-denregistrements-dans-netsuite","status":"publish","type":"qa_entry","link":"https:\/\/answers.gurussolutions.com\/fr\/answers\/comment-mettre-en-place-des-boites-de-dialogue-personnalisees-oui-non-lors-de-lenregistrement-denregistrements-dans-netsuite\/","title":{"rendered":"Comment mettre en place des bo\u00eetes de dialogue personnalis\u00e9es \u00ab Oui\/Non \u00bb lors de l&rsquo;enregistrement d&rsquo;enregistrements dans NetSuite"},"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 g\u00e9rer les interactions asynchrones avec les utilisateurs lors de l'enregistrement d'enregistrements dans NetSuite, en tirant parti des bonnes pratiques relatives aux modules de dialogue.","ga_short_answer":"Pour impl\u00e9menter des bo\u00eetes de dialogue personnalis\u00e9es de type \u00ab Oui\/Non \u00bb lors de l\u2019enregistrement d\u2019un enregistrement NetSuite, en particulier lors de l\u2019utilisation de biblioth\u00e8ques externes, une solution courante consiste \u00e0 suspendre l\u2019ex\u00e9cution du script en renvoyant la valeur \u00ab false \u00bb depuis la m\u00e9thode `saveRecord`. Une variable globale suit l\u2019interaction de l\u2019utilisateur et, une fois la s\u00e9lection effectu\u00e9e, une action d\u2019enregistrement programmatique est d\u00e9clench\u00e9e. Pour le d\u00e9veloppement NetSuite moderne, pensez \u00e0 utiliser le module N\/ui\/dialog afin de b\u00e9n\u00e9ficier d\u2019interactions UI robustes.","ga_scenario":"Les bo\u00eetes de dialogue \u00ab Confirmer \u00bb natives de NetSuite proposent les options \u00ab OK\/Annuler \u00bb, ce qui peut ne pas correspondre aux exigences sp\u00e9cifiques en mati\u00e8re d\u2019exp\u00e9rience utilisateur pour les choix de type \u00ab Oui\/Non \u00bb. Lorsque des bo\u00eetes de dialogue personnalis\u00e9es sont introduites, en particulier au sein de la fonction `saveRecord`, la nature asynchrone de ces bo\u00eetes de dialogue peut entra\u00eener l'enregistrement de l'enregistrement avant que l'utilisateur n'ait effectu\u00e9 son choix, ce qui peut entra\u00eener un comportement ind\u00e9sirable.","ga_solution":"La difficult\u00e9 li\u00e9e \u00e0 la mise en \u0153uvre de bo\u00eetes de dialogue personnalis\u00e9es de type \u00ab Oui\/Non \u00bb dans NetSuite, en particulier au sein de la fonction saveRecord, tient au fait que les biblioth\u00e8ques de bo\u00eetes de dialogue externes ne suspendent pas syst\u00e9matiquement l\u2019ex\u00e9cution du script. Bien que le module N\/ui\/dialog de NetSuite constitue l\u2019approche recommand\u00e9e pour les interactions d\u2019interface utilisateur modernes, si une biblioth\u00e8que externe est utilis\u00e9e, une solution de contournement sp\u00e9cifique permet de g\u00e9rer les bo\u00eetes de dialogue asynchrones lors de l\u2019enregistrement des enregistrements.Bien que l\u2019importation directe de fichiers CSS externes dans une page NetSuite ne soit pas prise en charge nativement de la m\u00eame mani\u00e8re que dans le d\u00e9veloppement web standard, le CSS peut \u00eatre int\u00e9gr\u00e9 dans <a class=\"ga-interlink\" href=\"https:\/\/answers.gurussolutions.com\/fr\/answers\/best-practices-for-redirecting-to-suitelets-in-netsuite-suitescript-2-x\/\">des Suitelets ou des champs HTML personnalis\u00e9s<\/a> pour styliser les bo\u00eetes de dialogue personnalis\u00e9es. Lorsque vous envisagez d\u2019utiliser des biblioth\u00e8ques JavaScript externes pour des bo\u00eetes de dialogue personnalis\u00e9es, la compatibilit\u00e9 avec la version de jQuery de NetSuite peut varier et n\u00e9cessite des tests approfondis.Pour g\u00e9rer les bo\u00eetes de dialogue asynchrones lors de l\u2019enregistrement d\u2019un enregistrement \u00e0 l\u2019aide d\u2019une biblioth\u00e8que externe, les \u00e9tapes suivantes d\u00e9crivent un mod\u00e8le courant :\n1. Initialisez une variable globale afin de d\u00e9terminer si un utilisateur a interagi avec la bo\u00eete de dialogue personnalis\u00e9e.\n2. Au sein de la fonction `saveRecord`, si la variable globale indique qu\u2019aucune interaction n\u2019a eu lieu auparavant, g\u00e9n\u00e9rez la bo\u00eete de dialogue personnalis\u00e9e et renvoyez imm\u00e9diatement la valeur `false`. Cette action interrompt temporairement le processus d\u2019enregistrement de l\u2019enregistrement, donnant ainsi l\u2019impression \u00e0 l\u2019utilisateur que l\u2019ex\u00e9cution est en pause.\n3. Une fois que l\u2019utilisateur a effectu\u00e9 une s\u00e9lection dans la bo\u00eete de dialogue personnalis\u00e9e, mettez \u00e0 jour la variable globale pour refl\u00e9ter cette interaction. Ensuite, d\u00e9clenchez par programmation l\u2019action d\u2019enregistrement de NetSuite. Cela garantit que, lorsque la fonction `saveRecord` est r\u00e9ex\u00e9cut\u00e9e, la bo\u00eete de dialogue n\u2019est pas r\u00e9g\u00e9n\u00e9r\u00e9e et que le processus d\u2019enregistrement se poursuit normalement. Veuillez noter que la manipulation directe du DOM des boutons NetSuite standard \u00e0 cette fin n\u2019est pas prise en charge et peut entra\u00eener des modifications incompatibles. Le code suivant illustre ce mod\u00e8le \u00e0 l\u2019aide d\u2019un exemple de biblioth\u00e8que externe :\n\n```\njavascriptvar notyClicked = false;function saveRecord_generatePopup(){    if (!notyClicked) {        \/\/ generate noty popup        generateNotyAlert();        return false;    }    \/\/ your normal code on save    return true;}function generateNotyAlert(){    var n = noty({        text: 'Would you like to do something?',        type: 'alert',        dismissQueue: false,        layout: 'topCenter',        theme: 'defaultTheme',        animation: {            open: {                height: 'toggle'            },            close: {                height: 'toggle'            },            easing: 'swing',            speed: 0        },        buttons: [{            addClass: 'btn btn-primary',            text: 'Yes',            onClick: function($noty){                $noty.close();                notyClicked = true;                \/\/ Programmatically trigger NetSuite save action.                \/\/ Direct DOM manipulation of standard NetSuite buttons is not supported.            }        }, {            addClass: 'btn btn-danger',            text: 'No',            onClick: function($noty){                $noty.close();                notyClicked = true;                \/\/ Programmatically trigger NetSuite save action.                \/\/ Direct DOM manipulation of standard NetSuite buttons is not supported.            }        }]    });}\n```\n\nPour int\u00e9grer une biblioth\u00e8que externe telle que celle pr\u00e9sent\u00e9e, joignez les fichiers n\u00e9cessaires \u00e0 l\u2019enregistrement de script dans l\u2019ordre indiqu\u00e9 : *   `jquery.noty.js` *   Fichier de mise en page (par exemple, `topCenter.js`) *   Fichier de th\u00e8me (par exemple, `default.js`, souvent appel\u00e9 `defaultTheme`)","ga_source_author":"","ga_source_author_email":"","ga_date_original":"2017-08-21T11:15:39-04:00","ga_date_verified":"2026-07-05","ga_source_subject":"How do I change a javascript confirm to have Yes\/No instead of Ok\/Cancel?","ga_ans_id":"ANS-0987","ga_publish_decision":"publish_with_edits","ga_staleness_risk":"high","ga_review_priority":"spot_check","ga_tier2_verdict":"partially_outdated","ga_tier2_concerns":"The claim that 'you cannot import CSS files into a NetSuite page' is inaccurate; CSS can be embedded in Suitelets or custom HTML fields, and third-party tools exist to apply CSS.; The recommendation of the 'noty' library is not aligned with current NetSuite best practices, which now include the N\/ui\/dialog module for UI interactions.; The reliance on a hardcoded DOM element ID ('btn_multibutton_submitter') for the save button is an anti-pattern and prone to breaking due to NetSuite UI changes, as NetSuite explicitly states that customizing standard save buttons is not supported.; The statement 'works with the NetSuite jquery version' is vague, and NetSuite's jQuery version can cause compatibility issues with external libraries, making the long-term reliability of 'noty' questionable without specific testing.","ga_final_category":"SuiteScript Development","footnotes":""},"ga_category":[108,23,108],"ga_audience":[10],"ga_difficulty":[92],"class_list":["post-2726","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\/2726","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\/2726\/revisions"}],"predecessor-version":[{"id":4646,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/2726\/revisions\/4646"}],"wp:attachment":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/media?parent=2726"}],"wp:term":[{"taxonomy":"ga_category","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_category?post=2726"},{"taxonomy":"ga_audience","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_audience?post=2726"},{"taxonomy":"ga_difficulty","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_difficulty?post=2726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}