Salesforce: generare un Documento Word

Contenuti

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

Una volta importata la libreria, dovremo caricarla nel nostro renderedCallBack():

image 1
Ora possiamo iniziare a scrivere il nostro documento word.
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

(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

Una rappresentazione della struttura potrebbe essere questa:

image 4

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

Il nostro XML:

image 6

Dentro il JS aggiungiamo la funzione per poter scaricare il documento, dichiarando prima la variabile downloadURL:

image 7
image 8

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

Adesso che già sappiamo come generare il body, possiamo aggiungere un header e footer:

image 10
image 11

Ottenendo questo risultato:

image 12
image 13

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
image 15

Facendo quindi l’import dentro il nostro componente padre:

image 16

Il metodo del componente padre diventa:

image 17

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 Ivan
Salesforce Consultant

Advant fornisce servizi professionali ad alto valore nell’ambito dell’Information Technology, in cui è la grande specializzazione del singolo a garantire il successo di progetti e sistemi complessi.

Hai bisogno di una consulenza? Contattaci