Activiti(十一)连线

原文链接



注意:如果将流程图放置在和java类相同的路径,需要配置:


2/部署流程定义启动流程实例

[java]  view plain  copy
  1. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  
  2.   
  3. /**部署流程定义(从inputStream)*/  
  4. @Test  
  5. public void deploymentProcessDefinition_inputStream(){  
  6.     InputStream inputStreamBpmn = this.getClass().getResourceAsStream("sequenceFlow.bpmn");  
  7.     InputStream inputStreamPng = this.getClass().getResourceAsStream("sequenceFlow.png");  
  8.     Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service  
  9.                     .createDeployment()//创建一个部署对象  
  10.                     .name("连线")//添加部署的名称  
  11.                     .addInputStream("sequenceFlow.bpmn", inputStreamBpmn)//  
  12.                     .addInputStream("sequenceFlow.png", inputStreamPng)//  
  13.                     .deploy();//完成部署  
  14.     System.out.println("部署ID:"+deployment.getId());//  
  15.     System.out.println("部署名称:"+deployment.getName());//  
  16. }  
    部署ID:1901
    部署名称:连线

[java]  view plain  copy
  1. /**启动流程实例*/  
  2. @Test  
  3. public void startProcessInstance(){  
  4.     //流程定义的key  
  5.     String processDefinitionKey = "sequenceFlow";  
  6.     ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service  
  7.                     .startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动  
  8.     System.out.println("流程实例ID:"+pi.getId());//流程实例ID    101  
  9.     System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID   helloworld:1:4  
  10. }  
   流程实例ID:2001
   流程定义ID:sequenceFlow:1:1904


[java]  view plain  copy
  1.     /**查询当前人的个人任务*/  
  2.     @Test  
  3.     public void findMyPersonalTask(){  
  4.         String assignee = "赵六";  
  5.         List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service  
  6.                         .createTaskQuery()//创建任务查询对象  
  7.                         /**查询条件(where部分)*/  
  8.                         .taskAssignee(assignee)//指定个人任务查询,指定办理人  
  9. //                      .taskCandidateUser(candidateUser)//组任务的办理人查询  
  10. //                      .processDefinitionId(processDefinitionId)//使用流程定义ID查询  
  11. //                      .processInstanceId(processInstanceId)//使用流程实例ID查询  
  12. //                      .executionId(executionId)//使用执行对象ID查询  
  13.                         /**排序*/  
  14.                         .orderByTaskCreateTime().asc()//使用创建时间的升序排列  
  15.                         /**返回结果集*/  
  16. //                      .singleResult()//返回惟一结果集  
  17. //                      .count()//返回结果集的数量  
  18. //                      .listPage(firstResult, maxResults);//分页查询  
  19.                         .list();//返回列表  
  20.         if(list!=null && list.size()>0){  
  21.             for(Task task:list){  
  22.                 System.out.println("任务ID:"+task.getId());  
  23.                 System.out.println("任务名称:"+task.getName());  
  24.                 System.out.println("任务的创建时间:"+task.getCreateTime());  
  25.                 System.out.println("任务的办理人:"+task.getAssignee());  
  26.                 System.out.println("流程实例ID:"+task.getProcessInstanceId());  
  27.                 System.out.println("执行对象ID:"+task.getExecutionId());  
  28.                 System.out.println("流程定义ID:"+task.getProcessDefinitionId());  
  29.                 System.out.println("########################################################");  
  30.             }  
  31.         }  
  32.     }  

任务ID:2004
任务名称:审批【部门经理】
任务的创建时间:Sun Sep 11 14:24:34 CST 2016
任务的办理人:赵六
流程实例ID:2001
执行对象ID:2001
流程定义ID:sequenceFlow:1:1904
########################################################

[java]  view plain  copy
  1. /**完成我的任务*/  
  2. @Test  
  3. public void completeMyPersonalTask(){  
  4.     //任务ID  
  5.     String taskId = "2004";  
  6.     //完成任务的同时,设置流程变量,使用流程变量用来指定完成任务后,下一个连线,对应sequenceFlow.bpmn文件中${message=='不重要'}  
  7.     Map<String, Object> variables = new HashMap<String, Object>();  
  8.     variables.put("message""重要");  
  9.     processEngine.getTaskService()//与正在执行的任务管理相关的Service  
  10.                 .complete(taskId,variables);  
  11.     System.out.println("完成任务:任务ID:"+taskId);  
  12. }  
说明:
  1)使用流程变量,设置连线需要的流程变量的名称message,并设置流程变量的值
对应:

流程会按照指定的连线完成任务。


总结
1、一个活动中可以指定一个或多个SequenceFlow(Start中有一个,End中没有)。
  * 开始活动中有一个SequenceFlow 。
  * 结束活动中没有SequenceFlow 。
  * 其他活动中有1条或多条SequenceFlow
2、如果只有一个,则可以不使用流程变量设置codition的名称;


    如果有多个,则需要使用流程变量设置codition的名称。message表示流程变量的名称,‘不重要’表示流程变量的值,${}中间的内容要使用boolean类型的表达式,用来判断应该执行的连线。




猜你喜欢

转载自blog.csdn.net/newhanzhe/article/details/80643982
今日推荐