工作流Activity框架入门(一) Activity工作流入门 1. 工作流概念 2. Activiti简介 3. 安装插件(流程设计器插件) 4.手动创建数据库表 6.入门Demo

1. 工作流概念

工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。

 

工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

 

2. Activiti简介

Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。

Activiti框架底层有数据库提供支持,根据版本不同,表的数量不一致,activiti5.13有23张表。底层使用mybatis操作数据库,开发人员不需要自己编写sql

Jbpm4.4底层也有数据库支持,18张表。 底层使用hibernate操作数据库。

 

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。

1) ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。

2) ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

3) ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。

4) ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。

5) ACT_GE_*: 通用数据, 用于不同场景下。

工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo

3. 安装插件(流程设计器插件)

第一步:解压zip文件到eclipse中的dropins目录中

工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo

第二步:重启eclipse,勾选save选项

工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo

第三步:使用插件设计流程图

工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo

4.手动创建数据库表

Activity自带建表脚本,选择手动建表的话,只需要选取对应数据库的脚本即可,里面包含的Create、upgrade和drop相关脚本(upgrade脚本是用于工作流版本升级时候用的),当然Activity也支持自动建表,可以参考下面的DEMO,但是不建议自动建表,本案例用的是mysql,所以我选取的是mysql的脚本

工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo

工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo
创建后应该可以看到有23张表,本教程使用的是Activity5.13
工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo
5.自定义流程

右击工程->NEW->Other->Activity->Activity Diagram,新建一个工作流模板
工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo
然后就可以开始拖拉控件设计流程了,设计好的流程,只要通过发布操作,就可以自动在数据库插入相应数据,可参考下面demo,以下是一个简单的流程:
工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo

6.入门Demo

package activity.demo.test;

import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.impl.juel.ExpressionFactoryImpl.Profile;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.Test;
import org.junit.validator.PublicClassValidator;


public class HelloWorld {
	// 使用框架的自动建表功能(不提供配置文件)
	@Test
	public void testCreateTablesAutomaticallyWithoutConfigFiles() {
		// 创建流程引擎配置对象
		ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
		// 设置jdbc连接参数信息
		config.setJdbcDriver("com.mysql.jdbc.Driver");
		config.setJdbcUrl("jdbc:mysql:///eam-mirror");
		config.setJdbcUsername("root");
		config.setJdbcPassword("root");
		// 设置自动建表
		config.setDatabaseSchemaUpdate("true");
		// 使用配置对象创建流程引擎对象,创建对象过程中会自动建表
		ProcessEngine processEngine = config.buildProcessEngine();
	}

	// 使用框架的自动建表功能(提供配置文件)
	@Test
	public void testCreateTablesAutomaticallyWithConfigFiles() {
		ProcessEngineConfiguration config = ProcessEngineConfiguration
				.createProcessEngineConfigurationFromResource("activiti-context.xml", "processEngineConfiguration");
		ProcessEngine pe = config.buildProcessEngine();
	}

	// 使用框架的自动建表功能(提供配置文件---使用默认配置)
	@Test
	public void testCreateTablesAutomatically() {
		ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
	}

	ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();

	// 将设计的流程图部署到数据库中
	@Test
	public void testDeploy() {
		// 创建部署构建器对象,用于加载流程定义文件(UserInfoAudit.bpmn,UserInfoAudit.myProcess.png),部署流程定义
		DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
		deploymentBuilder.addClasspathResource("UserInfoAudit.bpmn");
		Deployment deployment = deploymentBuilder.deploy();
		System.out.println(deployment.getId());
	}

	// 查询流程定义
	@Test
	public void testQueryProcessDefinition() {
		// 流程定义查询对象,用于查询流程定义表----act_re_procdef
		ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
		// 添加过滤条件,取最新版本
		query.latestVersion();
		// query.processDefinitionId(processDefinitionId)
		// query.processDefinitionKey(processDefinitionKey);
		// 添加排序条件
		query.orderByProcessDefinitionVersion().desc();

		// 添加分页条件
		// query.listPage(firstResult, maxResults);

		// 查询所有流程
		List<ProcessDefinition> processDefinitionList = query.list();
		for (ProcessDefinition pd : processDefinitionList) {
			System.out.println(pd.getId());
		}

	}
	// 根据流程定义启动流程实例----操作的数据表:act_ru_execution act_ru_task
	@Test
	public void testStartProcess(){
		String processDefinitionId = "UserAuditProcess:2:504";
		//根据流程实例ID去启动流程
		ProcessInstance pInstance = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
		System.out.println(pInstance.getId());
	}
	
	//查询任务列表
	@Test
	public void testQueryTaskList(){
		//创建任务查询对象,查询表act_ru_task
		TaskQuery query = pe.getTaskService().createTaskQuery();
		String assignee ="张三";
		//添加过滤条件
		query.taskAssignee(assignee);
		//排序
		query.orderByTaskCreateTime().desc();
		List<Task> taskList = query.list();
		for(Task task : taskList){
			System.out.println("taskId:"+task.getId()+",taskName:"+task.getName());
		}
	}
	//办理任务
	//办理个人任务,操作的表是act_ru_execution,act_ru_task
	@Test
	public void testExecuteTask(){
		String taskId= "604";
		pe.getTaskService().complete(taskId);
	}
	
}


7.Activity框架学习指南
工作流Activity框架入门(一)
Activity工作流入门
1. 工作流概念
2. Activiti简介
3. 安装插件(流程设计器插件)
4.手动创建数据库表
6.入门Demo