自定义流程部署Activiti--部署篇【文章一】

前沿:有时候工作流需要实现用户自己画图,自己部署,自己启动,但是流程a.bpmn.xml这个东西一般都是程序员去画的也就是说,如果用户画图,怎么将界面简单化,这就是一个问题,如何将用户画的流程变成activiti框架人事的a.bpmn.xml,并且运转也是一个问题。

如下界面是我设计斌切提出web数据结构,然后转化成activiti认识的bpmn文件,并且可以使用的流程代码转换。

一、部署篇

public Boolean deployByJson(CustomizeProcessVo customizeProcessVo) throws XMLException {
        Boolean flag = false;
        if (customizeProcessVo.getFlowJson() == null) {
            throw new ServiceException("自定义流程为空");
        }
        Boolean result = actService.deployByJson(customizeProcessVo);
        if (result) {
            flag = true;
        }
        return flag;
    }
}

使用的是字符串部署方式,并且存储文件到本地,也就是说本地有bpmn的文件,再读取本地文件进行部署,为什么这么做呢,因为我也不知道为啥直接字符串部署部署失败

/**
     * 此类是用来 字符串部署工作流
     *
     * @param customizeProcessVo 自定义工作流对象
     * @return
     * @data 2018-05-14
     */
    public Boolean deployByJson(CustomizeProcessVo customizeProcessVo) throws XMLException {
        FileInputStream bpmnfileInputStream = null;
        Boolean result = false;

        //自定义流程名称和ID (name)CONTRACT_SIGN_PDKEY_168 Process (ID)CONTRACT_SIGN_PDKEY_168
        Map<Integer, String> mapProcess = new HashedMap();
        mapProcess.put(1, customizeProcessVo.getPdKey());
        mapProcess.put(2, customizeProcessVo.getPdKey() + " Process");
        mapProcess.put(3, "true");

        //字符串转换 --测试内容
        //String f01 = "{'key':1155,'value':'\"1\":\"startevent1\",\"2\":\"开始\",\"4\":\"${initialAssignee}\"'},{'key':1141,'value':'\"1\":\"flow-0\",\"2\":\"线\",\"6\":\"startevent1\",\"7\":\"usertask-2\"'},{'key':1095,'value':'\"1\":\"usertask-2\",\"2\":\"发起人\",\"4\":\"${initialAssignee}\"'},{'key':1141,'value':'\"1\":\"flow-3\",\"2\":\"提交\",\"6\":\"usertask-2\",\"7\":\"usertask-4\"','nodeKey':1142,'nodeValue':'\"11\":\"tFormalExpression\",\"12\":\"提交\"'},{'key':1095,'value':'\"1\":\"usertask-4\",\"2\":\"园区运营总监审批\",\"4\":\"SP1R23\"'},{'key':1141,'value':'\"1\":\"flow-5\",\"2\":\"同意\",\"6\":\"usertask-4\",\"7\":\"usertask-6\"','nodeKey':1142,'nodeValue':'\"11\":\"tFormalExpression\",\"12\":\"同意\"'},{'key':1095,'value':'\"1\":\"usertask-6\",\"2\":\"招商运营总监审批\",\"4\":\"SP1R5\"'},{'key':1141,'value':'\"1\":\"flow-9\",\"2\":\"同意\",\"6\":\"usertask-6\",\"7\":\"usertask-12\"','nodeKey':1142,'nodeValue':'\"11\":\"tFormalExpression\",\"12\":\"同意\"'},{'key':1095,'value':'\"1\":\"usertask-12\",\"2\":\"出纳审批\",\"4\":\"SP1R8\"'},{'key':1141,'value':'\"1\":\"flow-13\",\"2\":\"同意\",\"6\":\"usertask-12\",\"7\":\"usertask-16\"','nodeKey':1142,'nodeValue':'\"11\":\"tFormalExpression\",\"12\":\"同意\"'},{'key':1095,'value':'\"1\":\"usertask-16\",\"2\":\"董事长审批\",\"4\":\"SP1R16\"'},{'key':1141,'value':'\"1\":\"flow-17\",\"2\":\"最终同意\",\"6\":\"usertask-16\",\"7\":\"endevent-18\"','nodeKey':1142,'nodeValue':'\"11\":\"tFormalExpression\",\"12\":\"最终同意\"'},{'key':1156,'value':'\"1\":\"endevent-18\",\"2\":\"End\"'},{'key':1141,'value':'\"1\":\"flow-19\",\"2\":\"不同意\",\"6\":\"usertask-16\",\"7\":\"usertask-2\"','nodeKey':1142,'nodeValue':'\"11\":\"tFormalExpression\",\"12\":\"不同意\"'},{'key':1141,'value':'\"1\":\"flow-14\",\"2\":\"不同意\",\"6\":\"usertask-12\",\"7\":\"usertask-2\"','nodeKey':1142,'nodeValue':'\"11\":\"tFormalExpression\",\"12\":\"不同意\"'},{'key':1141,'value':'\"1\":\"flow-10\",\"2\":\"不同意\",\"6\":\"usertask-6\",\"7\":\"usertask-2\"','nodeKey':1142,'nodeValue':'\"11\":\"tFormalExpression\",\"12\":\"不同意\"'},{'key':1141,'value':'\"1\":\"flow-6\",\"2\":\"不同意\",\"6\":\"usertask-4\",\"7\":\"usertask-2\"','nodeKey':1142,'nodeValue':'\"11\":\"tFormalExpression\",\"12\":\"不同意\"'}";
        //String flowInputJson = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + BpmnJsonToMap.getBpmnXml(mapProcess, f01);
        String flowInputJson = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + BpmnJsonToMap.getBpmnXml(mapProcess, customizeProcessVo.getFlowJson());
        logger.info("\n部署xmlJson内容{}" + flowInputJson);

        //设置部署文件名称保存本地
        String pdKey = customizeProcessVo.getPdKey();
        bpmnfileInputStream = getWriteBpmnXml(bpmnfileInputStream, flowInputJson, pdKey);

        //部署
        Deployment deployment = repositoryService.createDeployment().
                addInputStream(bpmnTempFolder + "/" + pdKey + ".bpmn20.xml", bpmnfileInputStream)//必须是绝对路径哦
                .category(customizeProcessVo.getPdType().toString())//自定义部署类型
                .name(customizeProcessVo.getPdName())//自定义部署名称
                .deploy();
        if (deployment != null) {
            logger.info("deployByJson ID_[" + deployment.getId() + "],NAME_[" + deployment.getName() + "],PD_TYPE:[" + deployment.getCategory() + "] 部署成功");
            result = true;
        }
        return result;
    }

猜你喜欢

转载自blog.csdn.net/Sicily_winner/article/details/81240336