Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn More

View all

Sign in to view all badges

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

Avatar

Avatar
Establish
Community Manager
kautuk_sahni
Community Manager

Likes

1,162 likes

Total Posts

6,273 posts

Correct Reply

1,144 solutions
Top badges earned
Establish
Coach
Originator
Contributor 2
Contributor
View profile

Avatar
Establish
Community Manager
kautuk_sahni
Community Manager

Likes

1,162 likes

Total Posts

6,273 posts

Correct Reply

1,144 solutions
Top badges earned
Establish
Coach
Originator
Contributor 2
Contributor
View profile
kautuk_sahni
Community Manager

03-06-2021

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.

AEM AEMIBlogSeeding Experience Manager