{"id":4261,"date":"2017-08-21T14:59:17","date_gmt":"2017-08-21T14:59:17","guid":{"rendered":"https:\/\/answers.gurussolutions.com\/answers\/how-to-detect-a-make-copy-event-in-netsuite-suitescript-beyond-beforeload-2\/"},"modified":"2026-07-28T18:26:34","modified_gmt":"2026-07-28T18:26:34","slug":"comment-detecter-un-evenement-make-copy-dans-netsuite-suitescript-au-dela-de-beforeload","status":"publish","type":"qa_entry","link":"https:\/\/answers.gurussolutions.com\/fr\/answers\/comment-detecter-un-evenement-make-copy-dans-netsuite-suitescript-au-dela-de-beforeload\/","title":{"rendered":"Comment d\u00e9tecter un \u00e9v\u00e9nement \u00ab Make Copy \u00bb dans NetSuite SuiteScript au-del\u00e0 de beforeLoad"},"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":"Utilisez un champ masqu\u00e9 personnalis\u00e9 et SuiteScript 2.x pour identifier les transactions cr\u00e9\u00e9es via la fonction \u00ab Make Copy \u00bb dans les \u00e9v\u00e9nements beforeSubmit ou afterSubmit de NetSuite.","ga_short_answer":"Pour d\u00e9tecter un \u00e9v\u00e9nement \u00ab Make Copy \u00bb dans les scripts beforeSubmit ou afterSubmit de NetSuite, ajoutez un champ de type case \u00e0 cocher personnalis\u00e9 et masqu\u00e9 \u00e0 la transaction. Dans le script \u00ab beforeLoad \u00bb, si le type d\u2019\u00e9v\u00e9nement est \u00ab copy \u00bb, d\u00e9finissez ce champ personnalis\u00e9 sur \u00ab true \u00bb dans l\u2019enregistrement. Par la suite, les scripts \u00ab beforeSubmit \u00bb ou \u00ab afterSubmit \u00bb peuvent v\u00e9rifier la valeur de ce champ personnalis\u00e9 afin de d\u00e9terminer si la transaction provient d\u2019une op\u00e9ration de copie.","ga_scenario":"L'\u00e9v\u00e9nement beforeLoad de SuiteScript de NetSuite propose un type d'\u00e9v\u00e9nement \u00ab copy \u00bb, permettant aux scripts d'identifier lorsqu'un enregistrement est cr\u00e9\u00e9 \u00e0 partir d'un enregistrement existant \u00e0 l'aide de la fonction \u00ab Make Copy \u00bb. Cependant, ce type d'\u00e9v\u00e9nement sp\u00e9cifique n'est pas directement disponible dans les \u00e9v\u00e9nements c\u00f4t\u00e9 serveur suivants, tels que beforeSubmit ou afterSubmit. Les d\u00e9veloppeurs ont souvent besoin de d\u00e9terminer si une transaction provient d\u2019une op\u00e9ration de copie au cours de ces \u00e9tapes ult\u00e9rieures afin de mettre en \u0153uvre une logique m\u00e9tier sp\u00e9cifique.","ga_solution":"Pour d\u00e9terminer si une transaction a \u00e9t\u00e9 cr\u00e9\u00e9e \u00e0 l'aide de la fonction \u00ab Make Copy \u00bb dans les \u00e9v\u00e9nements beforeSubmit ou afterSubmit de NetSuite, proc\u00e9dez comme suit : 1.  **Cr\u00e9ez un champ \u00ab case \u00e0 cocher \u00bb personnalis\u00e9** : commencez par cr\u00e9er un champ \u00ab case \u00e0 cocher \u00bb personnalis\u00e9 sur le type d\u2019enregistrement de transaction concern\u00e9 (par exemple, custpage_is_make_copy). Ce champ doit \u00eatre configur\u00e9 en tant que champ *d'enregistrement* personnalis\u00e9 dans l'interface utilisateur de NetSuite. 2.  **Impl\u00e9mentez un script d'\u00e9v\u00e9nement utilisateur** : d\u00e9veloppez un script d'\u00e9v\u00e9nement utilisateur comprenant \u00e0 la fois les fonctions \u00ab beforeLoad \u00bb et \u00ab beforeSubmit \u00bb (ou \u00ab afterSubmit \u00bb). La fonction beforeLoad d\u00e9tectera si le type d\u2019\u00e9v\u00e9nement actuel est \u00ab copie \u00bb et, le cas \u00e9ch\u00e9ant, cochera la case du champ personnalis\u00e9 sur l\u2019enregistrement. La fonction beforeSubmit lira ensuite la valeur de ce champ.\n\n```\njavascript\/** * @NApiVersion 2.x * @NModuleScope SameAccount * @NScriptType UserEventScript *\/define(['N\/log', 'N\/ui\/serverWidget', 'N\/record'], function(log, serverWidget, record) {    function beforeLoad(scriptContext) {        var type = scriptContext.type;        var form = scriptContext.form;        var newRecord = scriptContext.newRecord;        if (type === scriptContext.UserEventType.COPY) {            log.debug('Copy Event - Setting custom information field');            \/\/ Set the value of the custom record field            newRecord.setValue({                fieldId: 'custpage_is_make_copy', \/\/ Assuming this is a custom record field created in NetSuite                value: true,                ignoreFieldChange: true            });            \/\/ Optionally, hide the field on the form if it's visible            var copyFieldOnForm = form.getField({                id: 'custpage_is_make_copy'            });            if (copyFieldOnForm) {                copyFieldOnForm.updateDisplayType({                    displayType: serverWidget.FieldDisplayType.HIDDEN                });            }        }        if (type === scriptContext.UserEventType.CREATE) {            log.debug('Create Event');        }    }    function beforeSubmit(scriptContext) {        var type = scriptContext.type;        var newRecord = scriptContext.newRecord;        var isMakeCopy = newRecord.getValue({            fieldId: 'custpage_is_make_copy'        });        if (isMakeCopy) { \/\/ Check if the checkbox is true            log.debug('Before Submit of a Copy', type);        } else {            log.debug('Before Submit of a Create', type);        }    }    return {        beforeLoad: beforeLoad,        beforeSubmit: beforeSubmit    };});\n```\n\nCe script d\u00e9finit d\u2019abord la valeur du champ \u00ab custpage_is_make_copy \u00bb sur \u00ab true \u00bb lors d\u2019un \u00e9v\u00e9nement de type \u00ab copie \u00bb dans la fonction beforeLoad. Par la suite, la fonction beforeSubmit r\u00e9cup\u00e8re la valeur de ce champ \u00e0 partir de l\u2019objet \u00ab newRecord \u00bb afin de d\u00e9terminer si la transaction a \u00e9t\u00e9 copi\u00e9e.","ga_source_author":"","ga_source_author_email":"","ga_date_original":"2017-08-21T16:59:17+02:00","ga_date_verified":"2026-07-05","ga_source_subject":"SOL0566 Tip to mimic \"copy\" event during beforeSubmit \/ afterSubmit","ga_ans_id":"ANS-0602","ga_publish_decision":"publish_with_edits","ga_staleness_risk":"high","ga_review_priority":"spot_check","ga_tier2_verdict":"partially_outdated","ga_tier2_concerns":"The code snippet uses SuiteScript 1.0 API functions (e.g., `nlapiLogExecution`, `form.addField`, `myCopyField.setDisplayType`, `nlapiSetFieldValue`, `nlapiGetFieldValue`) which are outdated. SuiteScript 2.x, the current standard, uses a modular approach with different function names and syntax (e.g., `N\/log` module for logging, `context.form.addField` with `N\/ui\/serverWidget` for adding fields, `field.updateDisplayType` for display type, `record.setValue` for setting field values, `record.getValue` for getting field values).; While SuiteScript 1.0 scripts may still function, NetSuite encourages migration to SuiteScript 2.x, and continued use of 1.0 scripts can lead to 'soft breakages' or unexpected behavior due to changes in the NetSuite UI and asynchronous loading.","ga_final_category":"SuiteScript Development","footnotes":""},"ga_category":[108,23,108],"ga_audience":[10],"ga_difficulty":[92],"class_list":["post-4261","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\/4261","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\/4261\/revisions"}],"predecessor-version":[{"id":6182,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/4261\/revisions\/6182"}],"wp:attachment":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/media?parent=4261"}],"wp:term":[{"taxonomy":"ga_category","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_category?post=4261"},{"taxonomy":"ga_audience","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_audience?post=4261"},{"taxonomy":"ga_difficulty","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_difficulty?post=4261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}