Activiti学习记录(四)
1 连线
注意:如果将流程图放置在和java类相同的路径,需要配置:
1.1 部署流程定义+启动流程实例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /** * 部署流程定义 */ @Test public void deployProcessDefinition() { InputStream inputStream = this.getClass().getResourceAsStream("sequenceFlow.bpmn"); InputStream inputStream2 = this.getClass().getResourceAsStream("sequenceFlow.png"); Deployment deploy = processEngine.getRepositoryService().createDeployment() .name("连线") .addInputStream("sequenceFlow.bpmn", inputStream) .addInputStream("sequenceFlow.png", inputStream2) .deploy(); System.out.println("部署ID:"+deploy.getId()); System.out.println("部署名称:"+deploy.getName()); } /** * 启动实例 */ @Test public void startProcessInstance() { String processDefinitionKey = "sequenceFlow"; ProcessInstance startProcessInstanceByKey = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey); System.out.println("流程实例ID:"+startProcessInstanceByKey.getId()); System.out.println("流程定义ID:"+startProcessInstanceByKey.getProcessDefinitionId()); }
1.2 查询我的个人任务
/** * 查看个人任务 */ @Test public void findMyProcess() { String assignee = "赵六"; List<Task> list = processEngine.getTaskService().createTaskQuery().taskAssignee(assignee).list(); if (list != null && list.size() > 0) { 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()); } } }
1.3 完成任务
/** * 完成任务 */ @Test public void completMyProcess() { String taskId = "3203"; Map<String, Object> variables = new HashMap<>(); variables.put("message", "重要"); processEngine.getTaskService().complete(taskId,variables); System.out.println("完成任务:"+taskId); }
说明:
1)使用流程变量,设置连线需要的流程变量的名称message,并设置流程变量的值
对应:
流程会按照指定的连线完成任务。
2 总结
1、一个活动中可以指定一个或多个SequenceFlow(Start中有一个,End中没有)。
* 开始活动中有一个SequenceFlow 。
* 结束活动中没有SequenceFlow 。
* 其他活动中有1条或多条SequenceFlow
2、如果只有一个,则可以不使用流程变量设置codition的名称;
如果有多个,则需要使用流程变量设置codition的名称。message表示流程变量的名称,‘不重要’表示流程变量的值,${}中间的内容要使用boolean类型的表达式,用来判断应该执行的连线。