Expand my Community achievements bar.

AEM as a Cloud Service Tutorials - Create custom process step | AEM Community Blog Seeding

Avatar

Administrator

BlogImage.jpg

AEM as a Cloud Service Tutorials - Create custom process step by Adobe Docs

Abstract

Custom Process Step
The following is the complete code of the custom process step which converts and replaces the native files with the converted pdf’s.
This custom step searches for all attachments under the folder name which is provided as a process argument in the workflow.
This custom process step uses the methods of the custom DocumentCloudSDKService to create PDF’s.

package com.aemforms.doccloud.core;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.Session;

import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.adobe.aemfd.docmanager.Document;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.day.cq.search.PredicateGroup;
import com.day.cq.search.Query;
import com.day.cq.search.QueryBuilder;
import com.day.cq.search.result.Hit;
import com.day.cq.search.result.SearchResult;;

@Component(property = {
Constants.SERVICE_DESCRIPTION + "=Convert form attachments to PDF Using Document Cloud API",
Constants.SERVICE_VENDOR + "=Adobe Systems",
"process.label" + "=Convert form attachments to PDF Using Document Cloud API"
})

public class ConvertAttachmentsToPDF implements WorkflowProcess {
private static final Logger log = LoggerFactory.getLogger(ConvertAttachmentsToPDF.class);
@Reference
QueryBuilder queryBuilder;
@Reference
DocumentCloudSDKService documentCloudService;
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap processArguments) throws WorkflowException {

log.debug("The payload path is " + workItem.getWorkflowData().getPayload().toString());
log.debug("The form attachments are stored under ..." + processArguments.get("PROCESS_ARGS", "string").toString() + " folder in the payload");

Session session = workflowSession.adaptTo(Session.class);
Map<String, String> map = new HashMap<String, String> ();
map.put("path", workItem.getWorkflowData().getPayload().toString() + "/" + processArguments.get("PROCESS_ARGS", "string").toString());
map.put("type", "nt:file");
Query query = queryBuilder.createQuery(PredicateGroup.create(map), workflowSession.adaptTo(Session.class));
query.setStart(0);
query.setHitsPerPage(20);

SearchResult result = query.getResult();
log.debug("Get result hits " + result.getHits().size());
Node attachmentNode = null;
for (Hit hit: result.getHits()) {
try {
String path = hit.getPath();
log.debug("The title of the attachment is " + hit.getTitle() + " and path " + path);
String title = hit.getTitle();
title = title.substring(0, title.indexOf("."));
attachmentNode = workflowSession.adaptTo(Session.class).getNode(path + "/jcr:content");
InputStream xmlDataStream = attachmentNode.getProperty("jcr:data").getBinary().getStream();
Document convertedPDF = documentCloudService.createPDFFromInputStream(xmlDataStream, hit.getTitle());
Node nonPDFNode = session.getNode(path);
session.move(nonPDFNode.getPath(), nonPDFNode.getParent().getPath() + "/" + title + ".pdf");
Binary binary = session.getValueFactory().createBinary(convertedPDF.getInputStream());
attachmentNode.setProperty("jcr:data", binary);
log.debug("Replacing the original file with converted pdf ");
session.save();

} catch (Exception e) {
System.out.println(e.getMessage());
}
}

}

}

Read Full Blog

AEM as a Cloud Service Tutorials - Create custom process step

Q&A

Please use this thread to ask the related questions.



Kautuk Sahni
Topics

Topics help categorize Community content and increase your ability to discover relevant content.

0 Replies