zoukankan      html  css  js  c++  java
  • flowable 新的驳回方式 ChangeActivityStateBuilder 多实例驳回 并行网关驳回 普通节点驳回

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

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

  • 相关阅读:
    黑板客爬虫闯关 代码
    新浪云SAE搭建python环境 问题拾遗
    关于python中的字符串编码理解
    linux环境中使用转义字符使命令行字符颜色高亮
    python中list作为全局变量无需global声明的原因
    获取youku视频下载链接(wireshark抓包分析)
    改变linux默认配色方案(dircolors和dircolors-solarized使用)
    限流常规设计和实例
    连接池-Mybatis源码
    Transaction-Mybatis源码
  • 原文地址:https://www.cnblogs.com/liuwenjun/p/10254500.html
Copyright © 2011-2022 走看看