Activiti流程引擎无XML文件完成流程设计和部署工作的实现方式(Activiti-Modeler设计工具的JSON转XML)

 

前提:

1. 已经部署Activiti-Modeler设计工具

2. 已经完成配置和部署Activiti流程引擎

3. 能够正常通过Modeler设计工具完成创建流程图并保存到数据库

如果以上项目还未完成,请参考本专栏其他相关文章(还没写呢)

正文

众所周知,Activiti-Explorer设计工具生成的是JSON格式数据,但是睿智的Activiti引擎的RepositoryService在部署流程时是不认自家设计器生成的JSON数据的,所以当我们妄图通过设计器直接完成流程的部署时就会非常的尴尬。

但是天无绝人之路,Activiti提供了BpmnJsonConverter工具和BpmnXMLConverter工具,由设计工具产出的JSON格式数据可以通过BpmnJsonConverter工具先转换成BpmnModel对象,然后通过BpmnModel对象转换为XML数据(其实BpmnModel对象是可以直接部署的,但是如果需要保存和传输XML数据的话就不太方便了)

使用方法如下:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

//先以model id作为查询参数得到Model对象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        ModelQuery modelQuery = repositoryService.createModelQuery().modelId(id);
        Model model = modelQuery.singleResult();
        if (model == null) {
            return null;
        }
//jackson把Model对象转为JSON对象
        ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(
                new String(repositoryService.getModelEditorSource(model.getId()), StandardCharsets.UTF_8));
//先转为BpmnModel
        BpmnJsonConverter converter = new BpmnJsonConverter();
        BpmnModel bpmnModel = converter.convertToBpmnModel(editorJsonNode);
//然后转为XML
        BpmnXMLConverter xmlConvert = new BpmnXMLConverter();
        byte[] xml = xmlConvert.convertToXML(bpmnModel);
        System.out.println(new String(xml));
//最后完成部署,部署的时候name必须附带".bpmn20.xml"后缀
        repositoryService.createDeployment()
        .name(model.getName()).addString(model.getName() + ".bpmn20.xml", new String(xml)).deploy();

实现效果:

act_re_model表(此表中的deploymentId是空的)

 act_re_deployment表

 act_re_prodef表

 踩坑

JSON对象转XML之后可能存在Process标记没有id值的问题,导致NCname值不合法,所以需要给他手动加上,这个值在数据库中是key的值,可以根据自己的需求进行修改,我是这样解决的。

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        RepositoryService repositoryService = processEngine.getRepositoryService();
        ModelQuery modelQuery = repositoryService.createModelQuery().modelId(id);
        Model model = modelQuery.singleResult();
        if (model == null) {
            return null;
        }
        ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(
                new String(repositoryService.getModelEditorSource(model.getId()), StandardCharsets.UTF_8));
        BpmnJsonConverter converter = new BpmnJsonConverter();
        BpmnModel bpmnModel = converter.convertToBpmnModel(editorJsonNode);
        List<Process> processes = bpmnModel.getProcesses();
        int i=0;
        for (Process process : processes) {
            process.setId("process"+i);
            i++;
        }
        BpmnXMLConverter xmlConvert = new BpmnXMLConverter();
        byte[] xml = xmlConvert.convertToXML(bpmnModel);
        System.out.println(new String(xml));
        return repositoryService.createDeployment().name(model.getName()).addString(model.getName() + ".bpmn20.xml", new String(xml)).deploy();
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EasyUI是一个基于jQuery的UI库,它提供了一组易于使用的UI组件和工具,可以帮助开发人员在前端快速构建简洁美观的界面。Activiti是一个开源的业务流程管理(BPM)框架,它提供了完整的工作引擎,可以用于管理和执行各种类型的工作流程。 EasyUI结合Activiti可以实现一个Web版的流程设计器,通过这个设计器,用户可以在前端界面上进行工作流程设计和配置。具体实现步骤如下: 1. 引入EasyUI和Activiti的相关库文件,确保开发环境中能够正常加载这些资源。 2. 创建一个Web页面,使用EasyUI提供的布局和组件进行界面的搭建。可以使用EasyUI提供的面板(Panel)、标签页(Tabs)等组件来实现一个分区域的界面布局,方便用户进行操作。 3. 在页面中添加流程设计器所需的元素,例如画布(Canvas)、工具栏(Toolbar)等。可以使用EasyUI提供的拖拽功能来实现元素的可拖拽和放置。 4. 通过EasyUI的事件机制,添加相关事件处理函数。例如,当用户在工具栏中选择了某个任务节点的图标后,可以通过事件处理函数在画布上创建该任务节点的图形表示。 5. 使用EasyUI提供的交互功能,实现一些操作的响应效果。例如,当用户在画布上选择了某个已有的任务节点图形后,可以使用EasyUI提供的高亮效果来标识用户的选择。 6. 结合Activiti的API,将用户的设计配置保存到数据库中,以便后续的流程执行。可以使用EasyUI提供的表单组件和验证规则来方便地收集和验证用户的输入。 通过以上步骤,就可以使用EasyUI实现一个基于Activiti的Web版流程设计器。用户可以通过页面上的操作,设计和配置工作流程,并将其保存到数据库中。在实际的应用中,可以将该设计器嵌入到公司的内部系统中,方便各个部门的员工进行流程设计和管理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值