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 del modulo devono essere in formato pdf. Di seguito è riportato il caso d’uso.
L’utente che compila un modulo adattivo allega al modulo uno o più documenti PDF.
All’invio del modulo, assembla gli allegati del modulo per generare un unico PDF. È possibile specificare l'ordine di assemblaggio degli allegati per generare il PDF finale.

Crea un componente OSGi che implementa l’interfaccia WorkflowProcess

Creare un componente OSGi che implementa l'interfaccia com.adobe.granite.workflow.exec.WorkflowProcess. Il codice di questo componente può essere associato al componente della fase 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 nella cartella del payload. Ad esempio, questo è il file di dati inviato. È necessario assemblare gli allegati specificati sotto il tag idcard e bankstatements.
dati inviati .

Ottieni i nomi dei tag

L’ordine degli allegati viene specificato come argomenti delle fasi del processo nel flusso di lavoro, come illustrato nella schermata seguente. Qui stiamo assemblando gli allegati aggiunti al campo idcard seguito da bankstatement

passaggio-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 il 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 consente di appiattire i documenti basati su XFA prima che vengano assemblati. Si noti che gli elementi di origine PDF sono disposti nell'ordine corretto specificato negli argomenti del processo.

ddx-xml

Crea mappa di documenti

Viene quindi creata una mappa di documenti con il nome dell’allegato come chiave e l’allegato come valore. È stato utilizzato il servizio Query Builder per eseguire query sugli allegati nel percorso del payload e creare la mappa dei documenti. Questa mappa del documento insieme al DDX è necessaria affinché il servizio assemblatore possa 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 aver creato il DDX e la mappa del documento, il passaggio successivo consiste nell'utilizzare 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 nella cartella del payload

L’ultimo passaggio consiste nel salvare il PDF assemblato nella cartella del payload. È quindi possibile accedere a questo pdf nei passaggi successivi del flusso di lavoro per ulteriori elaborazioni.
Il seguente snippet di codice è stato utilizzato per salvare il file nella cartella del 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 delle cartelle del payload dopo l’assemblaggio e l’archiviazione degli allegati del modulo.

struttura-payload

Per utilizzare questa funzionalità sul server AEM

NOTE
Se hai attivato il logger per il bundle personalizzato, il DDX e il file assemblato vengono scritti nella cartella dell’installazione dell’AEM.
recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e