此功能可讓您將提交的資料包含在電子郵件內文中。 自訂流程步驟會提取 繫結資料 調適型表單提交中的變數,並將資料填入字串型別的變數中。 然後,您可以使用此字串變數將資料插入電子郵件範本中。
以下熒幕擷圖顯示您需要傳遞至自訂流程步驟的引數
以下是引數
data.xml
— 具有已提交資料的檔案。 如果格式為json,則檔案名稱可以是data.json然後,自訂處理步驟將擷取繫結資料,並將其儲存在工作流程中定義的submittedDataString變數中
package AEMFormsProcessStep.core;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.osgi.service.component.annotations.Component;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import javax.jcr.Session;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import javax.jcr.Node;
@Component(property = {
"service.description=Save submitted Payload as String",
"process.label=Save submitted Payload as String"
})
public class SaveSubmittedDataInStringVariable implements WorkflowProcess {
private Logger log;
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException {
String submittedDataFile = ((String) metaDataMap.get("PROCESS_ARGS", (Object)
"string")).toString();
String payloadPath = workItem.getWorkflowData().getPayload().toString();
log = LoggerFactory.getLogger(SaveSubmittedDataInStringVariable.class);
String dataFilePath = payloadPath + "/" + submittedDataFile + "/jcr:content";
Session session = (Session) workflowSession.adaptTo((Class) Session.class);
Node submittedDataNode = null;
try {
submittedDataNode = session.getNode(dataFilePath);
if (submittedDataFile.endsWith("json")) {
InputStream jsonDataStream = submittedDataNode.getProperty("jcr:data").getBinary().getStream();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(jsonDataStream, "UTF-8"));
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null) {
responseStrBuilder.append(inputStr);
}
JsonObject jsonObject = new Gson().fromJson(responseStrBuilder.toString(), JsonObject.class);
JsonObject boundData = jsonObject.getAsJsonObject("afData").getAsJsonObject("afBoundData").getAsJsonObject("data");
System.out.println(jsonObject.getAsJsonObject("afData").getAsJsonObject("afBoundData").getAsJsonObject("data"));
metaDataMap = workItem.getWorkflow().getWorkflowData().getMetaDataMap();
metaDataMap.put("submittedDataString", boundData.toString());
}
if (submittedDataFile.endsWith("xml")) {
log.debug("Got xml file");
DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;
Document xmlDocument = null;
InputStream xmlDataStream = submittedDataNode.getProperty("jcr:data").getBinary().getStream();
System.out.println("Got xml file" + submittedDataNode);
XPath 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/afBoundData").evaluate(xmlDocument, XPathConstants.NODE);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(node);
transformer.transform(source, result);
String xmlString = result.getWriter().toString();
log.debug("The xml string is " + xmlString);
metaDataMap = workItem.getWorkflow().getWorkflowData().getMetaDataMap();
metaDataMap.put("submittedDataString", xmlString);
}
} catch (Exception e) {
log.debug(e.getMessage());
}
}
}