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.

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

    .

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

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

    , label

    et le functionName

    du script côté client à exécuter.

  4. Lier le module de script client

    assurez-vous que la fonction côté client référencée par functionName

    est définie dans un module de script client distinct. Ce module doit être explicitement associé au formulaire à l’aide de form.clientScriptModulePath

    ou form.clientScriptFileId

    dans 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

Parler à un consultant