Activiti的学习(二)——核心API及Activiti的HelloWorld程序
一、核心API①ProcessEngine对象 流程引擎对象说明:1) 在Activiti中最核心的类,其他的类都是由他而来。2) 产生方式ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();3)可以产生RepositoryServiceRepositoryService repo...
一、核心API
①ProcessEngine对象 流程引擎对象
说明:
1) 在Activiti中最核心的类,其他的类都是由他而来。
2) 产生方式
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
3)可以产生RepositoryService
RepositoryService repositoryService =processEngine.getRepositoryService();
4) 可以产生 RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
5) 可以产生TaskService
TaskService taskService =processEngine.getTaskService();
各个Service的作用
②RepositoryService
Activiti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片该service可以用来删除部署的流程定义。
③RuntimeService
Activiti的流程执行服务类,可以从这个服务类中获取很多关于流程执行的相关的信息。
④TaskService
Activiti的任务服务类。可以从这个类中获取任务的相关信息,如当前正在执行的个人待办和用户组待办任务。
⑤HistoryService
Activiti的查询历史信息的类,在一个流程执行完成后,这个对象为我们提供查询历史信息,可以跟踪流程实例对应所有待办节点的运行情况。
⑥ProcessDefinition
流程定义类,可以从这里获得资源文件等。
⑦ProcessInstance
代表流程定义的执行实例,当一个部署的流程图启动后,该流程只有一条流程实例数据,但是它的流程任务可以有多个,每个任务对应流程图中相应的流程节点。
二、HelloWorld程序
建立一个请假的流程
在上篇博客中,我已经搭建好环境,也写好配置文件,以及生成了数据库的25张表,这里就不再多说。
首先创建流程图,bpmn:
各节点id和名字,以及处理人:
任务id和名字:
整个流程是这样的:A用户可以提交申请,然后先由B用户审批,B用户审批后,再由C用户审批,C审批后整个流程就完成。
①获取到ProcessEngine核心对象
这里在测试类里面进行,利用注解@Before获取
ProcessEngine processEngine = null;
@Before
public void init(){
processEngine = ProcessEngines.getDefaultProcessEngine();
}
②部署流程定义,即将之前画的流程图部署到数据库
/**
* 部署流程定义(操作数据表:act_re_deployment、act_re_procdef、act_ge_bytearray)
*/
@Test
public void test1(){
RepositoryService service = processEngine.getRepositoryService();
Deployment deployment = service.createDeployment()
.name("helloworld入门")
.addClasspathResource("diagrams/HelloWorld.bpmn")
.addClasspathResource("diagrams/HelloWorld.png")
.deploy();
System.out.println(deployment.getId());
System.out.println(deployment.getName());
}
③查询流程定义列表
/**
* 查询流程定义列表
*/
@Test
public void test2() {
// 流程定义查询对象,用于查询表act_re_procdef
ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
// 添加过滤条件,即根据之前画好的流程图的id来查询
query.processDefinitionKey("HelloWorldKey");
List<ProcessDefinition> list = query.list();
for (ProcessDefinition pd : list) {
System.out.println(pd.getId() + "--" + pd.getName());
}
}
④启动流程实例
/**
* 启动流程实例
* runtimeService.startProcessInstanceByKey("HelloWorldKey")
* 中的HelloWorldKey对应流程图中的ID值,在数据表中对应act_re_procdef流程定义表中的key字段;
* 在act_ru_execution中产生一条数据,这条数据为当前流程正在执行的任务,其中act_id_字段的值对应流程图节点的ID值;
* 在act_ru_task表中会产生一条任务数据,execution_id_对应act_ru_execution主键,proc_inst_id_为流程实例ID,
* name_值为流程节点名称,assignee_字段为该待办当前的处理;
*/
@Test
public void test03(){
String processDefinitionKey = "HelloWorldKey";
//获取正在执行流程实例和执行对象相关的service
RuntimeService runtimeService = processEngine.getRuntimeService();
//使用流程定义key启动流程实例,key对象是HelloWorld.bpmn文件中的ID属性值,对应的是act_re_procdef表中的key
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance.getId()); //流程实例ID
}
⑤查询个人任务列表,即查询A用户可以操作的流程,即A用户可以提交申请
/**
* 查询个人任务列表
*/
@Test
public void test04() {
TaskQuery query = processEngine.getTaskService().createTaskQuery();
String assignee = "A";
query.taskAssignee(assignee);
List<Task> list = query.list();
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());
}
}
⑥办理任务,即A用户提交请假申请,使用的是待办任务的id
/**
* 办理任务
* taskId对应act_ru_task表的主键ID,因为当前待办任务为第一个节点提交申请,
* 当执行完这个待办后下一条待办数据将会流转到审批【部门经理】那,然后以此类推
* 可以将部门经理和总经理的待办任务全部查询和执行完成。
*/
@Test
public void test05(){
String taskId= "2504";
processEngine.getTaskService().complete(taskId);
System.out.println("办理完成,任务ID是:"+taskId);
}
此时流程会自动提交给B用户,到⑤处执行查询B用户的流程,就可以看到,B用户有了需要办理的流程
/**
* 查询个人任务列表
*/
@Test
public void test04() {
TaskQuery query = processEngine.getTaskService().createTaskQuery();
String assignee = "B";
query.taskAssignee(assignee);
List<Task> list = query.list();
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());
}
}
然后B用户去处理该流程,即⑥
/**
* 办理任务
* taskId对应act_ru_task表的主键ID,因为当前待办任务为第一个节点提交申请,
* 当执行完这个待办后下一条待办数据将会流转到审批【部门经理】那,然后以此类推
* 可以将部门经理和总经理的待办任务全部查询和执行完成。
*/
@Test
public void test05(){
String taskId= "5002";
processEngine.getTaskService().complete(taskId);
System.out.println("办理完成,任务ID是:"+taskId);
}
然后流程又会提交到C用户,C用户也可以查询到需要处理的流程任务
/**
* 查询个人任务列表
*/
@Test
public void test04() {
TaskQuery query = processEngine.getTaskService().createTaskQuery();
String assignee = "C";
query.taskAssignee(assignee);
List<Task> list = query.list();
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());
}
}
C用户处理路程任务:
/**
* 办理任务
* taskId对应act_ru_task表的主键ID,因为当前待办任务为第一个节点提交申请,
* 当执行完这个待办后下一条待办数据将会流转到审批【部门经理】那,然后以此类推
* 可以将部门经理和总经理的待办任务全部查询和执行完成。
*/
@Test
public void test05(){
String taskId= "7502";
processEngine.getTaskService().complete(taskId);
System.out.println("办理完成,任务ID是:"+taskId);
}
至此,整套流程执行完毕。
小结:
1.Activiti框架提供的Service对象
RepositoryService----操作静态的资源(流程定义,bpmn、png)
RuntimeService-----操作流程实例(启动流程实例、查询流程实例、结束流程实例)
TaskService-----操作任务(查询任务、办理任务)
HistoryService----操作历史数据
2.Activiti框架提供的对象(和表有对应关系)
Deployment-----act_re_deployment
ProcessDefinition----act_re_procdef
ProcessInstance-----act_ru_execution
Task-----act_ru_task
更多推荐
所有评论(0)