Dopo aver progettato e testato il documento del canale di stampa, in genere è necessario generare il documento effettuando una chiamata REST o generando documenti di stampa utilizzando il meccanismo della cartella di controllo.
Questo articolo spiega il caso d'uso per la generazione di documenti del canale di stampa utilizzando il meccanismo di cartelle controllate.
Quando rilasci un file nella cartella controllata, viene eseguito uno script associato alla cartella controllata. Questo script è spiegato nell'articolo sottostante.
Il file rilasciato nella cartella controllata presenta la seguente struttura. Il codice genera istruzioni per tutti i numeri di conto elencati nel documento XML.
<accountnumbers>
<accountnumber>509840</accountnumber>
<accountnumber>948576</accountnumber>
<accountnumber>398762</accountnumber>
<accountnumber>291723</accountnumber>
</accountnumbers>
L'elenco di codice seguente effettua le seguenti operazioni:
Linea 1 - Percorso del documento InteractiveCommunications
Linee 15-20: Ottenere l'elenco dei numeri di account dal documento XML rilasciato nella cartella controllata
Linee 24 -25: Ottenere i canali PrintChannelService e Print Channel associati al documento.
Linea 30: Passa il numero di account come elemento chiave al modello dati del modulo.
Linee 32-36: Impostare le opzioni dati per il documento da generare.
Linea 38: Eseguire il rendering del documento.
Righe 39-40 - Salva il documento generato nel file system.
L’endpoint REST del modello dati modulo prevede un ID come parametro di input. questo id è mappato su un attributo di richiesta denominato account number come mostrato nella schermata seguente.
var interactiveCommunicationsDocument = "/content/forms/af/retirementstatementprint/channels/print/";
var saveLocation = new Packages.java.io.File("c:\\scrap\\loadtesting");
if(!saveLocation.exists())
{
saveLocation.mkdirs();
}
var inputMap = processorContext.getInputMap();
var entry = inputMap.entrySet().iterator().next();
var inputDocument = inputMap.get(entry.getKey());
var aemDemoListings = sling.getService(Packages.com.mergeandfuse.getserviceuserresolver.GetResolver);
var resourceResolver = aemDemoListings.getServiceResolver();
var resourceResolverHelper = sling.getService(Packages.com.adobe.granite.resourceresolverhelper.ResourceResolverHelper);
var dbFactory = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
var dBuilder = dbFactory.newDocumentBuilder();
var xmlDoc = dBuilder.parse(inputDocument.getInputStream());
var nList = xmlDoc.getElementsByTagName("accountnumber");
for(var i=0;i<nList.getLength();i++)
{
var accountnumber = nList.item(i).getTextContent();
resourceResolverHelper.callWith(resourceResolver, {call: function()
{
var printChannelService = sling.getService(Packages.com.adobe.fd.ccm.channels.print.api.service.PrintChannelService);
var printChannel = printChannelService.getPrintChannel(interactiveCommunicationsDocument);
var options = new Packages.com.adobe.fd.ccm.channels.print.api.model.PrintChannelRenderOptions();
options.setMergeDataOnServer(true);
options.setRenderInteractive(false);
var map = new Packages.java.util.HashMap();
map.put("accountnumber",accountnumber);
// Required Data Options
var dataOptions = new Packages.com.adobe.forms.common.service.DataOptions();
dataOptions.setServiceName(printChannel.getPrefillService());
dataOptions.setExtras(map);
dataOptions.setContentType(Packages.com.adobe.forms.common.service.ContentType.JSON);
dataOptions.setFormResource(resourceResolver.resolve(interactiveCommunicationsDocument));
options.setDataOptions(dataOptions);
var printDocument = printChannel.render(options);
var statement = new Packages.com.adobe.aemfd.docmanager.Document(printDocument.getInputStream());
statement.copyToFile(new Packages.java.io.File(saveLocation+"\\"+accountnumber+".pdf"));
}
});
}
Per eseguire il test sul sistema locale, segui le seguenti istruzioni:
Imposta Tomcat come descritto in questo articolo. Tomcat ha il file war che genera i dati del campione.
Imposta il servizio aka utente del sistema come descritto in questo articolo.
Assicurati che questo utente di sistema abbia le autorizzazioni di lettura sul nodo seguente. Per assegnare le autorizzazioni di accesso a amministratore utente e cerca l'utente di sistema "dati" e concedi le autorizzazioni di lettura sul nodo seguente tasto di tabulazione sulla scheda autorizzazioni
Importa i seguenti pacchetti in AEM utilizzando il gestore pacchetti. Questo pacchetto contiene quanto segue:
Apri il file /etc/fd/watchfolder/scripts/PrintPDF.ecma . Assicurarsi che il percorso del documento interattivoCommunicationsDocument nella riga 1 indichi il documento corretto che si desidera stampare
Modifica saveLocation in base alle tue preferenze sulla Linea 2
Crea il file accounts.xml con il seguente contenuto
<accountnumbers>
<accountnumber>1</accountnumber>
<accountnumber>100</accountnumber>
<accountnumber>101</accountnumber>
<accountnumber>1009</accountnumber>
<accountnumber>10009</accountnumber>
<accountnumber>11990</accountnumber>
</accountnumbers>
Rilascia il file accounts.number.xml nella cartella C:\RenderPrintChannel\input folder.
I file PDF generati vengono scritti in saveLocation come specificato nello script ecma.
Se si prevede di utilizzarlo su un sistema operativo non Windows, passare a
/etc/fd/watchfolder /config/PrintChannelDocument e cambia folderPath secondo le tue preferenze