专业的编程技术博客社区

网站首页 > 博客文章 正文

Springboot整合工作流引擎Activiti(九)之服务任务

baijin 2024-10-18 04:07:14 博客文章 5 ℃ 0 评论

环境:Springboot2.3.12.RELEASE + Activiti7.1.0.M6


本篇内容:主要介绍服务任务的使用。

简介

在Activiti中服务任务是如下节点

一般使用服务任务的可能不是很多吧,那这个服务任务具体可以用来做什么呢?

当上一个任务节点执行完以后,我们需要流程能够自动地执行一些其它的操作,比如记录日志功能等,自动执行完以后自动的进入一下一个任务节点。接下来我们就以记录日志的功能介绍ServiceTask是如何使用的。

流程设计

编写服务类

public class LogService implements JavaDelegate {

  @Override
  public void execute(DelegateExecution execution) {
    System.out.println("开始记录日志") ;
  }

}

服务类需要继承JavaDelegate接口

为ServiceTask节点配置服务类

方式1:

直接指定服务类

方式2:

设置委托表达式

方式3:

自定义Spring Bean对象中的方法


以上3个方法都是能够执行本地的服务方法。

流程代码

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.st.org">
  <process id="st" name="st" isExecutable="true">
    <startEvent id="startevent1" name="Start"></startEvent>
    <userTask id="usertask1" name="办公用品申请" activiti:assignee="${userId}"></userTask>
    <serviceTask id="servicetask1" name="生成申请日志" activiti:expression="${customService.log(execution)}"></serviceTask>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="servicetask1"></sequenceFlow>
    <endEvent id="endevent1" name="End"></endEvent>
    <userTask id="usertask2" name="部门经理" activiti:assignee="${jl}"></userTask>
    <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>
    <sequenceFlow id="flow4" sourceRef="servicetask1" targetRef="usertask2"></sequenceFlow>
  </process>
  <!-- ... -->
</definitions>

启动流程

@GetMapping("/start")
public R startProcess(String processDefinitionId, String userId) {
  Map<String, Object> variables = new HashMap<>() ;
  variables.put("userId", userId) ;
  // 启动流程实例(同时启动第一步任务,当前启动审批流程及填写审批单一步完成)
  ProcessInstance instance = ps.startProcessInstanceAssignVariables(processDefinitionId, variables) ;
  // 当前执行的任务节点是“员工请假”
  // 设置下一步执行的人
  variables.put("jl", "20000") ;
  ps.executionTask(variables, instance.getId());
  return R.success() ;
}

执行结果:

act_ru_task运行时任务节点表

通过了服务任务然后进入了部门经理节点

ServiceTask服务节点任务到此结束完毕

完毕!!!

求个关注谢谢

Springboot整合工作流引擎Activiti(一)

Springboot整合工作流引擎Activiti(二)

Springboot整合工作流引擎Activiti(三)

Springboot整合工作流引擎Activiti(四)

Springboot整合工作流引擎Activiti(五)之网关路由

ElasticSearch RESTful接口详细说明(一)

SpringCloud Sentinel 整合 zuul

ElasticSearch RESTful接口详细说明(二)

SpringMVC内嵌Tomcat零配置

JavaScript继承与原型链 JavaScript各种技巧操作

Springboot Security 基础应用 (1)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表