Montagem de anexos de formulário
Este artigo fornece ativos para montar anexos de formulário adaptáveis em uma ordem especificada. Os anexos de formulário precisam estar em formato pdf para que esse código de exemplo funcione. Veja a seguir o caso de uso.
O usuário que preenche um formulário adaptável anexa um ou mais documentos pdf ao formulário.
No envio do formulário, monte os anexos do formulário para gerar um pdf. Você pode especificar a ordem na qual os anexos são montados para gerar o pdf final.
Criar componente OSGi que implementa a interface WorkflowProcess
Crie um componente OSGi que implemente a interface com.adobe.granite.workflow.exec.WorkflowProcess. O código neste componente pode ser associado ao componente da etapa do processo no fluxo de trabalho do AEM. O método execute da interface com.adobe.granite.workflow.exec.WorkflowProcess é implementado neste componente.
Quando um formulário adaptável é enviado para acionar um fluxo de trabalho do AEM, os dados enviados são armazenados no arquivo especificado na pasta de carga. Por exemplo, este é o arquivo de dados enviado. Precisamos montar os anexos especificados na etiqueta de cartão e extrato bancário.
.
Obter os nomes das tags
A ordem dos anexos é especificada como argumentos de etapa do processo no fluxo de trabalho, conforme mostrado na captura de tela abaixo. Aqui, estamos montando os anexos adicionados ao campo descartado, seguidos pelos demonstrativos bancários
O trecho de código a seguir extrai os nomes dos anexos dos argumentos do processo
String []attachmentNames = arg2.get("PROCESS_ARGS","string").toString().split(",");
Criar DDX a partir dos nomes dos anexos
Depois, é necessário criar Descrição do documento XML (DDX) documento que é usado pelo serviço Assembler para montar documentos. Veja a seguir o DDX que foi criado a partir dos argumentos do processo. O elemento NoForms permite nivelar documentos XFA antes de serem montados. Observe que os elementos de origem de PDF estão na ordem correta, conforme especificado nos argumentos do processo.
Criar mapa de documentos
Em seguida, criamos um mapa de documentos com o nome do anexo como a chave e o anexo como o valor. O serviço Query Builder foi usado para consultar os anexos no caminho de carga e criar o mapa de documentos. Este mapa de documento junto com o DDX é necessário para o serviço de montagem montar o pdf final.
public Map<String, Object> createMapOfDocuments(String payloadPath,WorkflowSession workflowSession )
{
Map<String, String> queryMap = new HashMap<String, String>();
Map<String,Object>mapOfDocuments = new HashMap<String,Object>();
queryMap.put("type", "nt:file");
queryMap.put("path",payloadPath);
Query query = queryBuilder.createQuery(PredicateGroup.create(queryMap),workflowSession.adaptTo(Session.class));
query.setStart(0);
query.setHitsPerPage(30);
SearchResult result = query.getResult();
log.debug("Get result hits "+result.getHits().size());
for (Hit hit : result.getHits()) {
try {
String path = hit.getPath();
log.debug("The title "+hit.getTitle()+" path "+path);
if(hit.getTitle().endsWith("pdf"))
{
com.adobe.aemfd.docmanager.Document attachmentDocument = new com.adobe.aemfd.docmanager.Document(path);
mapOfDocuments.put(hit.getTitle(),attachmentDocument);
log.debug("@@@@Added to map@@@@@ "+hit.getTitle());
}
}
catch (Exception e)
{
log.debug(e.getMessage());
}
}
return mapOfDocuments;
}
Usar AssemblerService para reunir os documentos
Depois que o DDX e o mapa do documento forem criados, a próxima etapa será usar o AssemblerService para montar os documentos.
O código a seguir monta e retorna o pdf montado.
private com.adobe.aemfd.docmanager.Document assembleDocuments(Map<String, Object> mapOfDocuments, com.adobe.aemfd.docmanager.Document ddxDocument)
{
AssemblerOptionSpec aoSpec = new AssemblerOptionSpec();
aoSpec.setFailOnError(true);
AssemblerResult ar = null;
try
{
ar = assemblerService.invoke(ddxDocument, mapOfDocuments, aoSpec);
return (com.adobe.aemfd.docmanager.Document) ar.getDocuments().get("GeneratedDocument.pdf");
}
catch (OperationException e)
{
log.debug(e.getMessage());
}
return null;
}
Salvar o PDF montado na pasta de carga útil
A etapa final é salvar o pdf montado na pasta de carga útil. Esse pdf pode ser acessado nas etapas subsequentes do fluxo de trabalho para processamento adicional.
O trecho de código a seguir foi usado para salvar o arquivo na pasta de carga útil
Session session = workflowSession.adaptTo(Session.class);
javax.jcr.Node payloadNode = workflowSession.adaptTo(Session.class).getNode(workItem.getWorkflowData().getPayload().toString());
log.debug("The payload Path is "+payloadNode.getPath());
javax.jcr.Node assembledPDFNode = payloadNode.addNode("assembled-pdf.pdf", "nt:file");
javax.jcr.Node jcrContentNode = assembledPDFNode.addNode("jcr:content", "nt:resource");
Binary binary = session.getValueFactory().createBinary(assembledDocument.getInputStream());
jcrContentNode.setProperty("jcr:data", binary);
log.debug("Saved !!!!!!");
session.save();
Veja a seguir a estrutura da pasta de carga útil após os anexos de formulário serem montados e armazenados.
Para que esse recurso funcione no servidor AEM
- Baixe o Montar formulário de anexos de formulário ao seu sistema local.
- Importe o formulário doForms E Documentos página.
- Baixar fluxo de trabalho e importe para AEM usando o gerenciador de pacotes.
- Baixe o pacote personalizado
- Implante e inicie o pacote usando o console da web
- Aponte seu navegador para Formulário MontarAnexos
- Adicionar um anexo no documento de ID e alguns documentos em pdf à seção de extratos bancários
- Enviar o formulário para acionar o fluxo de trabalho
- Verifique o fluxo de trabalho pasta de carga no crx para o pdf montado