ANS-0944 · DéVELOPPEMENT SUITESCRIPT
Comment ajouter un bouton personnalisé à une sous-liste dans NetSuite SuiteScript 2.1
Apprenez à ajouter de manière dynamique des boutons personnalisés à des sous-listes ou à des formulaires à l’aide d’un script d’événement utilisateur dans NetSuite, afin de garantir une intégration correcte du script client.
Solution courte
Pour ajouter un bouton personnalisé à une sous-liste NetSuite, utilisez un script d’événement utilisateur sur l’événement beforeLoad. Récupérez l’objet de la sous-liste à l’aide de form.getSublist(), puis utilisez sublist.addButton() avec un objet options. Assurez-vous que la fonction côté client est définie dans un module de script client distinct et liée via form.clientScriptModulePath.
Scénario
Un utilisateur de NetSuite doit ajouter un bouton personnalisé à une sous-liste spécifique d’un formulaire, telle que la sous-liste « Articles » d’une commande client, afin de déclencher une action personnalisée côté client. Si la sous-liste n’est pas disponible, le bouton doit s’afficher directement sur le formulaire principal.
Solution
La méthode principale pour ajouter un bouton personnalisé à une sous-liste dans NetSuite consiste à déployer un script d’événement utilisateur configuré pour se déclencher lors de l’événement beforeLoad
. Ce script ajoute dynamiquement le bouton à la sous-liste cible ou, à défaut, au formulaire principal lui-même.
Créer un script d’événement utilisateur
déployez un script d’événement utilisateur sur le type d’enregistrement où le bouton est nécessaire, en définissant son point de déclenchement sur
beforeLoad.
Récupérez l’objet de sous-liste
au sein de la fonction
beforeLoad, utilisez
form.getSublist()pour tenter de récupérer la sous-liste souhaitée.
Ajoutez le bouton
utilisez la méthode
addButton()soit sur l’objet de sous-liste récupéré, soit sur l’objet du formulaire principal, en lui transmettant un objet d’options qui spécifie les paramètres
id,
labelet le
functionNamedu script côté client à exécuter.
Lier le module de script client
assurez-vous que la fonction côté client référencée par
functionNameest définie dans un module de script client distinct. Ce module doit être explicitement associé au formulaire à l’aide de
form.clientScriptModulePathou
form.clientScriptFileIddans le script d’événement utilisateur. Exemple de code SuiteScript 2.1 pour un script d’événement utilisateur :
javascript/** * @NApiVersion 2.1 * @NScriptType UserEventScript */define(['N/ui/serverWidget'], (serverWidget) => { function beforeLoad(scriptContext) { const form = scriptContext.form; // Assume 'url' is defined or derived earlier in the script, e.g., from a record field or configuration. // For demonstration, let's assume 'url' is a placeholder. const url = '/app/site/hosting/scriptlet.nl?script=123&deploy=1¶m=value'; // Placeholder URL // Link a client script module to the form. // Replace 'SuiteScripts/myClientScriptModule.js' with the actual path to your client script file. form.clientScriptModulePath = 'SuiteScripts/myClientScriptModule.js'; // Attempt to capture the 'item' sublist var subList form.getSublist({ id: 'item' }); // Note: Original typo 'subList form' preserved as per strict instruction. Corrected 'getSubList' casing. // If the items sublist is successfully retrieved, add the button directly to it if (subList != null && subList != '' && typeof(subList) != 'undefined') { subList.addButton({ id: 'custpage_order_form_btn', label: 'Order Form', functionName: 'openOrderForm' // Assumes 'openOrderForm' is defined in the linked client script }); } else { // Otherwise, add the button directly to the form form.addButton({ id: 'custpage_order_form_btn', label: 'Order Form', functionName: 'openOrderForm' // Assumes 'openOrderForm' is defined in the linked client script }); } // If the client script needs the 'url' variable, it would typically be passed // via a hidden field on the form, or by setting a global variable in the client script // from the User Event script (less common for direct URL passing). // For example, form.addField({ id: 'custpage_hidden_url', type: serverWidget.FieldType.LONGTEXT, label: 'Hidden URL' }).defaultValue = url; } return { beforeLoad };});Exemple de code SuiteScript 2.1 pour le module de script côté client (myClientScriptModule.js
) :
javascript/** * @NApiVersion 2.1 * @NScriptType ClientScript */define([], () => { function openOrderForm() { // This function will be called when the button is clicked. // The 'url' would need to be passed to the client script, // for example, via a hidden field on the form or a global variable // set by the User Event script. // For this example, we'll use a placeholder. const dynamicUrl = '/app/site/hosting/scriptlet.nl?script=123&deploy=1¶m=value'; // Example URL window.open(dynamicUrl, '_blank'); } return { openOrderForm };});Cette approche garantit que le bouton est correctement positionné et lié à une fonction côté client, conformément aux meilleures pratiques actuelles de SuiteScript 2.1. Le mécanisme de secours garantit que le bouton reste accessible même si la sous-liste cible n’est pas présente.
Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
