博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
activiti bpmnModel使用
阅读量:5945 次
发布时间:2019-06-19

本文共 3444 字,大约阅读时间需要 11 分钟。

bpmnModel对象,是activiti动态部署钟很重要的一个对象,如果bpmnModel对象不能深入的理解,那可能如果自己需要开发一套流程设计器,就显得力不从心,之前我们公司自己开发了一套activiti web设计器,如下图所示:

 

 

activiti web设计器设计的时候,存储格式是自定义的json对象,那现在问题来了,我们怎么把我们自己的json格式转化为标准的bpmn需要的xml文件呢?这一点很重要?所以这也是本节课需要重点讲解的地方,大家实际开发可以举一反三。灵活的运用到项目中。

1.1.1. BpmnModel使用

因为平时我们在使用的时候,展示流程图没有使用是默认的流程生成的这种方式,所以这里坐标信息,暂时不演示,主要演示节点等的核心功能。

1.1.1.1. eclipse绘制流程

为了方便演示,这里我们先在eclipse中绘制一个简单的流程。具体的流程图如下:

 

流程图的xml文件如下:直接用文本打开bpmn文件即可:

1.1.1.2. 自己生成

下面的代码,就是生成这个bpmnmodel 核心代码,代码如下所示:

//实例化BpmnModel对象BpmnModel bpmnModel=new BpmnModel();//开始节点的属性StartEvent startEvent=new StartEvent();startEvent.setId("start1shareniu");startEvent.setName("start1shareniu");//普通的UserTask节点UserTask userTask=new UserTask();userTask.setId("userTask1shareniu");userTask.setName("userTask1shareniu");//结束节点属性EndEvent endEvent=new EndEvent();endEvent.setId("endEventshareniu");endEvent.setName("endEventshareniu");//连线信息List
sequenceFlows=new ArrayList
();List
toEnd=new ArrayList
();SequenceFlow s1=new SequenceFlow();s1.setId("starttouserTask");s1.setName("starttouserTask");s1.setSourceRef("start1shareniu");s1.setTargetRef("userTask1shareniu");sequenceFlows.add(s1);SequenceFlow s2=new SequenceFlow();s2.setId("userTasktoend");s2.setName("userTasktoend");s2.setSourceRef("userTask1shareniu");s2.setTargetRef("endEventshareniu");toEnd.add(s2);startEvent.setOutgoingFlows(sequenceFlows);userTask.setOutgoingFlows(toEnd);userTask.setIncomingFlows(sequenceFlows);endEvent.setIncomingFlows(toEnd);//Process对象Process process=new Process();process.setId("process1");process.addFlowElement(startEvent);process.addFlowElement(s1);process.addFlowElement(userTask);process.addFlowElement(s2);process.addFlowElement(endEvent);bpmnModel.addProcess(process);

上面的代码,我们已经写好了bpmnmodel绘制的流程,那我们怎么知道对还是不对呢?下面就开始将我们的bpmnmodel对象转化为标准的xml文件看一下。

1.1.2. BpmnModel转化xml

将上面的对象转化为标准的xml代码如下所示:

//bpmnModel 转换为标准的bpmn xml文件

BpmnXMLConverter bpmnXMLConverter=new BpmnXMLConverter();

byte[] convertToXML = bpmnXMLConverter.convertToXML(bpmnModel);

String bytes=new String(convertToXML);

System.out.println(bytes);

运行程序,看一下程序的输出如下:

我们看到转化的xml文件,对比eclipse绘制流程的xml,除了坐标没有,其他的都是正确的。那我们怎么验证我们生成的xml是正确的呢?因为转化成功,也不一定可以使用的。接下来看一下bpmnmodel如何验证。

1.1.3. BpmnModel验证

验证的方法代码如下所示:

//验证bpmnModel 是否是正确的bpmn xml文件

ProcessValidatorFactory processValidatorFactory=new ProcessValidatorFactory();

ProcessValidator defaultProcessValidator = processValidatorFactory.createDefaultProcessValidator();

//验证失败信息的封装ValidationError

List<ValidationError> validate = defaultProcessValidator.validate(bpmnModel);

System.out.println(validate.size());

需要说明的是:ValidationError封装的是验证信息,如果size0说明,bpmnmodel正确,大于0,说明自定义的bpmnmodel是错误的,不可以使用的。

验证还是很有必要使用的,因为流程部署的时候,我们最好验证一次,没有问题在部署。

分享牛,分享、我们是快乐的。

分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)

你可能感兴趣的文章
中国经济 警惕黑天鹅
查看>>
利用checkinstall制作deb或rpm工具包
查看>>
socket shutdown和close的区别
查看>>
艾伟:Visual Studio 2008 可扩展性开发(六):操作Solution Explorer
查看>>
微软拟向互联网开发商提供免费IIS 服务器
查看>>
Scene Management -- scene graph
查看>>
引用 Javascript刷新页面的几种方法
查看>>
.NET 4.5 中新提供的压缩类
查看>>
WinForm 在不同 Windows 版本中保持窗口的大小和控件的排列不变
查看>>
给大家推荐一个替代PowerDesigner的免费软件Open System Architect
查看>>
黄聪:Pycharm 快捷键
查看>>
netstat 命令详解
查看>>
mysql数据库表修改某一列的类型
查看>>
归档 浅析
查看>>
创建一个Windows的NTP Server
查看>>
C/C++数组名与指针的区别详解
查看>>
IOS多线程
查看>>
python之 序列与字典遍历
查看>>
block(八)作用域
查看>>
使用HttpURLConnection向服务器发送post和get请求
查看>>