12.activiti工作流-接收活动(receiveTask,即等待活动)

来源:互联网 发布:怎么查手机网络制式 编辑:程序博客网 时间:2024/04/29 14:49

接收任务是一个简单任务,它会等待对应消息的到达。 当前,官方只实现了这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。
在任务创建后,意味着流程会进入等待状态, 直到引擎接收了一个特定的消息, 这会触发流程穿过接收任务继续执行。

流程图

这里写图片描述

部署流程定义+启动流程实例

/**     * ReceiceTask任务,机器自动完成的任务     * 只会在act_ru_execution表中产生一条数据     * @throws Exception     */    @Test    public void testExecution() throws Exception {        // 1 发布流程        InputStream inputStreamBpmn = this.getClass().getResourceAsStream("receiveTask.bpmn");        InputStream inputStreamPng = this.getClass().getResourceAsStream("receiveTask.png");        processEngine.getRepositoryService()//                        .createDeployment()//                        .addInputStream("receiveTask.bpmn", inputStreamBpmn)//                        .addInputStream("receiveTask.png", inputStreamPng)//                        .deploy();        // 2 启动流程        ProcessInstance pi = processEngine.getRuntimeService()//                            .startProcessInstanceByKey("receiveTaskDemo");        System.out.println("pid:" + pi.getId());        String pid = pi.getId();        // 3查询是否有一个执行对象在描述”汇总当日销售额“        Execution e1 = processEngine.getRuntimeService()//                        .createExecutionQuery()//                        .processInstanceId(pid)//                        .activityId("汇总当日销售额")//                        .singleResult();        // 4执行一堆逻辑,并设置流程变量        Map<String,Object> vars = new HashMap<String, Object>();        vars.put("当日销售额", 10000);        //  5流程向后执行一步:往后推移e1,使用signal给流程引擎信号,告诉他当前任务已经完成了,可以往后执行        processEngine.getRuntimeService()                .signal(e1.getId(),vars);        // 6判断当前流程是否在”给老板发短信“节点        Execution e2 = processEngine.getRuntimeService()//                        .createExecutionQuery()//                        .processInstanceId(pid)//                        .activityId("给总经理发短信")//                        .singleResult();        // 7获取流程变量        Integer money = (Integer) processEngine.getRuntimeService()//                                .getVariable(e2.getId(), "当日销售额");        System.out.println("老板,今天赚了" +money);        // 8向后执行一步:任务完成,往后推移”给老板发短信“任务        processEngine.getRuntimeService()//                .signal(e2.getId());        // 9查询流程状态        pi = processEngine.getRuntimeService()//                        .createProcessInstanceQuery()//                        .processInstanceId(pid)//                        .singleResult();        if(pi==null){                System.out.println("流程正常执行!!!,已经结束了");        }    }

说明:
1)当前任务(一般指机器自动完成,但需要耗费一定时间的工作)完成后,向后推移流程,可以调用runtimeService.signal(executionId),传递接收执行对象的id。

阅读全文
0 0
原创粉丝点击