全部开发者教程

企业级在线办公系统

Activiti兼容BPMN1.0和2.0规范,但是建议大家使用BPMN2.0来定义工作流程。之前让大家安装了BPMN设计工具,你把这个工具运行起来,然后我们绘制一个最简单的BPMN流程。

一、设计BPMN

在BPMN设计器上面参照下面的例子,拖拽生成一个工作流程。例如流程的名字叫做“demo_1”,必须设定成可执行的,否则Activiti无法运行这个BPMN文件。

图片描述
上面BPMN流程中的“HelloWorld”是ServiceTask节点。也就是不需要人工干预,可以自动执行的节点。这个节点好像在左侧的工具栏里面没有,它是怎么拖拽生成的呢?你正常拖拽的Task节点都是“UserTask”,鼠标悬停在节点上方,选择扳手选项,里面就有服务节点了。

定义好BPMN文件之后,我们选择下载XML格式的文档,方便我们随时修改文件的内容。

二、修改BPMN文件内容

在IDEA项目中,新建bpmn目录,把下载的XML文件修改名字然后放进去。

打开这个XML文件,然后在里面的根标签上补上两个属性,只有这样做,我们编辑这个文件才会有语法提示。

图片描述
工作流的id和name咱们都统一声明成demo_1,后面启动工作流的时候要用到。

三、定义任务类

我们拖拽的HelloWorld属于ServiceTask,是会自动运行的,不需要人工干预。你想让这个HelloWorld节点执行什么功能,必须要声明Java类,把功能代码写到里面。

com.example.emos.workflow.example.demo_1.task包中创建HelloWorldTask类。

import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;

public class HelloWorldTask implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) {
        System.out.println("HelloWorld");
    }
}

任务类的execute()函数你可以随便写,反正你想让这个任务类执行什么,你就往里面写代码。这里我写的是打印HelloWorld文字,一会看看Activiti执行该任务的时候能不能输出这句话。

接下来我们找到HelloWorld节点,把任务类和它关联在一起。

图片描述

四、部署工作流

在SpringBoot项目中,Activiti会自动扫描processes目录下面的BPMN流程文件,然后部署到MySQL里面。我们创建的bpmn文件夹只是临时存放bpmn文件的,我们把编辑好的bpmn文件拷贝到processes目录,然后启动SpringBoot项目就自动部署了。

启动SpringBoot项目的时候,如果控制台输出了下面的提示信息,说明BPMN文件已经部署成功了。

五、运行工作流

在项目的test目录下创建Demo_1.java测试类,编写Java代码运行工作流。

import org.activiti.engine.RuntimeService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@SpringBootTest
public class Demo_1 {
    @Resource
    private RuntimeService runtimeService;
    @Test
    void run() {
        runtimeService.startProcessInstanceByKey("demo_1").getProcessInstanceId();
    }
}

测试类运行成功之后,在控制台你会看到输出的HelloWorld,也就是说无需人为干预,只要Activiti执行demo_1工作流,就会自动运行服务节点和任务类。
图片描述