1.安装流程设计器
- 将activiti-designer.zip解压到myeclipse安装目录下的dropins下的activiti-designer文件夹
- 创建activiti.link文件,内容如下
注意:打开菜单Windows->Preferences->Activiti->Save actions, 把bpmn 和.png同步保存
path=C:\Users\qfc\AppData\Local\MyEclipse Professional 2014\dropins\activiti-designer\
2.Activiti介绍
- 工作流引擎 :ProcessEngine ,它是Activiti的核心类,由该类可以获取其他的服务实例
(历史服务、仓库服务、任务服务、用户参与者服务)
- BPMN :UML :用例图、类图、时序图
业务流程建模与标注(Business Process Model and Notation,BPMN) ,
描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram) 数据库
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。
第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应
Activiti的工作流数据库有23张表
要保存流程定义- act_ge_* :通用表
- acthi* :历史流程相关表
- actre* :仓库表:保存流程定义
- actru* :保存流程运行相关的表
- actid* :用户参与相关的表
activiti.cfg.xml
Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接参数3.HelloActiviti程序(模拟Activiti流程执行)
设置流程定义图bpmn
assignee :代理人、指定人、处理人创建流程引擎及工作流数据表
数据库及表可以自动创建,
可以在配置数据库连接时,实现自动创建数据库和表
取得ProcessEngine对象
先取得ProcessEngineConfiguration 对象 ,再由该对象来构建ProcessEngine
- 工作流引擎 :ProcessEngine ,它是Activiti的核心类,由该类可以获取其他的服务实例
部署流程
影响的表:act_re_procdef :流程定义表 :
该表的key属性 是bpmn 的 id决定
该表的name属性 是bpmn 的name 属性决定
act_re_deployment:部署表 :id是由act_ge_property的 next_dbid决定
act_ge_property :通用属性表
启动流程
查看我的个人任务
- 完成我的个人任务
4.代码
public class TestActiviti {
ProcessEngine engine=ProcessEngines.getDefaultProcessEngine();
@Test
// 取得流程引擎,且自动创建Activiti设计的数据库及表
public void createProcessEngine() {
/*方法一
// 取得ProcessEngineeConfiguration对象
ProcessEngineConfiguration engineConfiguration = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
// 设置数据库库连接属性
engineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
engineConfiguration
.setJdbcUrl("jdbc:mysql://localhost:3306/activitiDB?createDatabaseIfNotExist=true"
+ "&useUnicode=true&characterEncoding=utf8");
engineConfiguration.setJdbcUsername("root");
engineConfiguration.setJdbcPassword("21160233099");
// 设置创建表的策略(当没有表时,自动创建表)
// public static final java.lang.String DB_SCHEMA_UPDATE_FALSE =
// "false";
// public static final java.lang.String DB_SCHEMA_UPDATE_CREATE_DROP =
// "create-drop";
// public static final java.lang.String DB_SCHEMA_UPDATE_TRUE = "true";
engineConfiguration.setDatabaseSchemaUpdate("true");
// 通过ProcessEngineConfiguration对象常见ProcessEnginee对象
ProcessEngine processEngine = engineConfiguration.buildProcessEngine();
*/
//方法二
//ProcessEngineConfiguration engineConfiguration=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//ProcessEngine engine=engineConfiguration.buildProcessEngine();
//方法三
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();//默认必须是activiti.cfg.xml方法二可以随意改名
}
//部署流程定义
@Test
public void deploy(){
//取得流程引擎
//获取仓库服务:管理流程定义
RepositoryService repositoryService=engine.getRepositoryService();
repositoryService.createDeployment()//创建一个部署的构建器
.addClasspathResource("diagrams/LeaveBill.bpmn")//从类路径添加资源
.addClasspathResource("diagrams/LeaveBill.png")
.name("请假单流程")//设置部署名称
.category("办公类别")//设置部署的类别
.deploy();
}
//执行流程
@Test
public void startProcess(){
String processKey="leaveBill";
//取运行时服务
RuntimeService runtimeService=engine.getRuntimeService();
//取得流程实例
ProcessInstance pi=runtimeService.startProcessInstanceByKey(processKey);//通过流程定义的key来执行流程
System.out.println(pi.getId()+pi.getProcessDefinitionId());
}
//查询任务
@Test
public void queryTask(){
String name="李四";
//取得任务服务
TaskService taskService=engine.getTaskService();
//创建一个任务查询对象
TaskQuery query=taskService.createTaskQuery();
//办理人的任务列表
List<Task> list=query.taskAssignee(name).list();
for(Task task:list){
System.out.println(task.getAssignee()+" "+task.getId());
}
}
@Test
//完成任务
public void complete(){
String taskID="204";
engine.getTaskService().complete(taskID);
}
}