Assemblare gli allegati del modulo

Questo articolo fornisce risorse per assemblare gli allegati dei moduli adattivi in un ordine specificato. Affinché questo codice di esempio funzioni, gli allegati al modulo devono essere in formato pdf. Di seguito è riportato il caso d’uso.
L’utente che compila un modulo adattivo allega uno o più documenti pdf al modulo.
All’invio del modulo, assemblare gli allegati del modulo per generare un pdf. È possibile specificare l'ordine in cui gli allegati vengono assemblati per generare il pdf finale.

Crea un componente OSGi che implementa l'interfaccia WorkflowProcess

Crea un componente OSGi che implementa l'interfaccia com.adobe.granite.workflow.exec.WorkflowProcess. Il codice di questo componente può essere associato al componente del passaggio del processo nel flusso di lavoro AEM. Il metodo execute dell'interfaccia com.adobe.granite.workflow.exec.WorkflowProcess è implementato in questo componente.

Quando un modulo adattivo viene inviato per attivare un flusso di lavoro AEM, i dati inviati vengono memorizzati nel file specificato sotto la cartella payload. Ad esempio, questo è il file di dati inviato. È necessario assemblare gli allegati specificati sotto il tag idcard e bankstatement.
dati inviati.

Ottenere i nomi dei tag

L’ordine degli allegati viene specificato come argomenti del passaggio del processo nel flusso di lavoro, come mostrato nella schermata sottostante. Qui stiamo assemblando gli allegati aggiunti alla carta d'identità campo seguito da estratti conto

fase del processo

Il frammento di codice seguente estrae i nomi degli allegati dagli argomenti del processo

String  []attachmentNames  = arg2.get("PROCESS_ARGS","string").toString().split(",");

Crea DDX dai nomi degli allegati

È quindi necessario creare un documento Document Description XML (DDX) utilizzato dal servizio Assembler per assemblare i documenti. Di seguito è riportato il DDX creato dagli argomenti del processo. L’elemento NoForms ti consente di appiattire i documenti basati su XFA prima che vengano assemblati. Gli elementi di origine PDF sono nell’ordine corretto come specificato negli argomenti del processo.

dx-xml

Crea mappa dei documenti

Quindi creiamo una mappa di documenti con il nome dell'allegato come chiave e l'allegato come valore. Il servizio Query Builder è stato utilizzato per eseguire query sugli allegati sotto il percorso del payload e creare la mappa dei documenti. Questa mappa del documento insieme al DDX è necessaria per il servizio assembler per assemblare il pdf finale.

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;
}

Utilizzare AssemblerService per assemblare i documenti

Dopo la creazione del DDX e della mappa del documento, il passaggio successivo è l'utilizzo di AssemblerService per assemblare i documenti.
Il codice seguente assembla e restituisce il pdf assemblato.

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;
    
}

Salva il pdf assemblato sotto la cartella payload

Il passaggio finale consiste nel salvare il pdf assemblato sotto la cartella payload. È quindi possibile accedere a questo pdf nei passaggi successivi del flusso di lavoro per un’ulteriore elaborazione.
Il seguente frammento di codice è stato utilizzato per salvare il file sotto la cartella payload

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

Di seguito è riportata la struttura della cartella payload dopo che gli allegati del modulo sono stati assemblati e memorizzati.

struttura del carico utile

Per far funzionare questa funzionalità sul server AEM

NOTA

Se hai abilitato logger per il bundle personalizzato, il DDX e il file assemblato vengono scritti nella cartella dell'installazione AEM.

In questa pagina