在工作流中,我们一切工作流的基本就是工作引擎(ProcessEngine),继承于EngineService接口,包括流程部署,数据库连接都是靠着ProcessEngine来实现的。而ProcessEngineConfiguration:流程引擎配置,可以设置数据库等,默认的数据库是h3,持久化实现使用的Mybatis,这里我们用的是MySQL。
站在用户的角度思考问题,与客户深入沟通,找到丰都网站设计与丰都网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广、域名申请、网页空间、企业邮箱。业务覆盖丰都地区。
那么既然无论是jbpm或者是activiti都需要ProcessEngine来驱动,那么我们就说一下工作流引擎的使用吧。
当我们将我们的业务画成图的时候,然后利用工作流引擎部署,也就是将我们的流程图信息放到数据库,图和代码如下:
act_hi_taskinst:已经执行完的历史任务信息
act_hi_procinst:流程实例的历史表,存放执行完毕的流程实例信息
act_hi_actinst:存放历史所有完成的活动
现在我们对表有一个大致的了解,那么接下来我们就按照我们既定的流程去执行我们的请假,例如第一个项目经理叫张三,那么这个流程实例已启动,首先需要张三去执行操作,那么我们我们看一下张三的执行任务的详情,代码如下:
[java]view plain copy
/**
* 查找个人当前的要执行的任务
*/
@Test
public void findMyTaskInfo(){
String assignee = "张三";
List
.createTaskQuery()
.taskAssignee(assignee)
.list();
if (listTask!= null && listTask.size() >0) {
for (Task task : listTask) {
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.getProcessDefinitionId());
System.out.println("执行对象的ID:" + task.getExecutionId());
System.out.println("任务的班里人:" + task.getAssignee());
System.out.println("流程定义ID:" + task.getProcessInstanceId());
}
}
}
打印信息如下:任务ID:304,任务名称:【项目经理】审批,任务时间:Sat Jan 23 14:54:35 CST 2016,任务的班里人:张三 任务的实例ID:LeaveBill:2:204 执行对象的ID:301 任务的班里人:张三 流程定义ID:301
那么接下来我就把任务ID为304的一个流程结束,也就是项目经理同意请假,代码如下:
[java]view plain copy
/**完成任务*/
@Test
public void completeMyPersoinTask() {
String taskId = "304";
processEngine.getTaskService()
.complete(taskId);
System.out.println("完成任务,任务ID:" + taskId);
}
然后我继续执行查询个人任务的时候,我们只能查到主任的任务了,因为项目经理已经执行完毕,所以当前执行的任务是看不到的,但是在历史信息中是存在的。
如果我们启动了实例的话,查询当前信息的话,实在act_ru_*的表中查询,根据任务有关的服务,都是taskService,当然Activiti还有很多的服务,例如RepositoryService,RuntimeService, HistoryService等服务。
大致总结一下,就是先部署,再启动,个人登陆系统后,根据个人姓名,查到任务ID,完成个人任务,直到全部完成