1.以IDEA为例创建流程定义的bpmn文件
具体操作安装插件等步骤可见 IDEA教程之Activiti插件
创建一个请假单的流程:可用插件定义流程文件,并设置每个UserTask的办理人
####################################################################################################创建完毕将后缀改为bpmn20.xml(注意流程引擎的RepositoryService在读取流程定义文件是只能识别bpmn20.xml或者.bpmn结尾的文件)
####################################################################################################
流程如下:
2.Java测试Activiti API代码
public class ServiceTest {
private ProcessEngine processEngine = JdbcTest.getProcessEngine();
/**
* 部署流程定义
*/
@Test
public void test(){
Deployment deploy = processEngine.getRepositoryService()
.createDeployment()
.name("请假流程单")
.addClasspathResource("process/leavebpmn20.xml")
.deploy();
System.out.println(deploy.getId()+" "+deploy.getName());
}
/**
* 启动流程实例
*/
@Test
public void test1(){
ProcessInstance instance = processEngine.getRuntimeService()
//推荐以流程实例的key启动,会启动最新版本的流程定义
.startProcessInstanceByKey("helloworld");
System.out.println(instance.getId()+" "+instance.getActivityId());
System.out.println(instance.getProcessDefinitionId());
}
/**
* 查询个人任务
*/
@Test
public void test2(){
List<Task> tasks = processEngine.getTaskService().createTaskQuery().taskAssignee("王五").list();
for(Task t:tasks){
System.out.println(t.getAssignee());
System.out.println(t.getExecutionId());
System.out.println(t.getProcessInstanceId());
System.out.println(t.getProcessDefinitionId());
System.out.println(t.getTaskDefinitionKey());
System.out.println(t.getId());
System.out.println(t.getName());
System.out.println();
}
}
/**
* 完成我的任务
*/
@Test
public void test3(){
processEngine.getTaskService().complete("7502");
}
}
按照流程定义的办理人顺序进行测试 可观察到23张表的具体变化:
部署流程定义时会操作以act_re开头的表;
当启动流程时,不仅操作了以act_ru开头的表,还对act_hi开头的表进行了插入操作;
当完成个人任务时观察act_hi开头的表可发现,没完成任务之前表中的end_time_字段为null,完成后更新了这个值还有其他一些信息。