ANS-1152 · DéVELOPPEMENT SUITESCRIPT

Comment supprimer dynamiquement des lignes de sous-liste dans les scripts client NetSuite

Découvrez comment effacer efficacement les entrées d'une sous-liste personnalisée à l'aide des déclencheurs d'événements SuiteScript 2.x tels que PostSourcing.

Solution courte

Pour supprimer de manière fiable les lignes d’une sous-liste dans les scripts client NetSuite, implémentez la logique au sein de l’événement PostSourcing. Alors que l’événement fieldChanged peut ne pas déclencher systématiquement la suppression des lignes, l’événement PostSourcing garantit une exécution correcte pour les sous-listes personnalisées. Utilisez les fonctions SuiteScript 2.x telles que currentRecord.getLineCount() et currentRecord.removeLine() conformément aux meilleures pratiques actuelles.

Scénario

Les utilisateurs qui tentent de supprimer dynamiquement des lignes d'une sous-liste personnalisée dans des scripts client NetSuite peuvent rencontrer des problèmes liés à une exécution incohérente de la logique de suppression, en particulier lorsque celle-ci est déclenchée par un événement « fieldChanged ». Le comportement souhaité consiste à effacer toutes les lignes existantes d'une sous-liste personnalisée spécifique lorsqu'un champ associé, tel que « client », est modifié.

Solution

Pour garantir la suppression correcte des lignes de sous-liste, en particulier celles issues de sous-listes personnalisées, la logique doit être placée au sein de l’événement de script client PostSourcing. Alors que les tentatives d’utilisation de l’événement fieldChanged à cette fin peuvent ne pas donner de résultats cohérents, PostSourcing exécute de manière fiable les opérations nécessaires. L’événement PostSourcing est déclenché une fois que la valeur d’un champ a été récupérée, ce qui en fait le moment idéal pour ajuster les données associées aux sous-listes. L’exemple SuiteScript 2.x suivant montre comment effacer toutes les lignes d’une sous-liste personnalisée portant l’identifiant custpage_rebate_discount lorsque le champ « client » est récupéré ou modifié :

javascript
/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 */
define(['N/currentRecord'], function(currentRecord) {
    function postSourcing(context) {
        var rec = context.currentRecord;
        var fieldName = context.fieldId;

        if (fieldName'customer')
        {
            while (rec.getLineCount({ sublistId: 'custpage_rebate_discount' }) > 0)
            {
                rec.removeLine({
                    sublistId: 'custpage_rebate_discount',
                    line: 0
                });
            }
        }
    }
    return {
        postSourcing: postSourcing
    };
});

Ce script utilise currentRecord.getLineCount() pour déterminer le nombre de lignes et currentRecord.removeLine() pour les supprimer de manière itérative en ciblant systématiquement la première ligne (index 0) jusqu’à ce que la sous-liste soit vide.

Support expert NetSuite

Besoin d’aide pour cet enjeu NetSuite ?

Accompagnement-conseil et configuration pour Développement SuiteScript

Parler à un consultant