ANS-1462 · DéVELOPPEMENT SUITESCRIPT
Comment supprimer correctement toutes les lignes d’une sous-liste NetSuite à l’aide de SuiteScript 2.x
Identifiez les pièges courants liés à la parcourue et à la suppression d’entrées de sous-listes, puis mettez en œuvre une solution SuiteScript 2.x efficace.
Solution courte
Pour supprimer de manière fiable toutes les lignes d’une sous-liste NetSuite à l’aide de SuiteScript 2.x, évitez d’effectuer une itération vers l’avant. Utilisez plutôt une boucle `while` qui supprime en continu la première ligne (index 0) jusqu’à ce que la sous-liste soit vide. Cette méthode permet d’éviter les erreurs d’indexation causées par la réindexation de la sous-liste après chaque suppression.
Scénario
Les développeurs rencontrent souvent des difficultés lorsqu’ils tentent de supprimer par programmation tous les éléments d’une sous-liste NetSuite. Une approche intuitive courante consiste à parcourir la sous-liste et à supprimer les éléments en fonction de leur index. Cependant, cette méthode entraîne fréquemment des suppressions incomplètes, car la sous-liste se réindexe après chaque suppression d’élément, ce qui fait que les itérations suivantes sautent certains éléments.
Solution
Observez les deux extraits de code ci-dessous, qui illustrent respectivement une approche incorrecte et une approche correcte pour supprimer des éléments d’une sous-liste dans SuiteScript 2.x. La différence essentielle réside dans la manière dont l’opération de suppression gère la réindexation dynamique des lignes de la sous-liste.
APPROCHE INCORRECTE
javascript
for(var i = 0; i < currentRecord.getLineCount({ sublistId: 'item' }); i++){
currentRecord.removeLine({ sublistId: 'item', line: i });
}Dans l’extrait ci-dessus, qui illustre une approche courante et intuitive, le problème survient car, dès qu’un élément de ligne est supprimé, la sous-liste est réindexée. Cet ajustement entraîne une modification du nombre de lignes et des indices des éléments restants. Par exemple, si une sous-liste comporte trois éléments (indexés 0, 1, 2) :
LIGNE 1 [index 0] LIGNE 2 [index 1] LIGNE 3 [index 2]
currentRecord.removeLine({ sublistId: 'item', line: 0 })supprime la LIGNE1.
Résultat : LIGNE 2 [index 0] LIGNE 3 [index 1]
La boucle incrémente
ià 1.currentRecord.removeLine({ sublistId: 'item', line: 1 })supprime LIGNE 3 (qui était à l’origine LIGNE 3, désormais à l’index 1).Résultat : LIGNE 2 [index 0]
La boucle s’arrête alors, car
iest désormais supérieur au nombre de lignes, laissant la LIGNE 2 intacte.APPROCHE CORRECTE
Une méthode simple et fiable pour résoudre ce problème consiste à supprimer systématiquement le premier élément (index 0) jusqu’à ce qu’il ne reste plus aucun élément dans la sous-liste. Cette approche fonctionne car la suppression du premier élément décale toujours les éléments suivants pour combler le vide, ce qui fait que le « nouveau » premier élément est toujours disponible à l’index 0.
javascript
while(currentRecord.getLineCount({ sublistId: 'item' }) > 0){
currentRecord.removeLine({ sublistId: 'item', line: 0 });
}Cela donnera lieu à l’exécution suivante :
Considérez la même sous-liste initiale :
LINE 1 [index 0] LINE 2 [index 1] LINE 3 [index 2]
currentRecord.removeLine({ sublistId: 'item', line: 0 })supprime LINE1.
Résultat : LINE 2 [index 0] LINE 3 [index 1]
currentRecord.removeLine({ sublistId: 'item', line: 0 })supprime LIGNE2.
Résultat : LIGNE 3 [index 0]
currentRecord.removeLine({ sublistId: 'item', line: 0 })supprime LIGNE3.
Résultat : (sous-liste vide)
Cela garantit que tous les éléments sont correctement supprimés sans aucune complication liée à l'indexation.
Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
