时间 自定义和扩展工作流 您可以访问工作流对象:
工作流Java API包含 com.adobe.granite.workflow
包和多个子包。 API最重要的成员是 com.adobe.granite.workflow.WorkflowSession
类。 此 WorkflowSession
类提供对设计时和运行时工作流对象的访问:
该类还提供了几种干预工作流生命周期的方法。
下表提供了以编程方式与工作流交互时要使用的几个关键Java对象的参考文档的链接。 下面的示例演示了如何在代码中获取和使用类对象。
功能 | 对象 |
---|---|
访问工作流 | WorkflowSession |
执行和查询工作流实例 | Workflow WorkItem WorkflowData |
管理工作流模型 | WorkflowModel WorkflowNode WorkflowTransition |
工作流中(或不中)节点的信息 | WorkflowStatus |
如中所述 定位脚本, AEM(通过Apache Sling)提供了一个执行服务器端ECMA脚本的ECMA脚本引擎。 此 org.apache.sling.scripting.core.ScriptHelper
类可立即供脚本使用,作为 sling
变量。
此 ScriptHelper
类提供对 SlingHttpServletRequest
最终可用于获取 WorkflowSession
对象;例如:
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
“工作流”控制台大量使用REST API;因此本页介绍了工作流的REST API。
curl命令行工具允许您使用工作流REST API访问工作流对象和管理实例生命周期。 本页中的示例演示了如何通过curl命令行工具使用REST API。
REST API支持以下操作:
通过使用用于Web开发的Firefox扩展Firebug,可以在操作控制台时跟踪HTTP流量。 例如,您可以使用检查发送到AEM服务器的参数和值 POST
请求。
在本页中,假定AEM在本地主机的端口上运行 4502
并且安装上下文为“ /
“”(根)。 如果不是安装,则需要相应地调整HTTP请求所应用的URI。
支持的渲染 GET
requests是JSON渲染。 URL GET
应该具有 .json
扩展,例如:
http://localhost:4502/etc/workflow.json
以下HTTP请求方法适用于:
http://localhost:4502/etc/workflow/instances
HTTP请求方法 | 操作 |
GET |
列出可用的工作流实例。 |
POST |
创建新的工作流实例。 参数包括: |
以下HTTP请求方法适用于:
http://localhost:4502/etc/workflow/instances.{state}
HTTP请求方法 | 操作 |
---|---|
GET |
列出可用的工作流实例及其状态( RUNNING , SUSPENDED , ABORTED 或 COMPLETED ) |
以下HTTP请求方法适用于:
http://localhost:4502/etc/workflow/instances/{id}
HTTP请求方法 | 操作 |
GET |
获取实例数据(定义和元数据),包括指向相应工作流模型的链接。 |
POST |
更改实例的状态。 新状态将作为参数发送 state 和必须具有以下值之一: RUNNING , SUSPENDED ,或 ABORTED .如果无法访问新状态(例如,暂停已终止的实例时),则 409 (CONFLICT )响应发送回客户端。 |
以下HTTP请求方法适用于:
http://localhost:4502/etc/workflow/models
HTTP请求方法 | 操作 |
GET |
列出可用的工作流模型。 |
POST |
创建新工作流模型. 如果参数 title 之后,将使用指定的标题创建新模型。 将JSON模型定义作为参数附加 model 根据提供的定义创建新的工作流模型。A 201 响应(CREATED )发送回,其位置标头包含新工作流模型资源的URL。当模型定义作为名为的文件参数附加时,也会发生同样的情况 modelfile .在这两种情况下 model 和 modelfile 参数,一个名为的附加参数 type 是定义序列化格式所必需的。 可以使用OSGI API集成新的序列化格式。 标准JSON序列化程序随工作流引擎一起提供。 其类型为JSON。 有关格式的示例,请参阅下文。 |
示例:在浏览器中,请求 http://localhost:4502/etc/workflow/models.json
会生成类似于以下内容的json响应:
[
{"uri":"/var/workflow/models/activationmodel"}
,{"uri":"/var/workflow/models/dam/adddamsize"}
,{"uri":"/var/workflow/models/cloudconfigs/dtm-reactor/library-download"}
,{"uri":"/var/workflow/models/ac-newsletter-workflow-simple"}
,{"uri":"/var/workflow/models/dam/dam-create-language-copy"}
,{"uri":"/var/workflow/models/dam/dam-create-and-translate-language-copy"}
,{"uri":"/var/workflow/models/dam-indesign-proxy"}
,{"uri":"/var/workflow/models/dam-xmp-writeback"}
,{"uri":"/var/workflow/models/dam-parse-word-documents"}
,{"uri":"/var/workflow/models/dam/process_subasset"}
,{"uri":"/var/workflow/models/dam/dam_set_last_modified"}
,{"uri":"/var/workflow/models/dam/dam-autotag-assets"}
,{"uri":"/var/workflow/models/dam/update_asset"}
,{"uri":"/var/workflow/models/dam/update_asset_offloading"}
,{"uri":"/var/workflow/models/dam/dam-update-language-copy"}
,{"uri":"/var/workflow/models/dam/update_from_lightbox"}
,{"uri":"/var/workflow/models/cloudservices/DTM_bundle_download"}
,{"uri":"/var/workflow/models/dam/dam_download_asset"}
,{"uri":"/var/workflow/models/dam/dynamic-media-encode-video"}
,{"uri":"/var/workflow/models/dam/dynamic-media-video-thumbnail-replacement"}
,{"uri":"/var/workflow/models/dam/dynamic-media-video-user-uploaded-thumbnail"}
,{"uri":"/var/workflow/models/newsletter_bounce_check"}
,{"uri":"/var/workflow/models/projects/photo_shoot_submission"}
,{"uri":"/var/workflow/models/projects/product_photo_shoot"}
,{"uri":"/var/workflow/models/projects/approval_workflow"}
,{"uri":"/var/workflow/models/prototype-01"}
,{"uri":"/var/workflow/models/publish_example"}
,{"uri":"/var/workflow/models/publish_to_campaign"}
,{"uri":"/var/workflow/models/screens/publish_to_author_bin"}
,{"uri":"/var/workflow/models/s7dam/request_to_publish_to_youtube"}
,{"uri":"/var/workflow/models/projects/request_copy"}
,{"uri":"/var/workflow/models/projects/request_email"}
,{"uri":"/var/workflow/models/projects/request_landing_page"}
,{"uri":"/var/workflow/models/projects/request_launch"}
,{"uri":"/var/workflow/models/request_for_activation"}
,{"uri":"/var/workflow/models/request_for_deactivation"}
,{"uri":"/var/workflow/models/request_for_deletion"}
,{"uri":"/var/workflow/models/request_for_deletion_without_deactivation"}
,{"uri":"/var/workflow/models/request_to_complete_move_operation"}
,{"uri":"/var/workflow/models/reverse_replication"}
,{"uri":"/var/workflow/models/salesforce-com-export"}
,{"uri":"/var/workflow/models/scene7"}
,{"uri":"/var/workflow/models/scheduled_activation"}
,{"uri":"/var/workflow/models/scheduled_deactivation"}
,{"uri":"/var/workflow/models/screens/screens-update-asset"}
,{"uri":"/var/workflow/models/translation"}
,{"uri":"/var/workflow/models/s7dam/request_to_remove_from_youtube"}
,{"uri":"/var/workflow/models/wcm-translation/create_language_copy"}
,{"uri":"/var/workflow/models/wcm-translation/prepare_translation_project"}
,{"uri":"/var/workflow/models/wcm-translation/translate-i18n-dictionary"}
,{"uri":"/var/workflow/models/wcm-translation/sync_translation_job"}
,{"uri":"/var/workflow/models/wcm-translation/translate-language-copy"}
,{"uri":"/var/workflow/models/wcm-translation/update_language_copy"}
]
以下HTTP请求方法适用于:
http://localhost:4502*{uri}*
位置 *{uri}*
是存储库中模型节点的路径。
HTTP请求方法 | 操作 |
GET |
获取 HEAD 模型的版本(定义和元数据)。 |
PUT |
更新 HEAD 模型的版本(创建新版本)。新版本模型的完整模型定义必须作为名为的参数添加 model . 此外, type 创建新模型时需要参数,并且需要值 JSON . |
POST |
与PUT的行为相同。 需要,因为AEM构件不支持 PUT 操作。 |
DELETE |
删除模型。 为了解决防火墙/代理问题, POST 包含 X-HTTP-Method-Override 带值的标头条目 DELETE 也将被接受为 DELETE 请求。 |
示例:在浏览器中,请求 http://localhost:4502/var/workflow/models/publish_example.json
返回 json
响应类似于以下代码:
{
"id":"/var/workflow/models/publish_example",
"title":"Publish Example",
"version":"1.0",
"description":"This example shows a simple review and publish process.",
"metaData":
{
"multiResourceSupport":"true",
"tags":"wcm,publish"
},
"nodes":
[{
"id":"node0",
"type":"START",
"title":"Start",
"description":"The start node of the workflow.",
"metaData":
{
}
},
{
"id":"node1",
"type":"PARTICIPANT",
"title":"Validate Content",
"description":"Validate the modified content.",
"metaData":
{
"PARTICIPANT":"admin"
}
},
{
"id":"node2",
"type":"PROCESS",
"title":"Publish Content",
"description":"Publish the modified content.",
"metaData":
{
"PROCESS_AUTO_ADVANCE":"true",
"PROCESS":"com.day.cq.wcm.workflow.process.ActivatePageProcess"
}
},
{
"id":"node3",
"type":"END",
"title":"End",
"description":"The end node of the workflow.",
"metaData":
{
}
}],
"transitions":
[{
"from":"node0",
"to":"node1",
"metaData":
{
}
},
{
"from":"node1",
"to":"node2",
"metaData":
{
}
},
{
"from":"node2",
"to":"node3",
"metaData":
{
}
}
]}
以下HTTP请求方法适用于:
http://localhost:4502/etc/workflow/models/{id}.{version}
HTTP请求方法 | 操作 |
---|---|
GET |
获取给定版本中的模型数据(如果存在)。 |
以下HTTP请求方法适用于:
http://localhost:4502/bin/workflow/inbox
HTTP请求方法 | 操作 |
GET |
列出用户收件箱中的工作项目,该用户由HTTP身份验证标头标识。 |
POST |
完成URI作为参数发送的工作项 item 并将相应的工作流实例前进到由参数定义的下一个节点 route 或 backroute 以防后退一步。如果参数 delegatee 发送,即由参数标识的工作项 item 已委派给指定的参与者。 |
以下HTTP请求方法适用于:
http://localhost:4502/bin/workflow/inbox/{id}
HTTP请求方法 | 操作 |
---|---|
GET |
获取收件箱的数据(定义和元数据) WorkItem 由其ID标识。 |
要获取所有正在运行的工作流的列表,请GET:
http://localhost:4502/etc/workflow/instances.RUNNING.json
使用curl示例:
curl -u admin:admin http://localhost:4502/etc/workflow/instances.RUNNING.json
此 uri
结果中显示的可用作实例 id
在其他命令中;例如:
[
{"uri":"/etc/workflow/instances/server0/2017-03-08/request_for_activation_1"}
]
此 curl
命令可以与任何 工作流状态 取代 RUNNING
.
要更改 工作流标题 显示在 实例 在“工作流”控制台的选项卡中,发送 POST
命令:
到: http://localhost:4502/etc/workflow/instances/{id}
,并使用以下参数:
action
:其值必须为: UPDATE
workflowTitle
:工作流标题使用curl示例:
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/{id}
# for example
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
要获取所有可用工作流模型的列表,请执行GET:
http://localhost:4502/etc/workflow/models.json
使用curl示例:
curl -u admin:admin http://localhost:4502/etc/workflow/models.json
另请参阅 管理工作流模型.
此 com.adobe.granite.workflow.WorkflowSession
类可从以下对象改写: javax.jcr.Session
对象或 org.apache.sling.api.resource.ResourceResolver
对象。
在JSP脚本(或servlet类的Java代码)中,使用HTTP请求对象获取 SlingHttpServletRequest
对象,提供对的访问 ResourceResolver
对象。 调整 ResourceResolver
对象对象 WorkflowSession
.
<%
%><%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false"
import="com.adobe.granite.workflow.WorkflowSession,
org.apache.sling.api.SlingHttpServletRequest"%><%
SlingHttpServletRequest slingReq = (SlingHttpServletRequest)request;
WorkflowSession wfSession = slingReq.getResourceResolver().adaptTo(WorkflowSession.class);
%>
使用 sling
变量来获取 SlingHttpServletRequest
用于获取 ResourceResolver
对象。 调整 ResourceResolver
对象 WorkflowSession
对象。
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
以下示例显示如何访问工作流模型:
WorkflowSession.createNewModel
方法。使用的示例:
/var/workflow/models/mymodel/jcr:content/model
)。删除模型会设置 deleted
模型的属性 metaData
子节点至 true
.
删除不会删除模型节点。
创建新模型时:
工作流模型编辑器要求模型使用以下特定的节点结构 /var/workflow/models
. 模型的父节点必须为类型 cq:Page
拥有 jcr:content
节点具有以下属性值:
sling:resourceType
: cq/workflow/components/pages/model
cq:template
: /libs/cq/workflow/templates/model
创建模型时,必须首先创建 cq:Page
节点并使用其 jcr:content
节点作为模型节点的父节点。
此 id
参数,某些方法识别模型所需的参数是存储库中模型节点的绝对路径:
/var/workflow/models/<*model_name>*/jcr:content/model
参见 如何列出所有工作流模型.
<%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false" import="com.adobe.granite.workflow.WorkflowSession,
com.adobe.granite.workflow.model.WorkflowModel,
org.apache.sling.api.SlingHttpServletRequest"%><%
SlingHttpServletRequest slingReq = (SlingHttpServletRequest)request;
WorkflowSession wfSession = slingReq.getResourceResolver().adaptTo(WorkflowSession.class);
/* Create the parent page */
String modelRepo = new String("/var/workflow/models");
String modelTemplate = new String ("/libs/cq/workflow/templates/model");
String modelName = new String("mymodel");
Page modelParent = pageManager.create(modelRepo, modelName, modelTemplate, "My workflow model");
/* create the model */
String modelId = new String(modelParent.getPath()+"/jcr:content/model")
WorkflowModel model = wfSession.createNewModel("Made using Java",modelId);
/* delete the model */
wfSession.deleteModel(modelId);
%>
var resolver = sling.getRequest().getResource().getResourceResolver();
var wfSession = resolver.adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
var pageManager = resolver.adaptTo(Packages.com.day.cq.wcm.api.PageManager);
//create the parent page node
var workflowPage = pageManager.create("/var/workflow/models", "mymodel", "/libs/cq/workflow/templates/model", "Created via ECMA Script");
var modelId = workflowPage.getPath()+ "/jcr:content/model";
//create the model
var model = wfSession.createNewModel("My Model", modelId);
//delete the model
var model = wfSession.deleteModel(modelId);
# deleting the model by its id
curl -u admin:admin -X DELETE http://localhost:4502/etc/workflow/models/{id}
由于所需的详细程度,curl被认为对于创建和/或读取模型不实用。
您可以使用 WorkflowStatus API 以检索有关节点的工作流状态的信息。
各种方法都具有参数:
excludeSystemWorkflows
此参数可以设置为 true
指示系统工作流应排除在相关结果之外。
您 可以更新OSGi配置 Granite工作流PayloadMapCacheAdobe 指定工作流 Models
被视为系统工作流。 默认(运行时)工作流模型包括:
/var/workflow/models/scheduled_activation/jcr:content/model
/var/workflow/models/scheduled_deactivation/jcr:content/model
如果您需要自动前进 参与者 在预定义的时间内尚未完成的步骤,您可以:
实施OSGI事件侦听器以侦听任务的创建和修改。
指定超时(截止日期),然后创建计划的Sling作业以在此时触发。
编写作业处理程序,该处理程序在超时过期并触发作业时通知。
如果任务尚未完成,此处理程序将对任务执行所需的操作
必须明确界定要采取的行动,以便能够采用这种方法。
下面提供了如何与工作流实例交互(以编程方式)的基本示例。
// starting a workflow
WorkflowModel model = wfSession.getModel(workflowId);
WorkflowData wfData = wfSession.newWorkflowData("JCR_PATH", repoPath);
wfSession.startWorkflow(model, wfData);
// querying and managing a workflow
Workflow[] workflows workflows = wfSession.getAllWorkflows();
Workflow workflow= wfSession.getWorkflow(id);
wfSession.suspendWorkflow(workflow);
wfSession.resumeWorkflow(workflow);
wfSession.terminateWorkflow(workflow);
// starting a workflow
var model = wfSession.getModel(workflowId);
var wfData = wfSession.newWorkflowData("JCR_PATH", repoPath);
wfSession.startWorkflow(model, wfData);
// querying and managing a workflow
var workflows = wfSession.getWorkflows("RUNNING");
var workflow= wfSession.getWorkflow(id);
wfSession.suspendWorkflow(workflow);
wfSession.resumeWorkflow(workflow);
wfSession.terminateWorkflow(workflow);
启动工作流
# starting a workflow
curl -d "model={id}&payloadType={type}&payload={payload}" http://localhost:4502/etc/workflow/instances
# for example:
curl -u admin:admin -d "model=/var/workflow/models/request_for_activation&payloadType=JCR_PATH&payload=/content/we-retail/us/en/products" http://localhost:4502/etc/workflow/instances
列出实例
# listing the instances
curl -u admin:admin http://localhost:4502/etc/workflow/instances.json
这将列出所有实例;例如:
[
{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_1"}
,{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_2"}
]
参见 如何获取所有正在运行的工作流的列表 其ID用于列出具有特定状态的实例。
暂停工作流
# suspending a workflow
curl -d "state=SUSPENDED" http://localhost:4502/etc/workflow/instances/{id}
# for example:
curl -u admin:admin -d "state=SUSPENDED" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
恢复工作流
# resuming a workflow
curl -d "state=RUNNING" http://localhost:4502/etc/workflow/instances/{id}
# for example:
curl -u admin:admin -d "state=RUNNING" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
终止工作流实例
# terminating a workflow
curl -d "state=ABORTED" http://localhost:4502/etc/workflow/instances/{id}
# for example:
curl -u admin:admin -d "state=ABORTED" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
下面提供了如何与工作项交互(以编程方式)的基本示例。
// querying work items
WorkItem[] workItems = wfSession.getActiveWorkItems();
WorkItem workItem = wfSession.getWorkItem(id);
// getting routes
List<Route> routes = wfSession.getRoutes(workItem);
// delegating
Iterator<Participant> delegatees = wfSession.getDelegatees(workItem);
wfSession.delegateWorkItem(workItem, delegatees.get(0));
// completing or advancing to the next step
wfSession.complete(workItem, routes.get(0));
// querying work items
var workItems = wfSession.getActiveWorkItems();
var workItem = wfSession.getWorkItem(id);
// getting routes
var routes = wfSession.getRoutes(workItem);
// delegating
var delegatees = wfSession.getDelegatees(workItem);
wfSession.delegateWorkItem(workItem, delegatees.get(0));
// completing or advancing to the next step
wfSession.complete(workItem, routes.get(0));
从收件箱列出工作项目
# listing the work items
curl -u admin:admin http://localhost:4502/bin/workflow/inbox
将列出收件箱中当前工作项目的详细信息;例如:
[{
"uri_xss": "/var/workflow/instances/server0/2018-02-26/prototype-01_2/workItems/node2_var_workflow_instances_server0_2018-02-26_prototype-01_2",
"uri": "/var/workflow/instances/server0/2018-02-26/prototype-01_2/workItems/node2_var_workflow_instances_server0_2018-02-26_prototype-01_2",
"currentAssignee_xss": "workflow-administrators",
"currentAssignee": "workflow-administrators",
"startTime": 1519656289274,
"payloadType_xss": "JCR_PATH",
"payloadType": "JCR_PATH",
"payload_xss": "/content/we-retail/es/es",
"payload": "/content/we-retail/es/es",
"comment_xss": "Process resource is null",
"comment": "Process resource is null",
"type_xss": "WorkItem",
"type": "WorkItem"
},{
"uri_xss": "configuration/configure_analyticstargeting",
"uri": "configuration/configure_analyticstargeting",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
},{
"uri_xss": "configuration/securitychecklist",
"uri": "configuration/securitychecklist",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
},{
"uri_xss": "configuration/enable_collectionofanonymoususagedata",
"uri": "configuration/enable_collectionofanonymoususagedata",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
},{
"uri_xss": "configuration/configuressl",
"uri": "configuration/configuressl",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
}
委派工作项
# delegating
curl -d "item={item}&delegatee={delegatee}" http://localhost:4502/bin/workflow/inbox
# for example:
curl -u admin:admin -d "item=/etc/workflow/instances/server0/2017-03-08/request_for_activation_1/workItems/node1_etc_workflow_instances_server0_2017-03-08_request_for_act_1&delegatee=administrators" http://localhost:4502/bin/workflow/inbox
此 delegatee
必须为工作流步骤的有效选项。
完成工作项或将工作项推进到下一步
# retrieve the list of routes; the results will be similar to {"results":1,"routes":[{"rid":"233123169","label":"End","label_xss":"End"}]}
http://localhost:4502/etc/workflow/instances/<path-to-the-workitem>.routes.json
# completing or advancing to the next step; use the appropriate route ID (rid value) from the above list
curl -d "item={item}&route={route}" http://localhost:4502/bin/workflow/inbox
# for example:
curl -u admin:admin -d "item=/etc/workflow/instances/server0/2017-03-08/request_for_activation_1/workItems/node1_etc_workflow_instances_server0_2017-03-08_request_for_activation_1&route=233123169" http://localhost:4502/bin/workflow/inbox
使用OSGi事件框架监听以下事件: com.adobe.granite.workflow.event.WorkflowEvent
类定义。 此类还提供了几种用于获取有关事件主体的信息的有用方法。 例如, getWorkItem
方法返回 WorkItem
事件中涉及的工作项的对象。
以下示例代码定义了一个服务,该服务侦听工作流事件并根据事件类型执行任务。
package com.adobe.example.workflow.listeners;
import org.apache.sling.event.jobs.JobProcessor;
import org.apache.sling.event.jobs.JobUtil;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import com.adobe.granite.workflow.event.WorkflowEvent;
import com.adobe.granite.workflow.exec.WorkItem;
/**
* The <code>WorkflowEventCatcher</code> class listens to workflow events.
*/
@Component(metatype=false, immediate=true)
@Service(value=org.osgi.service.event.EventHandler.class)
public class WorkflowEventCatcher implements EventHandler, JobProcessor {
@Property(value=com.adobe.granite.workflow.event.WorkflowEvent.EVENT_TOPIC)
static final String EVENT_TOPICS = "event.topics";
private static final Logger logger = LoggerFactory.getLogger(WorkflowEventCatcher.class);
public void handleEvent(Event event) {
JobUtil.processJob(event, this);
}
public boolean process(Event event) {
logger.info("Received event of topic: " + event.getTopic());
String topic = event.getTopic();
try {
if (topic.equals(WorkflowEvent.EVENT_TOPIC)) {
WorkflowEvent wfevent = (WorkflowEvent)event;
String eventType = wfevent.getEventType();
String instanceId = wfevent.getWorkflowInstanceId();
if (instanceId != null) {
//workflow instance events
if (eventType.equals(WorkflowEvent.WORKFLOW_STARTED_EVENT) ||
eventType.equals(WorkflowEvent.WORKFLOW_RESUMED_EVENT) ||
eventType.equals(WorkflowEvent.WORKFLOW_SUSPENDED_EVENT)) {
// your code comes here...
} else if (
eventType.equals(WorkflowEvent.WORKFLOW_ABORTED_EVENT) ||
eventType.equals(WorkflowEvent.WORKFLOW_COMPLETED_EVENT)) {
// your code comes here...
}
// workflow node event
if (eventType.equals(WorkflowEvent.NODE_TRANSITION_EVENT)) {
WorkItem currentItem = (WorkItem) event.getProperty(WorkflowEvent.WORK_ITEM);
// your code comes here...
}
}
}
} catch(Exception e){
logger.debug(e.getMessage());
e.printStackTrace();
}
return true;
}
}