작업 알림 할당 사용자 지정

마지막 업데이트: 2024-01-25
  • 주제:
  • Workflow
    이 항목에 대한 자세한 내용 보기
  • 작성 대상:
  • Experienced
    Developer

작업 할당 구성 요소는 워크플로 참여자에게 작업을 할당하는 데 사용됩니다. 작업이 사용자 또는 그룹에 할당되면 정의된 사용자 또는 그룹 구성원에게 이메일 알림이 전송됩니다.
이 전자 메일 알림에는 일반적으로 작업과 관련된 동적 데이터가 포함됩니다. 이 동적 데이터는 생성된 시스템을 사용하여 가져옵니다 메타데이터 속성.
제출된 양식 데이터의 값을 이메일 알림에 포함하려면 사용자 지정 메타데이터 속성을 만든 다음 이메일 템플릿에서 이러한 사용자 지정 메타데이터 속성을 사용해야 합니다

사용자 지정 메타데이터 속성을 만드는 중

권장 접근 방식은 의 getUserMetadata 메서드를 구현하는 OSGI 구성 요소를 만드는 것입니다. 작업 항목 사용자 메타데이터 서비스

다음 코드는 4개의 메타데이터 속성(이름,,이유amountRequested) 및 는 제출된 데이터에서 해당 값을 설정합니다. 예를 들어 메타데이터 속성 이름​의 값은 제출된 데이터에서 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=새 줄 문자 없이 이메일 템플릿을 나타내는 문자열입니다.

작업 할당 전자 메일 알림의 작업 설명

경우에 따라 이전 작업 소유자의 주석을 후속 작업 알림에 포함할 수 있습니다. 작업의 마지막 주석을 캡처하는 코드가 아래에 나열됩니다.

package samples.aemforms.taskcomments.core;

import org.osgi.service.component.annotations.Component;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.jcr.Session;

import org.osgi.framework.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.HistoryItem;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.metadata.MetaDataMap;

import com.adobe.fd.workspace.service.external.WorkitemUserMetadataService;
@Component(property = {
  Constants.SERVICE_DESCRIPTION + "=A sample implementation of a user metadata service.",
  Constants.SERVICE_VENDOR + "=Adobe Systems",
  "process.label" + "=Capture Workflow Comments"
})

public class CaptureTaskComments implements WorkitemUserMetadataService {
  private static final Logger log = LoggerFactory.getLogger(CaptureTaskComments.class);
  @Override
  public Map <String, String> getUserMetadata(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metadataMap) {
    HashMap < String, String > customMetadataMap = new HashMap < String, String > ();
    workflowSession.adaptTo(Session.class);
    try {
      List <HistoryItem> workItemsHistory = workflowSession.getHistory(workItem.getWorkflow());
      int listSize = workItemsHistory.size();
      HistoryItem lastItem = workItemsHistory.get(listSize - 1);
      String reviewerComments = (String) lastItem.getWorkItem().getMetaDataMap().get("workitemComment");
      log.debug("####The comment I got was ...." + reviewerComments);
      customMetadataMap.put("comments", reviewerComments);
      log.debug("Created  " + customMetadataMap.size() + " metadata  properties");

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

}

위의 코드를 사용하는 번들은 여기에서 다운로드됨

이 페이지에서는