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、一个活动中可以指定一个或多个SequenceFlowStart中有一个,End中没有)。

  * 开始活动中有一个SequenceFlow

  * 结束活动中没有SequenceFlow

  * 其他活动中有1条或多条SequenceFlow

2、如果只有一个,则可以不使用流程变量设置codition的名称;

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

原文地址:https://www.cnblogs.com/FanJava/p/9296064.html