activiti部署、执行,完成简单示例

在工作流中,我们一切工作流的基本就是工作引擎(ProcessEngine),继承于EngineService接口,包括流程部署,数据库连接都是靠着ProcessEngine来实现的。而ProcessEngineConfiguration:流程引擎配置,可以设置数据库等,默认的数据库是h3,持久化实现使用的Mybatis,这里我们用的是MySQL。

站在用户的角度思考问题,与客户深入沟通,找到丰都网站设计与丰都网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广、域名申请、网页空间、企业邮箱。业务覆盖丰都地区。

       那么既然无论是jbpm或者是activiti都需要ProcessEngine来驱动,那么我们就说一下工作流引擎的使用吧。

       流程部署

       当我们将我们的业务画成图的时候,然后利用工作流引擎部署,也就是将我们的流程图信息放到数据库,图和代码如下:

         activiti部署、执行,完成简单示例

act_hi_taskinst:已经执行完的历史任务信息
act_hi_procinst:流程实例的历史表,存放执行完毕的流程实例信息

act_hi_actinst:存放历史所有完成的活动

           现在我们对表有一个大致的了解,那么接下来我们就按照我们既定的流程去执行我们的请假,例如第一个项目经理叫张三,那么这个流程实例已启动,首先需要张三去执行操作,那么我们我们看一下张三的执行任务的详情,代码如下:

[java]view plain copy

  1. /** 

  2.      * 查找个人当前的要执行的任务 

  3.      */  

  4.     @Test  

  5.     public void findMyTaskInfo(){  

  6.         String assignee = "张三";  

  7.         List listTask = processEngine.getTaskService()  

  8.             .createTaskQuery()  

  9.             .taskAssignee(assignee)  

  10.             .list();  

  11.           

  12.         if (listTask!= null && listTask.size() >0) {  

  13.             for (Task task : listTask) {  

  14.                 System.out.println("任务ID:" + task.getId());  

  15.                 System.out.println("任务名称:" + task.getName());  

  16.                 System.out.println("任务时间:" + task.getCreateTime());  

  17.                 System.out.println("任务的班里人:" + task.getAssignee());  

  18.                 System.out.println("任务的实例ID:" + task.getProcessDefinitionId());  

  19.                 System.out.println("执行对象的ID:" + task.getExecutionId());  

  20.                 System.out.println("任务的班里人:" + task.getAssignee());  

  21.                 System.out.println("流程定义ID:" + task.getProcessInstanceId());  

  22.             }  

  23.         }  

  24.               

  25.           

  26.     }  

       打印信息如下:任务ID:304,任务名称:【项目经理】审批,任务时间:Sat Jan 23 14:54:35 CST 2016,任务的班里人:张三 任务的实例ID:LeaveBill:2:204     执行对象的ID:301   任务的班里人:张三  流程定义ID:301

       任务完成

        那么接下来我就把任务ID为304的一个流程结束,也就是项目经理同意请假,代码如下:

[java]view plain copy

  1. /**完成任务*/  

  2. @Test  

  3. public void completeMyPersoinTask() {  

  4.     String taskId = "304";  

  5.     processEngine.getTaskService()  

  6.     .complete(taskId);  

  7.       

  8.     System.out.println("完成任务,任务ID:" + taskId);  

  9. }  

        然后我继续执行查询个人任务的时候,我们只能查到主任的任务了,因为项目经理已经执行完毕,所以当前执行的任务是看不到的,但是在历史信息中是存在的。

       如果我们启动了实例的话,查询当前信息的话,实在act_ru_*的表中查询,根据任务有关的服务,都是taskService,当然Activiti还有很多的服务,例如RepositoryService,RuntimeService, HistoryService等服务。

      大致总结一下,就是先部署,再启动,个人登陆系统后,根据个人姓名,查到任务ID,完成个人任务,直到全部完成


分享标题:activiti部署、执行,完成简单示例
URL链接:http://myzitong.com/article/jsichg.html