AEM 6.4 Workflow - Assign Task - Advanced - Use custom Metadata - ECMA getUserMetaData() - how to get Workflow Metadata .. workItem Error | Community
Skip to main content
Level 2
August 18, 2020
Solved

AEM 6.4 Workflow - Assign Task - Advanced - Use custom Metadata - ECMA getUserMetaData() - how to get Workflow Metadata .. workItem Error

  • August 18, 2020
  • 6 replies
  • 3997 views

We try to use Workflow Metadata inside Assign Task notification eMail.

 

Sample https://docs.adobe.com/content/help/en/experience-manager-64/forms/publish-process-aem-forms/use-metadata-in-email-notifications.html#using-custom-metadata-in-an-email-notification is working fine.

 

When using var wfmetadata = workItem.getWorkflow().getMetaDataMap(); 

witch is working in participantChoser getParticipant() we get error

/apps/fd/dashboard/scripts/metadataScripts/kpbTaskMetaData_v1.ecma: ReferenceError: "workItem" is not defined. (NO_SCRIPT_NAME#28)

 

Please advice how to get Workflow Metadata based on ECMA Script in Assign Task

 

Thanks for any help

 

Regards Wendelin

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by workflowuser

So if you are having a problem in 6.4 version, Please log a support ticket. The following code is working fine in 6.5 environment

function getUserMetaData() {
//Commented lines below provide an overview on how to set user metadata in map and return it.
var payloadPath = workItem.getWorkflowData().getPayload().toString();
log.info("The size is "+workItem.getWorkflowData().getMetaDataMap().size());
log.info("The path is "+payloadPath);

var path = workItem.getWorkflowData().getPayload().toString();
var dataFilePath = path+"/Data.xml/jcr:content";
var xPath = Packages.javax.xml.xpath.XPathFactory.newInstance().newXPath();
var factory = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
var builder = factory.newDocumentBuilder();
var session = workflowSession.adaptTo(Packages.javax.jcr.Session);
var xmlDataNode = session.getNode(dataFilePath);
var xmlDataStream = xmlDataNode.getProperty("jcr:data").getBinary().getStream();
var xPath = Packages.javax.xml.xpath.XPathFactory.newInstance().newXPath();
factory = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
xmlDocument = builder.parse(xmlDataStream);

node = xPath.compile("afData/afUnboundData/data/firstName").evaluate(xmlDocument, Packages.javax.xml.xpath.XPathConstants.NODE);
log.info("#####"+node.getTextContent());

 

var HashMap = Packages.java.util.HashMap;
var valuesMap = new HashMap();
valuesMap.put("policyNumber", payloadPath);
valuesMap.put("policyHolder", payloadPath);

return valuesMap;
}

6 replies

Level 8
August 18, 2020

Will get back to you on this

Mayank_Gandhi
Adobe Employee
Adobe Employee
August 18, 2020
Level 2
August 18, 2020
Thanks for the Reference / is AEM Forms 6.5 equal to 6.4 (I assume Metadata handling has som major extensions)
Adobe Employee
August 18, 2020
Level 2
August 18, 2020
Hello and thanks for the Links as we are on AEM Forms 6.4 variables based on the documentation are only available from AEM Forms 6.5 and newer (Starting with AEM 6.5 you can now create and use variables in AEM Workflow ..) / are ther other options?
Adobe Employee
August 19, 2020

I have reached out to engineering and should have an answer to you soon

Adobe Employee
August 20, 2020

this is working in the ecma script

var workflowData = workItem.getWorkflowData();

var payloadPath = workItem.getWorkflowData().getPayload().toString();

log.info("The path is "+payloadPath);

Once you get the payloadPath, you can acces the submitteddata and from there do the rest

I recommend creating osgi service to do this

Let us know if you have problems

 

Level 2
August 20, 2020

thanks for the ecma statements - this working also for us on other places like participantchoser until know but not in this custom metadata script integration.

 

Unfortunately we still get ReferenceError: "workItem" is not defined at this specific place .. is workItem generally not available in this function getUserMetaData() as described in the sample?

workflowuserAdobe EmployeeAccepted solution
Adobe Employee
August 20, 2020

So if you are having a problem in 6.4 version, Please log a support ticket. The following code is working fine in 6.5 environment

function getUserMetaData() {
//Commented lines below provide an overview on how to set user metadata in map and return it.
var payloadPath = workItem.getWorkflowData().getPayload().toString();
log.info("The size is "+workItem.getWorkflowData().getMetaDataMap().size());
log.info("The path is "+payloadPath);

var path = workItem.getWorkflowData().getPayload().toString();
var dataFilePath = path+"/Data.xml/jcr:content";
var xPath = Packages.javax.xml.xpath.XPathFactory.newInstance().newXPath();
var factory = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
var builder = factory.newDocumentBuilder();
var session = workflowSession.adaptTo(Packages.javax.jcr.Session);
var xmlDataNode = session.getNode(dataFilePath);
var xmlDataStream = xmlDataNode.getProperty("jcr:data").getBinary().getStream();
var xPath = Packages.javax.xml.xpath.XPathFactory.newInstance().newXPath();
factory = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
xmlDocument = builder.parse(xmlDataStream);

node = xPath.compile("afData/afUnboundData/data/firstName").evaluate(xmlDocument, Packages.javax.xml.xpath.XPathConstants.NODE);
log.info("#####"+node.getTextContent());

 

var HashMap = Packages.java.util.HashMap;
var valuesMap = new HashMap();
valuesMap.put("policyNumber", payloadPath);
valuesMap.put("policyHolder", payloadPath);

return valuesMap;
}

Level 2
August 21, 2020
Great - Thanks a lot for the sample Script - works fine in 6.5 / will raise a Ticket for our 6.4 environment