Dopo aver progettato e testato il documento del canale di stampa, in genere è necessario generare il documento effettuando una chiamata REST o generare documenti di stampa utilizzando il meccanismo della cartella di controllo.
Questo articolo spiega il caso d’uso della generazione di documenti del canale di stampa utilizzando il meccanismo delle cartelle controllate.
Quando rilasci un file nella cartella controllata, viene eseguito uno script associato alla cartella controllata. Questo script è spiegato nell’articolo seguente.
Il file rilasciato nella cartella controllata ha 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 codici riportato di seguito effettua le seguenti operazioni:
Riga 1: percorso di InteractiveCommunicationsDocument
Righe 15-20: consente di ottenere l'elenco dei numeri di conto dal documento XML rilasciato nella cartella controllata
Righe 24 -25: ottenere il servizio PrintChannelService e il canale di stampa associati al documento.
Riga 30: passa il numero di account come elemento chiave al modello dati del modulo.
Righe 32-36: impostare le opzioni dati per il documento da generare.
Riga 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 accountnumber 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, attenersi alle seguenti istruzioni:
Imposta Tomcat come descritto in questo articolo. Tomcat ha il file .war che genera i dati di esempio.
Configurare il servizio come utente di sistema come descritto in questo articolo.
Verificare che l'utente del sistema disponga delle autorizzazioni di lettura per il nodo seguente. Per assegnare le autorizzazioni di accesso a amministratore utenti e cerca l’utente di sistema "data" e concedi le autorizzazioni di lettura per il nodo seguente dalla scheda autorizzazioni
Importa i seguenti pacchetti in AEM utilizzando Gestione pacchetti. Questo pacchetto contiene quanto segue:
Apri il file /etc/fd/watchfolder/scripts/PrintPDF.ecma. Verificare che il percorso del documento di comunicazione interattivo nella riga 1 punti al documento corretto da stampare
Modificare il valore di saveLocation in base alla preferenza nella riga 2
Crea il file accountnumbers.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>
Trascina il file accountnumbers.xml nella cartella C:\RenderPrintChannel\input.
I file PDF generati vengono scritti in saveLocation come specificato nello script ecma.
Se si prevede di utilizzarlo in un sistema operativo non Windows, passare a
/etc/fd/watchfolder /config/PrintChannelDocument e modifica il folderPath in base alle tue preferenze