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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值