码迷,mamicode.com
首页 > 其他好文 > 详细

flowable 新的驳回方式 ChangeActivityStateBuilder

时间:2019-01-11 13:08:43      阅读:918      评论:0      收藏:0      [点我收藏+]

标签:商业   roc   没有   pre   current   def   image   isp   电机   

6.4.0 新增加了驳回的方式,真是对中国式流程的一种福音呀,感谢flowable创始人。

再也不为开发驳回流程发愁了,网上那些视频和修改源码真的是demo级别的,不能商业用。

只有心如流水的学习才是永远的发电机,不要幻想别人能给把系统都给你做好了。

任何节点都可以跳转

runtimeService.createChangeActivityStateBuilder()
                .processInstanceId(processInstanceId)
                .moveActivityIdsToSingleActivityId("当前的任务的节点id", "需要跳转的目标节点")
                .changeState();

当然有很多方法,大家可以去找一下ChangeActivityStateBuilder这里类。

1. 直接上代码吧,从来都是干货,不隐藏,哈哈。

public ReturnVo<String> backToStep(BackVo backVo) throws Exception {
        ReturnVo<String> returnVo = new ReturnVo<>(FlowConstant.SUCCESS, "OK");
        Task task = taskService.createTaskQuery().taskId(backVo.getTaskId()).singleResult();
        String processInstanceId = task.getProcessInstanceId();
        FlowElement distActivity = processDefinitionUtils.findFlowElementById(task.getProcessDefinitionId(), backVo.getDistFlowElementId());
        //1. 保存任务信息
        task.setAssignee(backVo.getUserCode());
        taskService.saveTask(task);
        //2. 如果上一个节点是提交者的话要处理一下
        if (FlowConstant.FLOW_SUBMITTER.equals(distActivity.getName())) {
            //查找发起人 设置到变量中,以便驳回到提起人的时候能留在提交人这个节点
            ExtendProcinst extendProcinst = this.extendProcinstService.findExtendProcinstByProcessInstanceId(processInstanceId);
            String creator = null;
            if (extendProcinst != null) {
                creator = extendProcinst.getCreator();
                if (StringUtils.isBlank(creator)) {
                    creator = extendProcinst.getCurrentUserCode();
                }
            } else {
                ExtendHisprocinst extendHisprocinst = extendHisprocinstService.getExtendHisprocinstByProcessInstanceId(processInstanceId);
                creator = extendHisprocinst.getCreator();
                if (StringUtils.isBlank(creator)) {
                    creator = extendHisprocinst.getCurrentUserCode();
                }
            }
            if (StringUtils.isNotBlank(creator)) {
                runtimeService.setVariable(processInstanceId, FlowConstant.FLOW_SUBMITTER_VAR, creator);
            }
        }
        List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
        List<String> currentActivityIds = new ArrayList<>();
        tasks.forEach(t -> currentActivityIds.add(t.getTaskDefinitionKey()));
        //3. 删除节点信息
        if (!(distActivity instanceof EndEvent)) {
            this.deleteHisActivities((Activity) distActivity, processInstanceId);
        }
        //4. 添加审批意见和修改流程状态
        this.addCommentAndUpdateProcessStatus(backVo, processInstanceId);
        //5.执行驳回操作
        runtimeService.createChangeActivityStateBuilder()
                .processInstanceId(processInstanceId)
                .moveActivityIdsToSingleActivityId(currentActivityIds, backVo.getDistFlowElementId())
                .changeState();
        return returnVo;
    }

2. 经测试  多实例节点,并行网关,判断网关都没有问题,甚至是子流程的一种节点跳转都有相应的方法

具体怎么使用可以去看官方的测试用例

技术分享图片

 

flowable 新的驳回方式 ChangeActivityStateBuilder

标签:商业   roc   没有   pre   current   def   image   isp   电机   

原文地址:https://www.cnblogs.com/liuwenjun/p/10254500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!