ANS-0602 · DéVELOPPEMENT SUITESCRIPT

Comment détecter un événement « Make Copy » dans NetSuite SuiteScript au-delà de beforeLoad

Utilisez un champ masqué personnalisé et SuiteScript 2.x pour identifier les transactions créées via la fonction « Make Copy » dans les événements beforeSubmit ou afterSubmit de NetSuite.

Solution courte

Pour détecter un événement « Make Copy » dans les scripts beforeSubmit ou afterSubmit de NetSuite, ajoutez un champ de type case à cocher personnalisé et masqué à la transaction. Dans le script « beforeLoad », si le type d’événement est « copy », définissez ce champ personnalisé sur « true » dans l’enregistrement. Par la suite, les scripts « beforeSubmit » ou « afterSubmit » peuvent vérifier la valeur de ce champ personnalisé afin de déterminer si la transaction provient d’une opération de copie.

Scénario

L'événement beforeLoad de SuiteScript de NetSuite propose un type d'événement « copy », permettant aux scripts d'identifier lorsqu'un enregistrement est créé à partir d'un enregistrement existant à l'aide de la fonction « Make Copy ». Cependant, ce type d'événement spécifique n'est pas directement disponible dans les événements côté serveur suivants, tels que beforeSubmit ou afterSubmit. Les développeurs ont souvent besoin de déterminer si une transaction provient d’une opération de copie au cours de ces étapes ultérieures afin de mettre en œuvre une logique métier spécifique.

Solution

Pour déterminer si une transaction a été créée à l'aide de la fonction « Make Copy » dans les événements beforeSubmit ou afterSubmit de NetSuite, procédez comme suit :

  1. Créez un champ « case à cocher » personnalisé

    commencez par créer un champ « case à cocher » personnalisé sur le type d’enregistrement de transaction concerné (par exemple, custpage_is_make_copy). Ce champ doit être configuré en tant que champ *d'enregistrement* personnalisé dans l'interface utilisateur de NetSuite.

  2. Implémentez un script d'événement utilisateur

    développez un script d'événement utilisateur comprenant à la fois les fonctions « beforeLoad » et « beforeSubmit » (ou « afterSubmit »). La fonction beforeLoad détectera si le type d’événement actuel est « copie » et, le cas échéant, cochera la case du champ personnalisé sur l’enregistrement. La fonction beforeSubmit lira ensuite la valeur de ce champ.

javascript/** * @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    };});

Ce script définit d’abord la valeur du champ « custpage_is_make_copy » sur « true » lors d’un événement de type « copie » dans la fonction beforeLoad. Par la suite, la fonction beforeSubmit récupère la valeur de ce champ à partir de l’objet « newRecord » afin de déterminer si la transaction a été copiée.

Support expert NetSuite

Besoin d’aide pour cet enjeu NetSuite ?

Accompagnement-conseil et configuration pour Développement SuiteScript

Parler à un consultant