ANS-1424 · IMPRESSION, PDF ET MODèLES D’E-MAILS
Comment supprimer les balises de quantité du fichier PDF « Advanced Inventory Detail » de NetSuite
Découvrez comment utiliser la fonction « replace » de FreeMarker avec des expressions régulières pour nettoyer les champs de détails des stocks sur les bordereaux d'expédition NetSuite.
Solution courte
Pour supprimer les balises de quantité telles que (99) des champs de détails d'inventaire multilignes dans les modèles PDF avancés de NetSuite, utilisez la fonction de remplacement de FreeMarker avec une expression régulière. La syntaxe correcte, tenant compte du traitement spécifique des barres obliques inversées et des sauts de ligne par FreeMarker dans les expressions régulières, est la suivante : ${tranline.inventorydetail?replace("(d*)"," ","r")}. Cette expression cible et supprime les quantités numériques entre parenthèses.
Scénario
Les modèles PDF avancés de NetSuite utilisent souvent les détails d’inventaire issus des « Item Fulfillments » pour générer des bordereaux d’expédition imprimables. Une exigence courante consiste à afficher les numéros de compartiment sans les quantités associées, qui peuvent apparaître entre parenthèses (par exemple, AB1234(99)). Le défi consiste à supprimer ces indications de quantité du champ de détails de stock multiligne directement dans le modèle PDF sans recourir à des scripts, afin d’obtenir un résultat épuré tel que « AB1234 ».
Solution
Oui, FreeMarker prend en charge l’utilisation d’expressions régulières au sein de sa fonction replace
. L’utilisation standard de la fonction replace
, qui ne fonctionne qu’avec des correspondances exactes de chaînes de caractères, est illustrée ci-dessous :
${tranline.inventorydetail?replace("car", "bulldozer")}Cela donnerait : « this is a bulldozer abulldozerus »
En ajoutant l’indicateur « r » en tant que troisième paramètre facultatif, vous indiquez au compilateur FreeMarker de traiter la chaîne de recherche comme une expression régulière. Pour supprimer les parenthèses et les caractères qu’elles renferment, une première tentative d’expression régulière pourrait être la suivante :
${tranline.inventorydetail?replace("(.*)"," ","r")}Cependant, ce code d’expression régulière standard provoque un plantage du compilateur FreeMarker en raison de la manière dont il interprète les barres obliques inversées. Le caractère barre oblique inversée doit être doublé :
${tranline.inventorydetail?replace("(.*)"," ","r")}Il faut également tenir compte du fait que la séquence .*
, par défaut, ne devrait pas prendre en compte les caractères de saut de ligne, mais que dans FreeMarker, elle le fait. Pour cibler spécifiquement les chiffres situés entre parenthèses et éviter les correspondances involontaires entre les lignes, .*
doit être remplacé par d*
. La solution finale, qui fonctionne, est la suivante :
${tranline.inventorydetail?replace("(d*)"," ","r")}Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Impression, PDF et modèles d’e-mails
