Hoofdwerkstroom maken
- Van toepassing op:
- Experience Manager 6.4
- Experience Manager 6.5
- Onderwerpen:
- Adaptieve formulieren
Gemaakt voor:
- tussenpersoon
- Ontwikkelaar
Het belangrijkste werkschema wordt teweeggebracht wanneer de gebruiker de aanvankelijke vorm (RefinanceForm) voorlegt. Hier volgt de workflow
Opslag Forms aan Ondertekenen is een stap van het douaneproces.
De motivatie voor het implementeren van een stap in een aangepast proces is het uitbreiden van een AEM-workflow. De volgende code implementeert een aangepaste processtap. De code extraheert de namen van de formulieren om te ondertekenen en geeft de verzonden formuliergegevens door aan de methode insertData
in de service SignMultipleForms. De insertData
methode neemt dan de rijen in het gegevensbestand op dat door de gegevensbron wordt geïdentificeerd aemformstutorial.
Code in deze stap voor aangepast proces verwijst naar de service SignMultipleForms
.
package com.aem.forms.signmultipleforms;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.StringWriter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import javax.jcr.Node;
import javax.jcr.Session;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import org.apache.commons.io.IOUtils;
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 org.w3c.dom.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;
@Component(property = {
Constants.SERVICE_DESCRIPTION + "=StoreFormsToSign",
Constants.SERVICE_VENDOR + "=Adobe Systems",
"process.label" + "=StoreFormsToSign"
})
public class StoreFormsToSignWorkflowStep implements WorkflowProcess {
private static final Logger log = LoggerFactory.getLogger(StoreFormsToSignWorkflowStep.class);@Reference
SignMultipleForms signMultipleForms;
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap arg2) throws WorkflowException {
String payloadPath = workItem.getWorkflowData().getPayload().toString();
log.debug("The payload in StoreFormsToSign " + workItem.getWorkflowData().getPayload().toString());
String dataFilePath = payloadPath + "/Data.xml/jcr:content";
String serverURL = arg2.get("PROCESS_ARGS", "string").toString();
Session session = workflowSession.adaptTo(Session.class);
DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;
Document xmlDocument = null;
Node xmlDataNode = null;
try {
xmlDataNode = session.getNode(dataFilePath);
InputStream xmlDataStream = xmlDataNode.getProperty("jcr:data").getBinary().getStream();
XPath xPath = javax.xml.xpath.XPathFactory.newInstance().newXPath();
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
xmlDocument = builder.parse(xmlDataStream);
org.w3c.dom.Node node = (org.w3c.dom.Node) xPath.compile("/afData/afUnboundData/data/formsToSign").evaluate(xmlDocument, javax.xml.xpath.XPathConstants.NODE);
log.debug("The form names to sign are t" + node.getTextContent());
String formNamesToSign[] = node.getTextContent().split(",");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DOMSource source = new DOMSource(xmlDocument);
StreamResult outputTarget = new StreamResult(outputStream);
TransformerFactory.newInstance().newTransformer().transform(source, outputTarget);
InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, Charset.defaultCharset());
String formData = writer.toString();
signMultipleForms.insertData(formNamesToSign, formData, serverURL, workItem, workflowSession);
}
catch(Exception e) {
log.debug(e.getMessage());
}
}
}
Assets
Het Meerdere werkschema van Forms van het Teken dat in dit artikel wordt gebruikt kan van hier worden gedownload