前沿:有时候工作流需要实现用户自己画图,自己部署,自己启动,但是流程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;
}