ANS-1293 · IMPRESSION, PDF ET MODèLES D’E-MAILS
Comment intégrer les données d’ancienneté des clients dans les modèles de factures PDF/HTML avancés de NetSuite ?
Ce guide propose une solution de contournement basée sur un script permettant d’extraire les informations relatives à l’ancienneté des clients à partir des modèles de formulaire de transaction de base et de les intégrer dans des modèles de factures PDF/HTML avancés personnalisés.
Solution courte
Pour ajouter un tableau d'ancienneté à un modèle de facture PDF/HTML avancé, personnalisez une mise en page HTML de formulaire de transaction de base en y intégrant un marqueur pour la balise <NLAGING>. Créez un formulaire de transaction personnalisé à l'aide de cette mise en page pour la génération HTML. Un script Suitelet extrait ensuite le tableau d'ancienneté du code HTML généré et l'intègre à votre modèle PDF/HTML avancé avant de générer le PDF final.
Scénario
Les utilisateurs de NetSuite ont souvent besoin d’intégrer les informations relatives à l’ancienneté des créances clients directement dans leurs modèles de factures PDF/HTML avancés. Bien que ces modèles offrent des possibilités de personnalisation étendues, l’accès direct à la balise ou à des champs de données similaires relatifs à l’ancienneté des créances n’est pas disponible en natif pour une insertion dynamique. Cela représente un défi pour les entreprises qui ont besoin de mises en page de factures complètes.
Solution
Personnalisez une mise en page HTML de formulaire de transaction « Basic » pour ajouter un marqueur. Bien que NetSuite recommande l’utilisation de modèles PDF/HTML avancés pour l’impression et précise que les mises en page « Basic » seront obsolètes, cette solution de contournement exploite une mise en page « Basic » pour l’extraction des données.nn
Accédez à Personnalisation > Formulaires > Mises en page HTML des formulaires de transaction, puis cliquez sur Personnaliser dans « Mise en page HTML classique des transactions ».n
Sous l’onglet Modèles, dans le champ BODY, repérez la balise . Cette balise est utilisée par NetSuite pour récupérer les données d’ancienneté à partir de la fiche client ; son mécanisme interne n’est pas accessible.n
La balise est généralement encadrée par une balise
. Identifiez ce tableau et insérez « Aging » ou toute autre chaîne unique qui servira ultérieurement dans votre script à identifier et extraire ce tableau.n
Enregistrez la mise en page.nn
Créez un formulaire de transaction personnalisé qui utilise la mise en page créée ci-dessus pour la génération HTML. Notez que la sélection de « Basic » pour le « Type d’impression » fait partie d’une méthodologie obsolète pour l’impression générale de documents ; toutefois, elle est utilisée ici pour générer le flux HTML contenant les données d’ancienneté.nn
Accédez à Personnalisation > Formulaires > Formulaires de transaction, puis cliquez sur Personnaliser sur n’importe quel formulaire de facture standard.n
Sélectionnez « Basique » pour le « Type d’impression ».n
Sélectionnez la mise en page créée à l’étape 1 pour « Mise en page HTML ».n
Enregistrez le formulaire de transaction personnalisé.nn
Téléchargez votre modèle HTML/PDF avancé pour les factures dans le Classement de fichiers.nn
Accédez à Personnalisation > Formulaires > Modèles PDF/HTML avancés.n
Cliquez sur Modifier sur le modèle de votre choix.n
En mode Code source, ajoutez un marqueur de chaîne (par exemple, « Échéancier ») à l’endroit où vous souhaitez insérer le tableau d’échéancier.n
Copiez l’intégralité du code source du modèle et créez un fichier .html contenant ce code.n
Accédez à Documents > Fichiers > Armoire de fichiers, puis téléchargez le fichier .html.nn Remarque : si le modèle contient une URL comportant un signe « & » (ampersand), celui-ci doit être remplacé par « & » afin d’éviter toute erreur. Par exemple, une balise img correspondant au logo d’une entreprise pourrait nécessiter une modification :n
n Modifiez la ligne comme suit :n
nn
Script SuiteScript. Le script suivant est fourni en SuiteScript 2.x, qui est la version recommandée par NetSuite pour les nouveaux développements. L’approche d’origine utilisait les fonctions de SuiteScript 1.0, mais cette version a été mise à jour afin de s’aligner sur les meilleures pratiques actuelles.nn
javascriptn/**n * @NApiVersion 2.xn * @NScriptType Suiteletn */ndefine(['N/render', 'N/file', 'N/record', 'N/http'], function(render, file, record, http) {nn function onRequest(context) {n if (context.request.method === 'GET') {n var invoiceId = 344150; // Invoice to printn var customFormId = 184; // Internal ID of Custom form created in Step 2n var advancedTemplateFileId = 1045754; // Internal ID of your advanced template file uploaded to File Cabinetnn try {n // Generate HTML stream from the custom transaction form (Basic layout)n var htmlFile = render.print({n entityId: invoiceId,n printMode: render.PrintMode.HTML,n formId: customFormId,n recordType: record.Type.INVOICEn });n var stream = htmlFile.getContents();nn // Slice Aging table out using the string markern stream = stream.slice(stream.indexOf('Aging'), stream.length);n var agingTable = stream.slice(stream.indexOf('<table'), stream.indexOf('</table>') + '</table>'.length);nn // Replace some properties as they are not quotedn var graytext = /class=smallgraytext/gi;n var printtext = /class=printtexttable/gi;n var alignProp = /right/gi;n agingTable = agingTable.table.replace(graytext, '');n agingTable = agingTable.replace(printtext, '');n agingTable = agingTable.replace(alignProp, '"center"');nn // Load the Advanced PDF/HTML template filen var templateFile = file.load({n id: advancedTemplateFileIdn });n var templateString = templateFile.getContents();nn // Insert Aging table into the Advanced templaten if (templateString.indexOf('Aging') !== -1) {n var temp1 = templateString.slice(0, templateString.indexOf('Aging'));n var temp2 = templateString.slice(templateString.indexOf('Aging') + 'Aging'.length, templateString.length);n templateString = temp1.concat(agingTable, temp2);n }nn // Render the final PDFn var renderer = render.create();n renderer.templateContent = templateString;n renderer.addRecord({n name: 'record',n record: record.load({n type: record.Type.INVOICE,n id: invoiceIdn })n });nn var pdfFile = renderer.renderAsPdf();nn context.response.setHeader({n name: 'Content-Type',n value: 'application/pdf'n });n context.response.writeFile(pdfFile);nn } catch (e) {n log.error({n title: 'Error printing invoice',n details: en });n context.response.write('Error: ' + e.message);n }n }n }nn return {n onRequest: onRequestn };n});nParler à un consultantSupport expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Impression, PDF et modèles d’e-mails
