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 :
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.
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
