PDF sì, Word no?
Grazie a Salesforce, possiamo sviluppare processi che generano documenti in PDF. Utilizzando <apex:page renderAs=”pdf”> nelle VisualForce il compito è relativamente semplice ed esiste molta documentazione online a supporto.
Invece, creare documenti Word diventa più complicato perché al momento Salesforce non ha una funzionalità standard che possiamo utilizzare. Tuttavia, per fortuna esiste un’alternativa: docx.js.
La soluzione!
Docx è una libreria che ci permette generare e modificare documenti in formato .docx con JavaScript/TypeScipt, utilizzando un API dichiarativo. Funziona sia con Node che nei Browser. Potete far riferimento alla documentazione che trovate qui: Getting Started (docx.js.org).
La libreria viene importata dentro il file di JavaScript nei Lightning Web Components.
Una volta importata la libreria, dovremo caricarla nel nostro renderedCallBack():
(N.B.: Anche se nella documentazione ufficiale non viene specificato, in Salesforce, ogni istanza di oggetti della libreria docx deve iniziare con docx.oggetto, quindi “new Paragraph({})” diventerà “new docx.Paragraph({})” )
Ogni sezione sarà divisa in children, che a loro volta saranno suddivisi in istanze di altri oggetti, ovvero i paragrafi. Successivamente, il paragrafo avrà uno o più figli, divisi anche loro in altre istanze di oggetti, per arrivare finalmente al nostro testo, indicato dall’oggetto TextRun.
Una rappresentazione della struttura potrebbe essere questa:
Adesso che abbiamo un documento con un contenuto, possiamo provare a generarlo dentro il nostro ambiente Salesforce. Per questo esempio, creeremo un tasto Create Document per il nostro LWC che potrà essere chiamato dentro una qualsiasi record page.
Il nostro HTML:
Il nostro XML:
Dentro il JS aggiungiamo la funzione per poter scaricare il documento, dichiarando prima la variabile downloadURL:
Dopo aver inserito l’LWC dentro una record page e cliccato il tasto Download Document, il nostro documento word sarà generato e pronto per essere scaricato!
Adesso che già sappiamo come generare il body, possiamo aggiungere un header e footer:
Ottenendo questo risultato:
Pro Tip
… E se dovessimo creare un documento Word molto complesso, con tabelle, footers e headers diversi a seconda della pagina? Potremmo altresì riscontrare una difficoltà, non solo a livello di leggibilità e manutenzione del codice, ma anche perché rischiamo di superare il limite di caratteri di LWC (131,072).
Una soluzione a questo punto può essere separare le nostre sezioni in Componenti figli e richiamarli dal Componente padre:
Facendo quindi l’import dentro il nostro componente padre:
Il metodo del componente padre diventa:
In questo modo, abbiamo creato un LWC più compatto, basato su componenti figli più piccoli e facilitiamo sia la leggibilità che manutenzione del codice.
Conclusione
Per concludere, tenendo in considerazione questi punti, e con un po’ di pratica, Docx.js è la miglior opzione per poter sviluppare processi che generano documenti di Word in maniera gratuita all’interno di Salesforce.
Ivan Salesforce Consultant |