flowable 新的驳回方式 ChangeActivityStateBuil…
2019-01-11 08:35:43来源:博客园 阅读 ()
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. 经测试 多实例节点,并行网关,判断网关都没有问题,甚至是子流程的一种节点跳转都有相应的方法
具体怎么使用可以去看官方的测试用例
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Java日期时间API系列31-----Jdk8中java.time包中的新的日期 2020-04-27
- Java日期时间API系列30-----Jdk8中java.time包中的新的日期 2020-04-23
- Java日期时间API系列29-----Jdk8中java.time包中的新的日期 2020-04-17
- springboot之swagger快速启动(新的ui) 2020-02-28
- 《Java 8 in Action》Chapter 12:新的日期和时间API 2020-02-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash