Gerar documento de comunicações interativas para canal de impressão usando o mecanismo de pasta de observação

Depois de projetar e testar o documento de canal de impressão, geralmente será necessário gerar o documento fazendo uma chamada REST ou gerando documentos de impressão usando o mecanismo de pasta de observação.

Este artigo explica o caso de uso de geração de documentos de canal de impressão usando o mecanismo de pasta monitorada.

Quando você solta um arquivo na pasta monitorada, um script associado à pasta monitorada é executado. Esse script é explicado no artigo abaixo.

O arquivo colocado na pasta monitorada tem a seguinte estrutura. O código gerará demonstrativos para todos os números de conta listados no documento XML.

<números de conta>

<accountnumber>509840</accountnumber>

<accountnumber>948576</accountnumber>

<accountnumber>398762</accountnumber>

<accountnumber>291723</accountnumber>

</accountnumbers>

A listagem de código abaixo faz o seguinte:

Linha 1 - Caminho para o InterativeCommunicationsDocument

Linhas 15-20: obtenha a lista de números de contas do documento XML lançado na pasta monitorada

Linhas 24 -25: Obtenha o PrintChannelService e o Print Channel associados ao documento.

Linha 30: transmita o número da conta como o elemento principal para o Modelo de dados do formulário.

Linhas 32-36: Defina as Opções de Dados para o Documento a ser gerado.

Linha 38: renderiza o documento.

Linhas 39-40 - Salva o documento gerado no sistema de arquivos.

O ponto de extremidade REST do Modelo de dados de formulário espera uma ID como parâmetro de entrada. essa id é mapeada para um atributo de solicitação chamado account number, como mostrado na captura de tela abaixo.

requestattribute

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"));

      }
   });
}

Para testar isto no seu sistema local, siga as seguintes instruções:

  • Configure o Tomcat conforme descrito neste artigo. Tomcat tem o arquivo war que gera os dados de amostra.

  • Configure o serviço também conhecido como usuário do sistema conforme descrito neste artigo.
    Verifique se esse usuário do sistema tem permissões de leitura no nó a seguir. Para conceder as permissões de logon a user admin e pesquisar os "dados" do usuário do sistema e conceder as permissões de leitura no seguinte nó, tabulação na guia de permissões

    • /content/dam/formsanddocuments
    • /content/dam/formsanddocuments-fdm
    • /content/forms/af
  • Importe o(s) seguinte(s) pacote(s) para o AEM usando o gerenciador de pacotes. Este pacote contém o seguinte:

  • Exemplo de documento de comunicações interativas

  • Script de pasta monitorada

  • Configuração da fonte de dados

  • Abra o arquivo /etc/fd/watchfolder/scripts/PrintPDF.ecma. Verifique se o caminho para o interativeCommunicationsDocument na linha 1 aponta para o documento correto que você deseja imprimir

  • Modifique saveLocation de acordo com sua preferência na Linha 2

  • Crie o arquivo accountnumbers.xml com o seguinte conteúdo

<accountnumbers>
<accountnumber>1</accountnumber>
<accountnumber>100</accountnumber>
<accountnumber>101</accountnumber>
<accountnumber>1009</accountnumber>
<accountnumber>10009</accountnumber>
<accountnumber>11990</accountnumber>
</accountnumbers>
  • Solte o arquivo accountnumbers.xml na pasta C:\RenderPrintChannel\input.

  • Os arquivos PDF gerados são gravados no saveLocation conforme especificado no script ecma.

NOTE
Se você planeja usá-lo em um sistema operacional que não seja Windows, navegue até
/etc/fd/watchfolder /config/PrintChannelDocument e altere o folderPath de acordo com sua preferência
recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e