工作流(activiti7)-进阶使用(子流程CallActivity详细使用)(五)

工作流(activiti7)教程-简单的介绍和使用(一)

工作流(activiti7)教程-简单的介绍和使用(二)

工作流(activiti7)-进阶使用(流程实例,个人任务,组任务)(三)

工作流(activiti7)-进阶使用(流程变量,网关,监听器,拦截器)(四)

工作流(activiti7)-进阶使用(子流程CallActivity详细使用)(五)

子流程:(一个人让另一个人干活,然后这个人最后验收工作),主流程在进行过程中,可能需要一个或者多个其它流程来完成任务的操作。

内嵌子流程(在主流程中嵌套一个流程)如下图,解耦性一般,不详细介绍

唤醒callActivity流程(主流程走到某个节点后唤醒其它子流程,当子流程走完后,主流程继续走。其中子流程可以作为一个独立的流程启动互不影响)

开始使用测试:其中called element  参数是唤醒其它流程填入其它流程的流程定义ID,这里写${call}  是可以动态配置,这样传递哪个流程ID就可以启动哪个流程。in 和out  和交互数据,写上后就会给子流程传递数据,子流程结束后会回传数据。项目运行后在ru_variables 和 hi_variables 表中

主流程图

子流程图 id为 ziliucheng

代码

这个流程图是在启动的时候就需要唤醒子流程,所以在启动的时候配置

    @Test
    public void test3() {

            //开启流程
            String processDefinitionId = "zhuliuchenge";
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("call","ziliucheng");
//            map.put("calle","ziliuchenge");
//            map.put("calls","ziliuchengs");

//        ProcessInstance pi = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
            ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(processDefinitionId,map);
//        ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(processDefinitionId); //多种方式请求
//        ProcessInstance pi  =  pe.getRuntimeService().startProcessInstanceById(processDefinitionId,m);
            System.out.println(pi.getId()+"--"+pi.getProcessDefinitionId()+"--"+pi.getName()+"---"+pi.getStartUserId());

    }

这样启动后 在ru表和hi表就有了子流程数据。

也可以在任务后添加启动子流程设置

    @Test
    public void test5() {
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("call","ziliucheng");
        //执行任务
        String taskId = "160003";
        pe.getTaskService().complete(taskId,map);
//        pe.getTaskService().complete(taskId);
//        pe.getRuntimeService().add

上面是唤醒一个子流程,如果需要唤醒多个就需要启动多次流程实例了。。。

另一种写法:

 这样在启动的时候可以同时唤醒多个子流程每个子流程走完后,主流程任务都会处理下。直到三个子流程结束后,主流程处理完结束。

    @Test
    public void test3() {

            //开启流程
            String processDefinitionId = "zhuliuchenge";
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("call","ziliucheng");
            map.put("calle","ziliuchenge");
            map.put("calls","ziliuchengs");

//        ProcessInstance pi = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
            ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(processDefinitionId,map);
//        ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(processDefinitionId); //多种方式请求
//        ProcessInstance pi  =  pe.getRuntimeService().startProcessInstanceById(processDefinitionId,m);
            System.out.println(pi.getId()+"--"+pi.getProcessDefinitionId()+"--"+pi.getName()+"---"+pi.getStartUserId());

    }

启动的设置多个参数即可。。。。

传递参数和接收参数 in  ,out ,设置后启动callActivity流程的时候 会传入参数,子流程执行完也会返回参数。

运行的时候在以下variables表中 运行和历史表都有

设置这些参数是以 

详细代码 git:  https://github.com/itwsj/activitidemo

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 33
    评论
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值