首页 >> 大全

flowable工作流-BPMN流程部署

2023-07-27 大全 38 作者:考证青年

BPMN相关基础

在画流程图之前,首先需要了解BPMN的一些基础知识:开始、结束事件、用户任务、任务受让人、任务审核人、网关等一些基础知识,具体可以参考官方文档,介绍的很详细,也比较容易理解。BPMN介绍

画流程图

画流程图我是通过在线工具进行编辑。工作流在线编辑

简单的模拟了一个请假的流程图:任何一个流程都有开始节点和结束节点。发起人节点发起请假申请后,到达网关节点,根据请假天数,来判断需要组长或经理审批,组长或经理审批完成后,任务到达结束节点,流程结束。图例中,左侧有一些BPMN基本的组件,包括任务,网关、定时器,虽然不太全,不过可以完成日常的简单工作流程。当流程图画完后,点击xml页签,会有对应的xml信息。可以拷贝到我们的项目中,一个简单的流程就算设计完成。

部署 相关API

      Deployment deploy = repositoryService.createDeployment().name(deploymentVo.getName())//部署名称.category(deploymentVo.getCategory())//类别.key(deploymentVo.getKey())//部署key.tenantId(deploymentVo.getTenantId())//租户Id.addInputStream(deploymentVo.getResourceName(),inputStream)//.addClasspathResource("path") 类文件资源.deploy();

部署可以通过类路径资源的方式,也可以通过文件流的方式两者类似。在项目中,我是通过上传文件上传的方式进行。在部署时,会首先验证文件是不是符合规范。

    @PostMapping("/uploadAndDeploy")public CommonResult uploadAndDeploy(@RequestParam("file") MultipartFile multipartFile, ActReDeploymentParam param)  {CommonResult result= CommonResult.error();try {result =  deploymentService.createDeploy(param, multipartFile);} catch (IOException e) {e.printStackTrace();} catch (XMLStreamException e) {e.printStackTrace();}return result;}

 public CommonResult createDeploy(ActReDeploymentParam info, MultipartFile multipartFile) throws IOException, XMLStreamException {String filename = multipartFile.getResource().getFilename();if(!filename.endsWith("bpmn20.xml")){return CommonResult.error("文件格式错误",null);}InputStream inputStream = multipartFile.getInputStream();XMLInputFactory xif = new XMLInputFactoryImpl();InputStreamReader xmlIn = new InputStreamReader(inputStream, "UTF-8");XMLStreamReader xtr =xif.createXMLStreamReader(xmlIn);BpmnModel bpmnModel = bpmnXmlConverter.convertToBpmnModel(xtr);//校验文件ProcessValidator validator = new ProcessValidatorFactory().createDefaultProcessValidator();List<ValidationError> errors = validator.validate(bpmnModel);if(!ObjectUtil.isEmpty(errors)){StringBuffer es = new StringBuffer();errors.forEach(ve -> es.append(ve.toString()).append("/n"));return CommonResult.error(errors);}Process mainProcess = bpmnModel.getMainProcess();String fileName = mainProcess.getName();if (StrUtil.isEmpty(fileName)) {return CommonResult.error(Const.ERROR_MSG,"\"No process found in definition \" + fileName");}info.setName(mainProcess.getName());info.setKey(mainProcess.getId());info.setResourceName(filename);InputStream sourceStream= multipartFile.getInputStream();Deployment deploy= flowApi.deployment(info,sourceStream);return CommonResult.success(deploy);}

.

Deployment deploy = repositoryService.createDeployment().name(deploymentVo.getName()).category(deploymentVo.getCategory()).key(deploymentVo.getKey()).tenantId(deploymentVo.getTenantId()).addInputStream(deploymentVo.getResourceName(),inputStream)//.addClasspathResource("path") 类文件资源.deploy();

发布成功后,数据库生成关于该流程的定义信息。主要涉及到的表:

:流程定义信息: :流程资源信息,包括xml文件的信息和对应流程图的信息。:流程部署信息

最后,如果有其他问题,欢迎加qq群交流~

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了