{"id":34,"date":"2014-08-06T10:17:00","date_gmt":"2014-08-06T10:17:00","guid":{"rendered":"https:\/\/scgindia.in\/lhotsetechnologies\/dev\/2014\/08\/06\/cq5-workflow-tutorial-part-iii\/"},"modified":"2020-01-17T13:56:51","modified_gmt":"2020-01-17T13:56:51","slug":"cq5-workflow-tutorial-part-iii","status":"publish","type":"post","link":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/","title":{"rendered":"CQ5 Workflow Tutorial Part &#8211; III"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left;\">\n<div style=\"text-align: justify;\"><span style=\"color: #274e13;\">In my <a href=\"http:\/\/versatileankur.blogspot.in\/2014\/07\/cq5-workflow-tutorial-part-ii.html\" target=\"_blank\" rel=\"noopener noreferrer\">last post<\/a>&nbsp;, I discussed about <b>&#8220;how to use inbuilt processes using process steps&#8221;<\/b>. In this post I will show you how to create your custom &nbsp;process and how to use them.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"color: #274e13;\">&nbsp;<\/span><\/div>\n<div style=\"text-align: justify;\"><b><span style=\"color: #660000;\">Agenda of this post<\/span><\/b><\/div>\n<ol style=\"text-align: left;\">\n<li style=\"text-align: justify;\"><span style=\"color: #274e13;\">Creating custom process Step.<\/span><\/li>\n<li style=\"text-align: justify;\"><span style=\"color: #274e13;\">How to use this custom process Step.<\/span><\/li>\n<li style=\"text-align: justify;\"><span style=\"color: #274e13;\">Explanation of all arguments in Workflow Process Interface execute() method.<\/span><\/li>\n<li style=\"text-align: justify;\"><span style=\"color: #274e13;\">Use of all these arguments.<\/span><\/li>\n<\/ol>\n<div style=\"text-align: justify;\"><span style=\"color: #274e13;\">For doing all these stuff, I am creating a project using <b>adobe maven&nbsp;archetype<\/b> whose structure looks like &#8211;&nbsp;<\/span>&nbsp;&nbsp;<\/p>\n<div style=\"clear: both; text-align: center;\"><a style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\" href=\"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png\" width=\"259\" height=\"320\" border=\"0\"><\/a><\/div>\n<p><span style=\"color: #274e13;\">For creating a custom process step you have to implement <\/span><b style=\"color: #274e13;\">WorkflowProcess interface<\/b><span style=\"color: #274e13;\"> in your java class. It provide a method named as&nbsp;<\/span><b style=\"color: #274e13;\">execute()<\/b><span style=\"color: #274e13;\">&nbsp;with three parameters, I will explain you all of these parameters.<\/span><br \/>\n<span style=\"color: #274e13;\"><br \/>\n<\/span><\/p>\n<\/div>\n<div style=\"text-align: justify;\"><span style=\"color: #274e13;\">Register your class as a component &amp; add some <b>properties<\/b> as <b>enabled, immediate<\/b>,&nbsp;these property indicates-<\/span><br \/>\n<i><span style=\"color: #660000;\">That your service will be enabled immediately at the time of deployment of your project.<\/span><\/i><br \/>\n<i><span style=\"color: #660000;\"><br \/>\n<\/span><\/i><span style=\"color: #274e13;\">Now <b>register<\/b> your class <b>as a service<\/b> with some configurations &#8211;<\/span><\/div>\n<div style=\"color: #274e13; text-align: justify;\">i.e. add a property named as <b>&#8220;process.label&#8221;<\/b>. This property defines a name of your process i.e. in workflow process step, you are able to see this process in select process drag drop menu with a name define using this property.<\/div>\n<div style=\"text-align: justify;\">\n<div style=\"color: #274e13;\">your final code will looks like &#8211;<\/div>\n<p><span style=\"color: #660000; font-size: 14px;\">import com.adobe.granite.workflow.WorkflowException;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import com.adobe.granite.workflow.WorkflowSession;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import com.adobe.granite.workflow.exec.WorkItem;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import com.adobe.granite.workflow.exec.WorkflowProcess;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import com.adobe.granite.workflow.metadata.MetaDataMap;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import org.apache.felix.scr.annotations.Component;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import org.apache.felix.scr.annotations.Properties;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import org.apache.felix.scr.annotations.Property;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import org.apache.felix.scr.annotations.Service;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import org.slf4j.Logger;<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">import org.slf4j.LoggerFactory;<\/span><br \/>\n<span style=\"color: #660000;\"><span style=\"font-size: 14px;\"><br \/>\n<\/span><span style=\"font-size: 14px;\">@Component(immediate = true, enabled = true, metatype = false)<\/span><\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">@Service<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">@Properties({<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; &nbsp; &nbsp; @Property(name = &#8220;service.description&#8221;, value = &#8220;Service for Showing custom workflow demo.&#8221;),<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; &nbsp; &nbsp; @Property(name = &#8220;service.vendor&#8221;, value = &#8220;versatileankur@blogspot.in&#8221;),<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; &nbsp; &nbsp; @Property(name = &#8220;process.label&#8221;, value = &#8220;Blog Process&#8221;)<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">})<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">public class CustomProcess implements WorkflowProcess {<\/span><br \/>\n<span style=\"color: #660000;\"><span style=\"font-size: 14px;\"><br \/>\n<\/span><span style=\"font-size: 14px;\">&nbsp; &nbsp; private static final Logger LOGGER = LoggerFactory.getLogger(CustomProcess.class);<\/span><\/span><br \/>\n<span style=\"color: #660000;\"><span style=\"font-size: 14px;\"><br \/>\n<\/span><span style=\"font-size: 14px;\">&nbsp; &nbsp; @Override<\/span><\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException {<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; &nbsp; &nbsp; LOGGER.info(&#8220;nnnn==== Custom workflow Creation completed successfully. n thanks for creation&#8221;);<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">}<\/span><\/p>\n<div style=\"color: #274e13;\">&nbsp;<\/div>\n<div style=\"color: #274e13;\">you have to add workflow dependencies i.e. <b>com.adobe.granite.workflow.api<\/b> in to your <b>bundle<\/b> <b>pom.xml<\/b> file. Now after writing this code just use <b>mvn clean install -P autoInstallPackage<\/b> command. you are able to see in <b>\/system\/console\/bundle<\/b>, search for blog, you will get your bundle in active state i.e. everything works fine.<\/div>\n<div style=\"color: #274e13;\">&nbsp;<\/div>\n<div style=\"color: #274e13;\">Now go to your <b>blog workflow model <\/b>which is shown below and follow the steps &nbsp;as written below-<\/div>\n<div style=\"clear: both; color: #274e13; text-align: center;\"><a style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\" href=\"http:\/\/1.bp.blogspot.com\/-Mc-qEs13UfQ\/U-HObr3A9gI\/AAAAAAAAAvw\/L7LiBndTOqY\/s1600\/project_2.jpg\"><img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-Mc-qEs13UfQ\/U-HObr3A9gI\/AAAAAAAAAvw\/L7LiBndTOqY\/s1600\/project_2.jpg\"><\/a><\/div>\n<div style=\"color: #274e13;\">Select <b>blog Process Step<\/b> we will get a dialog select second tab your screen looks like-<\/div>\n<div style=\"clear: both; color: #274e13; text-align: center;\"><a style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\" href=\"http:\/\/1.bp.blogspot.com\/-oBVcfRlY2CQ\/U-HO7a_q0xI\/AAAAAAAAAv4\/RRZpPAYqClU\/s1600\/project_3.jpg\"><img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-oBVcfRlY2CQ\/U-HO7a_q0xI\/AAAAAAAAAv4\/RRZpPAYqClU\/s1600\/project_3.jpg\"><\/a><\/div>\n<div style=\"color: #274e13;\">In <b>Process drop down<\/b> we will see your custom workflow with a name Blog Process,<\/div>\n<div style=\"color: #274e13;\"><b>Check Handle Advance<\/b> checkbox<\/div>\n<div style=\"color: #274e13;\"><b>click OK<\/b>.<\/div>\n<div style=\"color: #274e13;\"><b>Save<\/b> your <b>workflow<\/b>.<\/div>\n<div style=\"color: #274e13;\"><b>Go to<\/b> any page in my case I select <b>geometrixx\/en.html<\/b> page.<\/div>\n<div style=\"color: #274e13;\"><b>Select workflow tab<\/b>.<\/div>\n<div style=\"color: #274e13;\"><b>Select <\/b>your <b>blog workflow model<\/b>.<\/div>\n<div style=\"color: #274e13;\">As shown below<\/div>\n<div style=\"clear: both; color: #274e13; text-align: center;\"><a style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\" href=\"http:\/\/2.bp.blogspot.com\/-UBg23jzjGrk\/U-HQCFK0Q7I\/AAAAAAAAAwE\/K6t2LUJS-WI\/s1600\/project_4.jpg\"><img decoding=\"async\" src=\"http:\/\/2.bp.blogspot.com\/-UBg23jzjGrk\/U-HQCFK0Q7I\/AAAAAAAAAwE\/K6t2LUJS-WI\/s1600\/project_4.jpg\"><\/a><\/div>\n<div style=\"color: #274e13;\"><b>Click<\/b> on <b>Start workflow<\/b> you will see your page refresh and workflow field becomes empty it means your code run fine. Now <b>go to<\/b> your <b>crx-quickstart\/logs\/error.log file<\/b>.<\/div>\n<div style=\"color: #274e13;\">Press <b>Ctrl+End<\/b> or <b>search for &#8220;Custom workflow Creation&#8221;<\/b> you will see your comment printed there. It means everything is fine &amp; working. By following above steps you are able to create custom workflow process step.<\/div>\n<div style=\"color: #274e13;\">&nbsp;<\/div>\n<p><b><span style=\"color: #660000;\"><i>Explanation of method arguments.<\/i><\/span><\/b><\/p>\n<div style=\"color: #274e13;\">&nbsp;<\/div>\n<p><b><span style=\"color: #660000;\"><i>workItem<\/i><\/span><\/b><\/p>\n<ol>\n<li style=\"color: #274e13;\"><i><b>workItem<\/b>&nbsp;represent the <b>workItem<\/b> corresponding to current step, it will be present till this step is running and not present in any other process or participant step. Using this workItem object you are able to access workflow instance or <b>metaDataMap<\/b> related to only this&nbsp;<b>workItem<\/b>.<\/i><\/li>\n<li><i><span style=\"color: #274e13;\">you can also access workflow <\/span><b style=\"color: #274e13;\">metaDataMap<\/b><span style=\"color: #274e13;\"> using&nbsp;<\/span><b style=\"color: #274e13;\">workItem<\/b><span style=\"color: #274e13;\">&nbsp;object using&nbsp;<\/span><\/i><i style=\"color: #274e13;\">workItem.getWorkflow().getMetaDataMap() method it will return metaDataMap related to whole workflow model.<\/i><\/li>\n<li><span style=\"color: #274e13;\"><i>If you use workItem.getMetaDataMap() then it will return only that metaDataMap object which is related to this step only and not present in any other workflow step.<\/i><\/span><\/li>\n<li><span style=\"color: #274e13;\"><i>You are also able to get payload of this workflow using getWorkflowData() method of workItem.<\/i><\/span><\/li>\n<li><span style=\"color: #274e13;\"><i>You can explore this API from this link-&nbsp;<\/i><\/span><i><a href=\"http:\/\/docs.adobe.com\/docs\/en\/cq\/current\/javadoc\/com\/day\/cq\/workflow\/exec\/WorkflowData.html\" target=\"_blank\" rel=\"noopener noreferrer\">WorkflowData<\/a>.<\/i><\/li>\n<\/ol>\n<p><b><i><span style=\"color: #660000;\">workflowSession<\/span><\/i><\/b><\/p>\n<div style=\"color: #274e13;\">&nbsp;<\/div>\n<ol>\n<li>workflowSession represent the session related to whole workflow, using this Object you can deal with all node using history node of workflow instance. You can explore this interface using given link&nbsp;<a href=\"http:\/\/dev.day.com\/docs\/en\/cq\/current\/javadoc\/com\/day\/cq\/workflow\/WorkflowSession.html\" target=\"_blank\" rel=\"noopener noreferrer\">WorkflowSession<\/a>.<\/li>\n<\/ol>\n<p><b><i><span style=\"color: #660000;\">metaDataMap<\/span><\/i><\/b><\/p>\n<ol>\n<li style=\"color: #274e13;\">this metaDataMap object is related to dialog properties which you select in process dialog. It provides you only those properties which are under process tab i.e. this will provide you information about &#8211;&nbsp;<\/li>\n<li><i><span style=\"color: #660000;\">what process you selected?<\/span><\/i><\/li>\n<li><i><span style=\"color: #660000;\">Either you select Handle Advance checkbox or not?<\/span><\/i><\/li>\n<li><i><span style=\"color: #660000;\">&amp; also provide you list of arguments.<\/span><\/i><\/li>\n<\/ol>\n<div style=\"color: #274e13;\">&nbsp;<\/div>\n<p><span style=\"color: #274e13;\"><i>These there properties comes under three different property names as <b>PROCESS,&nbsp;PROCESS_AUTO_ADVANCE, PROCESS_ARG.<\/b><\/i><br \/>\n<i><b>PROCESS_ARG<\/b> is of type&nbsp;<\/i><\/span><i style=\"color: #274e13;\">String&nbsp;<\/i><i style=\"color: #274e13;\">i.e. what ever you write in Argument text area it will be accessed as a single string &amp; you can provide your custom logic to parse that stri<\/i><span style=\"color: #274e13;\">ng.<\/span><\/p>\n<\/div>\n<div style=\"text-align: justify;\">\n<div style=\"color: #274e13;\">For testing all of these just write two line in execute() method of your<b> CustomProcess class<\/b>.<\/div>\n<p><span style=\"font-size: 14px;\"><span style=\"color: #274e13;\">&nbsp;<\/span><span style=\"color: #660000;\">@Override<\/span><\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException {<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; &nbsp; &nbsp; LOGGER.info(&#8220;nnnn===== Custom workflow Creation completed successfully. n thanks for creation&#8221;);<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; &nbsp; &nbsp; LOGGER.info(&#8220;nnnn===============&#8221;+metaDataMap.get(&#8220;PROCESS_ARGS&#8221;, new String()));<\/span><br \/>\n<span style=\"color: #660000; font-size: 14px;\">&nbsp; &nbsp; &nbsp; &nbsp; LOGGER.info(&#8220;nnnn===============&#8221;+metaDataMap);<\/span><br \/>\n<span style=\"color: #660000;\"><span style=\"font-size: 14px;\">&nbsp; &nbsp; }<\/span><\/span><\/p>\n<div style=\"color: #274e13;\">&nbsp;<\/div>\n<div style=\"color: #274e13;\">Use <b>mvn clean install -P autoInstallPackage<\/b> command your bundle is successfully deployed into repository. <b>Now go to blog workflow model &nbsp;-&gt; select blog process step -&gt; select process tab -&gt; type any text in Arguments text area<\/b> as shown below.<\/div>\n<div style=\"clear: both; color: #274e13; text-align: center;\"><a style=\"clear: left; float: left; margin-bottom: 1em; margin-left: 1em;\" href=\"http:\/\/1.bp.blogspot.com\/-_yRIzb1QJOA\/U-HX2E1Wt0I\/AAAAAAAAAwU\/ZZxj---JtbE\/s1600\/project_5.jpg\"><img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-_yRIzb1QJOA\/U-HX2E1Wt0I\/AAAAAAAAAwU\/ZZxj---JtbE\/s1600\/project_5.jpg\"><\/a><\/div>\n<div style=\"color: #274e13;\">\n<p>Now go to your <b>geometrixx\/en.html<\/b> page and go to <b>workflow tab-&gt; select blog workflow &#8211; &gt; click on start workflow button<\/b>.&nbsp;<b>Go<\/b> to <b>crx-quickstart\/logs\/error.log<\/b><\/p>\n<\/div>\n<div>\n<div style=\"color: #274e13;\">you will see Metadata map and <b>PROCESS_ARG<\/b> values which we provide form &nbsp;workflow model dialog. This is all done in this post.<\/div>\n<p><b><span style=\"color: #660000;\">github repository link<\/span><\/b><br \/>\n<span style=\"color: #0000ee;\"><b><i><u><a href=\"https:\/\/github.com\/vietankur009\/blog\">https:\/\/github.com\/vietankur009\/blog<\/a><\/u><\/i><\/b><\/span><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p><strong>Happy Coding<\/strong><br \/>\n<strong>Namah Shivay<\/strong><\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In my last post&nbsp;, I discussed about &#8220;how to use inbuilt processes using process steps&#8221;. In this post I will [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,82,126,123,125,124,127,128],"tags":[],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-aem","category-cq5","category-cq5-workflow","category-cq5-workflow-tutorial","category-metadatamap-in-workflow-process-step","category-workflow","category-workflowsession","category-workitem"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>CQ5 Workflow Tutorial Part - III - AEM Blog | Lhotse Technologies<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CQ5 Workflow Tutorial Part - III - AEM Blog | Lhotse Technologies\" \/>\n<meta property=\"og:description\" content=\"In my last post&nbsp;, I discussed about &#8220;how to use inbuilt processes using process steps&#8221;. In this post I will [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/\" \/>\n<meta property=\"og:site_name\" content=\"AEM Blog | Lhotse Technologies\" \/>\n<meta property=\"article:published_time\" content=\"2014-08-06T10:17:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-01-17T13:56:51+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png\" \/>\n<meta name=\"author\" content=\"Team Lhotse\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Team Lhotse\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/\"},\"author\":{\"name\":\"Team Lhotse\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/fd7bee89b050d7c7195fc75b681b053d\"},\"headline\":\"CQ5 Workflow Tutorial Part &#8211; III\",\"datePublished\":\"2014-08-06T10:17:00+00:00\",\"dateModified\":\"2020-01-17T13:56:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/\"},\"wordCount\":1063,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png\",\"articleSection\":[\"AEM\",\"CQ5\",\"CQ5 workflow\",\"cq5 workflow tutorial\",\"metaDataMap in workflow process step\",\"workflow\",\"workflowSession\",\"workItem\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/\",\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/\",\"name\":\"CQ5 Workflow Tutorial Part - III - AEM Blog | Lhotse Technologies\",\"isPartOf\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png\",\"datePublished\":\"2014-08-06T10:17:00+00:00\",\"dateModified\":\"2020-01-17T13:56:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#primaryimage\",\"url\":\"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png\",\"contentUrl\":\"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/lhotsetechnologies.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CQ5 Workflow Tutorial Part &#8211; III\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#website\",\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/\",\"name\":\"AEM Blog | Lhotse Technologies\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/lhotsetechnologies.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#organization\",\"name\":\"AEM Blog | Lhotse Technologies\",\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2019\/07\/lhotse-logo.png\",\"contentUrl\":\"https:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2019\/07\/lhotse-logo.png\",\"width\":539,\"height\":172,\"caption\":\"AEM Blog | Lhotse Technologies\"},\"image\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/fd7bee89b050d7c7195fc75b681b053d\",\"name\":\"Team Lhotse\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"caption\":\"Team Lhotse\"},\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/author\/team-lhotse\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CQ5 Workflow Tutorial Part - III - AEM Blog | Lhotse Technologies","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/","og_locale":"en_US","og_type":"article","og_title":"CQ5 Workflow Tutorial Part - III - AEM Blog | Lhotse Technologies","og_description":"In my last post&nbsp;, I discussed about &#8220;how to use inbuilt processes using process steps&#8221;. In this post I will [&hellip;]","og_url":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/","og_site_name":"AEM Blog | Lhotse Technologies","article_published_time":"2014-08-06T10:17:00+00:00","article_modified_time":"2020-01-17T13:56:51+00:00","og_image":[{"url":"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png","type":"","width":"","height":""}],"author":"Team Lhotse","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Team Lhotse","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#article","isPartOf":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/"},"author":{"name":"Team Lhotse","@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/fd7bee89b050d7c7195fc75b681b053d"},"headline":"CQ5 Workflow Tutorial Part &#8211; III","datePublished":"2014-08-06T10:17:00+00:00","dateModified":"2020-01-17T13:56:51+00:00","mainEntityOfPage":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/"},"wordCount":1063,"commentCount":0,"publisher":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/#organization"},"image":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#primaryimage"},"thumbnailUrl":"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png","articleSection":["AEM","CQ5","CQ5 workflow","cq5 workflow tutorial","metaDataMap in workflow process step","workflow","workflowSession","workItem"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/","url":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/","name":"CQ5 Workflow Tutorial Part - III - AEM Blog | Lhotse Technologies","isPartOf":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#primaryimage"},"image":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#primaryimage"},"thumbnailUrl":"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png","datePublished":"2014-08-06T10:17:00+00:00","dateModified":"2020-01-17T13:56:51+00:00","breadcrumb":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#primaryimage","url":"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png","contentUrl":"http:\/\/3.bp.blogspot.com\/-uSpY9iTUfl0\/U-HM6Xqr59I\/AAAAAAAAAvk\/KcU5kIrLRXc\/s1600\/project_1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/lhotsetechnologies.com\/blog\/cq5-workflow-tutorial-part-iii\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/lhotsetechnologies.com\/blog\/"},{"@type":"ListItem","position":2,"name":"CQ5 Workflow Tutorial Part &#8211; III"}]},{"@type":"WebSite","@id":"https:\/\/lhotsetechnologies.com\/blog\/#website","url":"https:\/\/lhotsetechnologies.com\/blog\/","name":"AEM Blog | Lhotse Technologies","description":"","publisher":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/lhotsetechnologies.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/lhotsetechnologies.com\/blog\/#organization","name":"AEM Blog | Lhotse Technologies","url":"https:\/\/lhotsetechnologies.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2019\/07\/lhotse-logo.png","contentUrl":"https:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2019\/07\/lhotse-logo.png","width":539,"height":172,"caption":"AEM Blog | Lhotse Technologies"},"image":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/fd7bee89b050d7c7195fc75b681b053d","name":"Team Lhotse","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","caption":"Team Lhotse"},"url":"https:\/\/lhotsetechnologies.com\/blog\/author\/team-lhotse\/"}]}},"_links":{"self":[{"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/comments?post=34"}],"version-history":[{"count":3,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":390,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/34\/revisions\/390"}],"wp:attachment":[{"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/media?parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/categories?post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/tags?post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}