Activiti7工作流引擎:进阶篇 ServiceTask
Posted vbirdbest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activiti7工作流引擎:进阶篇 ServiceTask相关的知识,希望对你有一定的参考价值。
心念一转, 万念皆转; 心路一通, 万路皆通。
UserTask 需要 调用 taskService.complete(task.getId()) 来完成任务,而ServiceTask是不需要用户操作而自动执行的,它会自动调用Spring环境下的某个Bean的某个方法。
因为使用的是Bean所以在需要在Spring环境下运行,这里在SpringBoot2.x版本运行。
*************************** 废话不多说,上来就干。***************************
员工申请请假-》经理审批-》总经理审批。如果是经理要请假那么按照原来的方式经理还需要审核自己,然后再到总经理,现在想实现的效果是经理自己请假但自己不需要审核自己,直接到总经理审核。
🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷🍷 🍷🍷
一:🍼🍼🍼🍼🍼🍼.bpmn
在ServiceTask上设置Type=Expression,Expression=$myTaskService.isPm(execution),其中myTaskService是Bean中的Id值,方法参数名必须是execution不能修改。
本示例中是将ServiceTask使当做条件来使用的,本质上一般使用ServiceTask执行一些逻辑,计算出来一些值,然后将这些值设置为变量,然后供后面的流程来使用。
🥝🥝🥝🥝🥝🥝 设置流程条件。
🌽🌽🌽🌽🌽🌽 设置流程条件。
二:🍆🍆🍆🍆🍆🍆 Service
@Service如果没有指定名字,默认是类名的首字母小写,即myTaskService。
@Service
public class MyTaskService
public void isPm(DelegateExecution delegateExecution)
String creator = (String)delegateExecution.getVariable("creator");
if ("狗经理".equals(creator))
delegateExecution.setVariable("isPM", 1);
else
delegateExecution.setVariable("isPM", 0);
三:🥒🥒🥒🥒🥒🥒 Test
@SpringBootTest
class SpringbootActiviti7Test
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Test
void testStartProcess()
Map<String, Object> variables = new HashMap<>();
variables.put("creator", "狗经理");
variables.put("pm", "狗经理");
variables.put("gm", "狗总经理");
runtimeService.startProcessInstanceByKey("LeaveServiceTask", variables);
Task task = taskService.createTaskQuery().processDefinitionKey("LeaveServiceTask")
.taskAssignee("狗经理")
.singleResult();
taskService.complete(task.getId());
✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️经理请假直接到总经理那里审批了✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️
以上是关于Activiti7工作流引擎:进阶篇 ServiceTask的主要内容,如果未能解决你的问题,请参考以下文章
Activiti7工作流引擎:进阶篇 SpringBoot整合工作流Activiti7