工作流之Camunda开发记录(二)---- 用户任务、服务任务、全局变量的使用
发布日期:2021-05-06 19:33:11 浏览次数:19 分类:精选文章

本文共 3203 字,大约阅读时间需要 10 分钟。

Camunda工作流 - 用户任务与服务任务

前言

在上一篇文章中,我们介绍了工作流的发布与启动流程。现在,我们将深入探讨工作流中的用户任务与服务任务,特别是如何利用全局变量来实现业务逻辑的处理。

用户任务

用户任务在Camunda工作流中扮演着关键角色。它的基本功能是暂停工作流的自动执行,让人工用户进行审批或批准。与服务任务不同,用户任务需要用户手动完成才能继续流程执行。

用户任务的配置

在配置用户任务时,我们通常会指定一个审批人。然而,直接配置审批人在实际应用中存在不便。因此,我们通常通过在任务的逻辑中获取业务中的用户信息来实现审批逻辑,而不是直接依赖Camunda的用户列表。这种方法使得Camunda更像一个工具壳,不参与核心的业务逻辑判断。

例如,以下是一个用户任务的配置示例:

在这个配置中,camunda:assignee 的值是一个表达式,表示调用了一个外部方法 fun1(s1)。这个方法位于Spring容器中,类名加上具体方法名即可。参数 s1 是一个全局参数。

服务任务

服务任务是工作流中的另一类核心任务类型,与用户任务有明显区别。服务任务的执行是自动化的,不需要人工干预。它通常用于执行复杂的业务逻辑,如设置全局参数、调用脚本任务等。

服务任务的配置

服务任务与用户任务的主要区别在于执行方式。服务任务可以通过实现Camunda内置的JavaDelegate接口来调用外部服务或脚本。以下是一个服务任务的配置示例:

这里,camunda:class 属性指定了一个全路径类名 com.xiangfu.core.workflow.DemoTask。这个类需要实现 JavaDelegate 接口,以便能够接收工作流引擎的执行请求。

全局变量的使用

全局变量在工作流中扮演着重要角色,它贯穿整个流程,允许多个任务之间传递数据。在服务任务中,我们经常需要通过全局变量来传递参数。

全局变量的获取与设置

全局变量可以通过工作流引擎的API来获取。以下是一个示例代码:

Map
variables = runtimeService.getVariables(execution.getId());
String workflowId = variables.get(WORKFLOWID_STR).toString();

这里,variables 是当前流程实例的全局参数映射。通过执行ID,可以获取特定流程实例的所有变量。

服务任务与用户任务的交互

在实际应用中,服务任务和用户任务经常需要交互。例如,一个服务任务可能通过全局参数调用一个外部接口获取数据,然后将结果传递给用户任务进行审批。

在前面的示例中,DemoTask 类负责通过HTTP请求获取数据,并将结果设置为全局变量。DemoTask2 类则从全局变量中获取数据,进行进一步处理。

JavaDelegate 接口的实现

要实现服务任务,需要编写一个类,实现 JavaDelegate 接口,并在类中定义 execute 方法。这个方法接收工作流引擎传来的执行参数,并根据业务逻辑进行处理。

例如,以下是一个实现 JavaDelegate 接口的类:

@Component
public class DemoTask implements JavaDelegate, Serializable {
@Autowired
private HttpClientUtil httpClientUtil;
public String fun1(String s1) {
System.out.println("fun1 run " + s1);
return s1;
}
public void fun2(String s2) {
System.out.println("fun2 run " + s2);
}
@Override
public void execute(DelegateExecution execution) throws Exception {
DemoParam s1 = (DemoParam) execution.getVariable("s1");
ResponseEntity
stringResponseEntity = httpClientUtil.postRequest("https://api.apiopen.top/getJoke?page=1&count=2&type=video", "application/json", null, null);
s1.setName(stringResponseEntity.toString());
execution.setVariable("1", true);
}
}

服务任务与用户任务的交互示例

在流程中,服务任务和用户任务可以通过全局变量进行数据交互。例如,一个服务任务可能调用一个外部接口获取数据,并将结果设置为全局变量,然后一个用户任务可以根据这个全局变量进行审批或处理。

XML配置参考

以下是一个完整的Camunda工作流配置示例,供参考:

#{s3 > 1}
#{true}

总结

通过以上内容,我们可以看到,用户任务和服务任务在Camunda工作流中的重要性。用户任务用于手动审批,而服务任务用于自动执行复杂的业务逻辑。全局变量则是两者之间的重要数据传递方式。

如果你对Camunda工作流还有其他问题,欢迎在评论区留言交流!

上一篇:Windows 10jdk环境变量配置会出现的小问题
下一篇:工作流之Camunda开发记录(一)----常用API与流程

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月31日 23时12分00秒