自定义分配任务通知

“分配任务”组件用于将任务分配给工作流参与者。 在将任务分配给用户或群组时,会向定义的用户或群组成员发送电子邮件通知。
此电子邮件通知通常包含与任务相关的动态数据。 使用系统生成的元数据属性获取此动态数据。
要在电子邮件通知中包含来自已提交表单数据的值,我们需要创建自定义元数据属性,然后在电子邮件模板中使用这些自定义元数据属性

创建自定义元数据属性

推荐的方法是创建一个OSGI组件,以实施WorkitemUserMetadataService的getUserMetadata方法

以下代码创建4个元数据属性(firstNamelastNamereason​和​amountRequested),并从提交的数据中设置其值。 例如,元数据属性​firstName​的值被设置为从提交的数据中名为firstName的元素的值。 以下代码假定自适应表单提交的数据为xml格式。 基于JSON模式或表单数据模型的自适应Forms以JSON格式生成数据。

package com.aemforms.workitemuserservice.core;

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

import javax.jcr.Session;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;

import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.*;


import com.adobe.fd.workspace.service.external.WorkitemUserMetadataService;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.metadata.MetaDataMap;
@Component(property={Constants.SERVICE_DESCRIPTION+"=A sample implementation of a user metadata service.",
Constants.SERVICE_VENDOR+"=Adobe Systems",
"process.label"+"=Sample Custom Metadata Service"})


public class WorkItemUserServiceImpl implements WorkitemUserMetadataService {
private static final Logger log = LoggerFactory.getLogger(WorkItemUserServiceImpl.class);

@Override
public Map<String, String> getUserMetadata(WorkItem workItem, WorkflowSession workflowSession,MetaDataMap metadataMap)
{
HashMap<String, String> customMetadataMap = new HashMap<String, String>();
String payloadPath = workItem.getWorkflowData().getPayload().toString();
String dataFilePath = payloadPath + "/Data.xml/jcr:content";
Session session = workflowSession.adaptTo(Session.class);
DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;
Document xmlDocument = null;
javax.jcr.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);
    Node firstNameNode = (org.w3c.dom.Node) xPath.compile("afData/afUnboundData/data/firstName")
            .evaluate(xmlDocument, javax.xml.xpath.XPathConstants.NODE);
    log.debug("The value of first name element  is " + firstNameNode.getTextContent());
    Node lastNameNode = (org.w3c.dom.Node) xPath.compile("afData/afUnboundData/data/lastName")
            .evaluate(xmlDocument, javax.xml.xpath.XPathConstants.NODE);
    Node amountRequested = (org.w3c.dom.Node) xPath
            .compile("afData/afUnboundData/data/amountRequested")
            .evaluate(xmlDocument, javax.xml.xpath.XPathConstants.NODE);
    Node reason = (org.w3c.dom.Node) xPath.compile("afData/afUnboundData/data/reason")
            .evaluate(xmlDocument, javax.xml.xpath.XPathConstants.NODE);
    customMetadataMap.put("firstName", firstNameNode.getTextContent());
    customMetadataMap.put("lastName", lastNameNode.getTextContent());
    customMetadataMap.put("amountRequested", amountRequested.getTextContent());
    customMetadataMap.put("reason", reason.getTextContent());
    log.debug("Created  " + customMetadataMap.size() + " metadata  properties");

}
catch (Exception e)
{
    log.debug(e.getMessage());
}
return customMetadataMap;
}

}

在任务通知电子邮件模板中使用自定义元数据属性

在电子邮件模板中,您可以使用以下语法来包含元数据属性,其中amountRequested是元数据属性${amountRequested}

配置分配任务以使用自定义元数据属性

将OSGi组件构建并部署到AEM服务器后,将“分配任务”组件配置为使用自定义元数据属性,如下所示。

任务通知

启用自定义元数据属性的使用

自定义元数据属性

在服务器上尝试此操作

在表单提交任务分配通知时,会向与管理员用户关联的电子邮件ID发送。 以下屏幕截图显示了任务分配通知示例

通知

注意

分配任务通知的电子邮件模板需要采用以下格式。

subject=已分配任务 — ${workitem_title}

message=表示电子邮件模板且没有任何新行字符的字符串。

在此页面上