1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > flowable工作流-BPMN流程部署

flowable工作流-BPMN流程部署

时间:2020-11-16 00:54:07

相关推荐

flowable工作流-BPMN流程部署

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);}

flowApi.deployment

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

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

act_re_procdef:流程定义信息: key和name,对应xml文件中的id和name,类别category:可以用来对流程进行区分tenantId:租户idversion:版本号。如果同一个流程部署多次,那么版本号会递增,后面在发起流程时,会选择版本号最大的流程定义。 act_ge_bytearray:流程资源信息,包括xml文件的信息和对应流程图的信息。act_re_deployment:流程部署信息 name:部署名称deployTime:部署时间

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。