ANS-0727 · DéVELOPPEMENT SUITESCRIPT
Comment accéder à tous les champs d’un enregistrement lors des événements XEDIT de NetSuite avant la soumission
Il est essentiel de comprendre comment l'événement « xedit » de NetSuite limite l'accès direct à tous les champs d'enregistrement dans les scripts d'événement utilisateur « beforeSubmit » pour développer des scripts fiables.
Solution courte
Lors des événements « xedit » (édition en ligne, mise à jour en masse, « N/record.submitFields »), le contexte « newRecord » ne fournit que les champs modifiés. Pour accéder aux champs non modifiés dans un script « beforeSubmit », les développeurs doivent charger explicitement l’enregistrement ou utiliser « N/search » ou « N/record.lookupFields » pour récupérer leurs valeurs, car « newRecord » ne les contiendra pas.
Scénario
Lorsqu’un enregistrement NetSuite est modifié via l’édition directe de liste (DLE), une mise à jour en masse ou la fonction « N/record.submitFields », le système déclenche un événement « xedit ». Dans un script d’événement utilisateur « beforeSubmit », les développeurs peuvent être confrontés à des situations où le contexte « newRecord » ne donne pas accès à tous les champs de l’enregistrement, mais uniquement à ceux qui ont été explicitement modifiés. Cette limitation nécessite une approche spécifique pour récupérer les valeurs des champs non modifiés.
Solution
L'événement « xedit » est déclenché lorsqu'un enregistrement est modifié via l'édition directe de liste (DLE), une mise à jour en masse ou la fonction « N/record.submitFields ». Contrairement aux types d’exécution « create » ou « edit », lors d’un événement « xedit », le contexte « newRecord » (accessible via « context.newRecord » dans SuiteScript 2.0) ne donne pas accès à tous les champs de l’enregistrement. Les développeurs peuvent récupérer la liste des champs disponibles à l’aide de « context.newRecord.getFields() », qui renvoie les identifiants des champs tels que l’identifiant interne de l’enregistrement, son type et les champs spécifiques qui ont été modifiés. Les valeurs des champs présents dans ce tableau peuvent être récupérées à l’aide de « context.newRecord.getValue({fieldId: 'fieldName'}) ». Pour accéder aux valeurs des champs non inclus dans « context.newRecord » lors d’un événement « xedit », il est nécessaire de charger explicitement l’enregistrement à l’aide de « N/record.load », d’effectuer une recherche à l’aide de « N/search » ou d’utiliser « N/record.lookupFields ». Il est important de noter que les valeurs de champ récupérées via ces méthodes refléteront l’état de l’enregistrement *avant* la soumission en cours, car le script s’exécute dans le contexte « beforeSubmit ». Le code conceptuel suivant illustre comment récupérer la valeur d’un champ, en tenant compte du comportement de l’événement « xedit » dans un script d’événement utilisateur « beforeSubmit » de SuiteScript 2.0. Cet exemple part du principe que « N/record » est défini dans l’instruction « define » du script (par exemple, « define(['N/record'], function(record) { ... }) »).
Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
