Zusammenführen von Formularanlagen

Letzte Aktualisierung: 2024-01-29
  • Themen:
  • Assembler
    Weitere Informationen zu diesem Thema
  • Erstellt für:
  • Experienced
    Developer

Dieser Artikel stellt Assets bereit, um adaptive Formularanlagen in einer angegebenen Reihenfolge zusammenzuführen. Die Formularanhänge müssen im PDF-Format vorliegen, damit dieser Beispiel-Code funktioniert. Im Folgenden finden Sie den Anwendungsfall.
Benutzerin bzw. Benutzer, die bzw. der ein adaptives Formular ausfüllt, hängt ein oder mehrere PDF-Dokumente an das Formular an.
Bei der Übermittlung des Formulars werden die Anhänge des Formulars zu einer PDF-Datei zusammengefügt. Sie können die Reihenfolge angeben, in der die Anlagen zusammengestellt werden, um das endgültige PDF zu generieren.

Erstellen einer OSGi-Komponente, die die WorkflowProcess-Schnittstelle implementiert

Erstellen Sie eine OSGi-Komponente, die die com.adobe.granite.workflow.exec.WorkflowProcess-Schnittstelle implementiert. Der Code in dieser Komponente kann mit der Prozessschrittkomponente im AEM-Workflow verknüpft werden. Die Ausführungsmethode der com.adobe.granite.workflow.exec.WorkflowProcess-Schnittstelle wird in dieser Komponente implementiert.

Wenn ein adaptives Formular übermittelt wird, um einen AEM-Workflow auszulösen, werden die übermittelten Daten in der angegebenen Datei im Payload-Ordner gespeichert. Dies ist beispielsweise die gesendete Datendatei. Wir müssen die Anlagen zusammenführen, die unter den Tags „idcard und „bankstatement“ angegeben sind.
submitted-data.

Abrufen der Tag-Namen

Die Reihenfolge der Anlagen wird als Prozessschrittargumente im Workflow angegeben, wie im Screenshot unten dargestellt. Hier stellen wir die Anlagen zusammen, die dem Feld „idcard“ hinzugefügt werden, gefolgt von „bankstatements“

process-step

Das folgende Codesnippet extrahiert die Anlagennamen aus den Prozessargumenten:

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

Erstellen von DDX aus den Anlagennamen

Anschließend müssen wir das Dokument Document Description XML (DDX) erstellen, das vom Assembler-Dienst zum Zusammenstellen von Dokumenten verwendet wird. Im Folgenden finden Sie die DDX, die aus den Prozessargumenten erstellt wurde. Mit dem Element „NoForms“ können Sie XFA-basierte Dokumente verkleinern, bevor sie zusammengestellt werden. Beachten Sie, dass sich die PDF-Quellelemente in der richtigen Reihenfolge befinden, wie in den Prozessargumenten angegeben.

ddx-xml

Erstellen von Dokumentzuordnungen

Anschließend erstellen wir eine Zuordnung von Dokumenten mit dem Anlagennamen als Schlüssel und der Anlage als Wert. Der Query Builder-Dienst wurde verwendet, um die Anlagen unter dem Payload-Pfad abzufragen und die Zuordnung der Dokumente zu erstellen. Diese Dokumentzuordnung zusammen mit dem DDX ist erforderlich, damit der Assembler-Dienst das endgültige PDF zusammenstellen kann.

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

Verwenden des AssemblerService zum Zusammenführen der Dokumente

Nachdem das DDX und die Dokumentzuordnung erstellt wurden, ist der nächste Schritt die Verwendung des AssemblerService zum Zusammenführen der Dokumente.
Der folgende Code setzt die Datei zusammen und gibt das zusammengesetzte PDF zurück.

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;

}

Speichern der zusammengestellten PDF-Datei im Payload-Ordner

Der letzte Schritt besteht darin, die zusammengestellte PDF-Datei im Payload-Ordner zu speichern. Auf diese PDF-Datei kann dann in den nachfolgenden Schritten des Workflows zur weiteren Bearbeitung zugegriffen werden.
Das folgende Codesnippet wurde verwendet, um die Datei im Payload-Ordner zu speichern:

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

Im Folgenden finden Sie die Struktur des Payload-Ordners, nachdem die Formularanlagen zusammengestellt und gespeichert wurden.

payload-structure

Sie können diese Funktion wie folgt auf Ihrem AEM-Server verwenden:

HINWEIS

Wenn Sie die Protokollfunktion für das benutzerdefinierte Bundle aktiviert haben, werden DDX und die zusammengestellte Datei in den Ordner Ihrer AEM-Installation geschrieben.

Auf dieser Seite