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.
![image](https://advant.it/wp-content/uploads/2023/06/image.png)
Una volta importata la libreria, dovremo caricarla nel nostro renderedCallBack():
![image 1](https://advant.it/wp-content/uploads/2023/06/image-1.png)
Per prima cosa inizializziamo un oggetto Document. Questo oggetto avrà una struttura divisa in una o più sezioni (sections) e dovrà avere al suo interno le proprietà della nostra pagina (ad esempio: i margini):
![image 2](https://advant.it/wp-content/uploads/2023/06/image-2.png)
(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.
![image 3](https://advant.it/wp-content/uploads/2023/06/image-3.png)
Una rappresentazione della struttura potrebbe essere questa:
![image 4](https://advant.it/wp-content/uploads/2023/06/image-4.png)
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:
![image 5](https://advant.it/wp-content/uploads/2023/06/image-5.png)
Il nostro XML:
![image 6](https://advant.it/wp-content/uploads/2023/06/image-6.png)
Dentro il JS aggiungiamo la funzione per poter scaricare il documento, dichiarando prima la variabile downloadURL:
![image 7](https://advant.it/wp-content/uploads/2023/06/image-7.png)
![image 8](https://advant.it/wp-content/uploads/2023/06/image-8.png)
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!
![image 9](https://advant.it/wp-content/uploads/2023/06/image-9.png)
Adesso che già sappiamo come generare il body, possiamo aggiungere un header e footer:
![image 10](https://advant.it/wp-content/uploads/2023/06/image-10.png)
![image 11](https://advant.it/wp-content/uploads/2023/06/image-11.png)
Ottenendo questo risultato:
![image 12](https://advant.it/wp-content/uploads/2023/06/image-12.png)
![image 13](https://advant.it/wp-content/uploads/2023/06/image-13.png)
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:
![image 14](https://advant.it/wp-content/uploads/2023/06/image-14.png)
![image 15](https://advant.it/wp-content/uploads/2023/06/image-15.png)
Facendo quindi l’import dentro il nostro componente padre:
![image 16](https://advant.it/wp-content/uploads/2023/06/image-16.png)
Il metodo del componente padre diventa:
![image 17](https://advant.it/wp-content/uploads/2023/06/image-17.png)
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 |