1、流程任务创建:
(1).在项目中创建diagram文件夹,并创建Activiti Diagram文件MyProcess.bpmn:
2、创建MyProcess.bpmn 流程,详情如下:
整体结构示意图:
右击diagram文件夹,新建一个Activiti Diagram 项目
(2).打开MyProcess.bpmn ,画流程图:
首先选择Palette 面板中,事件选项(Event)选择开始事件。,同时编写开始事件相关相关属性值:id = startevent , name= 开始事件
右击开始事件属性,添加一个新任务"请假申请",如下图所示:
同时编辑"请假申请"相关属性信息,同时指定申请人。请求申请相关属性值设置:Id=submitform , Name=请求申请
请求申请指定申请人:Assignee=小王
其他的任务节点依次类推。
2、部署流程
package com.zzg.activiti.datatbase.init;
import java.io.IOException;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.repository.Deployment;
import org.junit.Test;
/**
* activiti 部署流程图
* @author Administrator
*
*/
public class ActivitiProcessDeploy {
public ProcessEngine connectProcessEngine() {
// 创建流程引擎配置
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration();
// 设置数据源
// configuration.setDataSource(dataSource);
// 如果不使用数据源, 可以通过配置连接信息来连接数据库
configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
configuration.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/boot_activiti?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true");
configuration.setJdbcUsername("root");
configuration.setJdbcPassword("123456");
// 设置创建表的一个规则,有三种
// DB_SCHEMA_UPDATE_FALSE = "false" 如果数据库里没有acti相关的表, 也不会创建
// DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop" 不管数据库里有没acti的相关表, 都会先删除旧表再创建新表, 不推荐在生产中使用
// DB_SCHEMA_UPDATE_TRUE = "true" 如果数据库里没有acti相关的表, 会自动创建
// 仔细看看, 是不是有些类似于hibernate里的ddl-auto :)
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 构建流程引擎, 这一步就会创建好表, 但基本上表内都是空的, 因为还没有部署, 再没有流程实例
return configuration.buildProcessEngine();
}
/*
*部署流程定义
*/
@Test
public void deploymentProcessDefinition(ProcessEngine processEngine){
Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
.createDeployment()//创建一个部署对象
.name("Activiti入门")//添加部署名称
.addClasspathResource("diagram/MyProcess.bpmn")//从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("diagram/MyProcess.png")
.deploy();//完成部署
System.out.println(deployment.getId());
System.out.println(deployment.getName());
}
public static void main(String[] args) throws IOException {
ActivitiProcessDeploy deploy = new ActivitiProcessDeploy();
deploy.deploymentProcessDefinition(deploy.connectProcessEngine());
}
}
对应的数据库中的表(act_re_procdef),生成数据:
3、流程任务启动
package com.zzg.activiti.datatbase.init;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.runtime.ProcessInstance;
public class ActivitiProcessStart {
public ProcessEngine connectProcessEngine() {
// 创建流程引擎配置
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration();
// 设置数据源
// configuration.setDataSource(dataSource);
// 如果不使用数据源, 可以通过配置连接信息来连接数据库
configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
configuration.setJdbcUrl(
"jdbc:mysql://127.0.0.1:3306/boot_activiti?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true");
configuration.setJdbcUsername("root");
configuration.setJdbcPassword("123456");
// 设置创建表的一个规则,有三种
// DB_SCHEMA_UPDATE_FALSE = "false" 如果数据库里没有acti相关的表, 也不会创建
// DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop" 不管数据库里有没acti的相关表, 都会先删除旧表再创建新表,
// 不推荐在生产中使用
// DB_SCHEMA_UPDATE_TRUE = "true" 如果数据库里没有acti相关的表, 会自动创建
// 仔细看看, 是不是有些类似于hibernate里的ddl-auto :)
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 构建流程引擎, 这一步就会创建好表, 但基本上表内都是空的, 因为还没有部署, 再没有流程实例
return configuration.buildProcessEngine();
}
public void startProcessInstance(ProcessEngine processEngine) {
// 流程定义的key
String processDefinitionKey = "myProcess";
ProcessInstance processInstance = processEngine.getRuntimeService()// 与正在执行的流程实例和执行对象相关的Service
.startProcessInstanceByKey(processDefinitionKey);// 使用流程定义的key启动流程实例,key对应HelloWorld.bpmn文件中的ID的属性值,使用key值启动,默认是按照最新版本的流程定义启动
System.out.println("流程实例ID:" + processInstance.getId());// 流程实例ID
System.out.println("流程定义ID:" + processInstance.getProcessDefinitionId());// 流程定义ID
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ActivitiProcessStart start = new ActivitiProcessStart();
start.startProcessInstance(start.connectProcessEngine());
}
}
数据库中表(act_ru_execution),可以看到数据生成:
4、查看当前任务
package com.zzg.activiti.datatbase.init;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.task.Task;
public class ActivitiProcessPersonTask {
public ProcessEngine connectProcessEngine() {
// 创建流程引擎配置
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration();
// 设置数据源
// configuration.setDataSource(dataSource);
// 如果不使用数据源, 可以通过配置连接信息来连接数据库
configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
configuration.setJdbcUrl(
"jdbc:mysql://127.0.0.1:3306/boot_activiti?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true");
configuration.setJdbcUsername("root");
configuration.setJdbcPassword("123456");
// 设置创建表的一个规则,有三种
// DB_SCHEMA_UPDATE_FALSE = "false" 如果数据库里没有acti相关的表, 也不会创建
// DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop" 不管数据库里有没acti的相关表, 都会先删除旧表再创建新表,
// 不推荐在生产中使用
// DB_SCHEMA_UPDATE_TRUE = "true" 如果数据库里没有acti相关的表, 会自动创建
// 仔细看看, 是不是有些类似于hibernate里的ddl-auto :)
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 构建流程引擎, 这一步就会创建好表, 但基本上表内都是空的, 因为还没有部署, 再没有流程实例
return configuration.buildProcessEngine();
}
public void findPersonalTask(ProcessEngine processEngine){
String assignee = "田总";
List list = processEngine.getTaskService()//与正在执行任务相关的Service
.createTaskQuery()//创建任务查询对象
.taskAssignee(assignee)//指定个人任务查询,指定办理人
.list();
if(list!=null && list.size()>0){
for(Task task:list){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务创建时间:"+task.getCreateTime());
System.out.println("任务办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ActivitiProcessPersonTask task = new ActivitiProcessPersonTask();
task.findPersonalTask(task.connectProcessEngine());
}
}
控制台结果输出,三个任务结果整合:
数据库中表(act_ru_task),可以查到任务数据:
4、完成当前任务
package com.zzg.activiti.datatbase.init;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
public class ActivitiProcessCompletePersonalTask {
public ProcessEngine connectProcessEngine() {
// 创建流程引擎配置
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration();
// 设置数据源
// configuration.setDataSource(dataSource);
// 如果不使用数据源, 可以通过配置连接信息来连接数据库
configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
configuration.setJdbcUrl(
"jdbc:mysql://127.0.0.1:3306/boot_activiti?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true");
configuration.setJdbcUsername("root");
configuration.setJdbcPassword("123456");
// 设置创建表的一个规则,有三种
// DB_SCHEMA_UPDATE_FALSE = "false" 如果数据库里没有acti相关的表, 也不会创建
// DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop" 不管数据库里有没acti的相关表, 都会先删除旧表再创建新表,
// 不推荐在生产中使用
// DB_SCHEMA_UPDATE_TRUE = "true" 如果数据库里没有acti相关的表, 会自动创建
// 仔细看看, 是不是有些类似于hibernate里的ddl-auto :)
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 构建流程引擎, 这一步就会创建好表, 但基本上表内都是空的, 因为还没有部署, 再没有流程实例
return configuration.buildProcessEngine();
}
public void completePersonalTask(ProcessEngine processEngine, String taskId) {
processEngine.getTaskService()// 与正在执行任务相关的Service
.complete(taskId);
System.out.println("完成任务:任务Id:" + taskId);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ActivitiProcessCompletePersonalTask task = new ActivitiProcessCompletePersonalTask();
task.completePersonalTask(task.connectProcessEngine(), "17503");
}
}