一、前言
ElementFactory,元素工厂,是流程建模工具(如 Camunda、Activiti、Flowable 等 BPMN 引擎的建模组件)中负责创建 BPMN 元素的核心模块,是实现 BPMN 图形化建模的基础工具之一。负责生成BPMN元模型的图形元素数据对象,包含对象的基础属性与结构。
也就是说,我们在创建一个流程时,需要通过elementFactory创建一系列的基础元素来组成一个流程。
二、创建元素
elementFactory,根据BPMN2.0协议,主要可以创建以下几种元素:
- 流程节点(Flow Node)
Flow Node,了解过Acitiviti7源码的都知道,是一个核心抽象类,继承BPMN模型基础类BaseElement,以及实现FlowElement接口,是所有流程节点(Task、Event、GateWay等类)的父类。
所以,通过elementFactory可以创建任务(Task)、子流程(SubProcess)、用户任务(UserTask)、服务任务(ServiceTask)、开始事件(StartEvent)、结束事件(EndEvent)、定时任务(IntermediateCatchEvent)、排他网关(ExclusiveGateway)、并行网关(ParallelGateway)、包容网关(InclusiceGateway)等。
2.连接线(Connection)
用于连接不同节点,定义流程运行路线。
3.泳道(Swimlane)
泳池(Pool)与泳道(Lane),用于划分流程的参与者。具体的用法后面讲解Activiti7源码或者介绍具体业务时再进行讲解。
4.其他元素
比如文本注释(TextAnnotation)、分组(Group)等。
创建代码示例:
//创建一个定时器任务
const modeler = store.getModeler;
const elementFactory = modeler.get('elementFactory');
const create = modeler.get('create');
const shape = elementFactory.createShape({
type: 'bpmn:IntermediateCatchEvent', //要创建的元素类型
eventDefinitions: [{ //默认属性
$type: 'bpmn:TimerEventDefinition',
timeDuration: 'PT10M' // 10分钟后触发
}]
});
//创建一个并行网关
const gateway = elementFactory.createShape({
type: 'bpmn:InclusiveGateway',
x: 300,
y: 100,
});
三、常用方法
- 创建元素基础对象:create(type,attributes)
type:元素类型,比如:bpmn:UserTask
attributes:初始化属性,比如:{id:’usertask1’,name:’审批节点’,assignee:’admin’}
2.创建元素对象的图形元素:createShape(attributes)
//创建一个并行网关
const gateway = elementFactory.createShape({
type: 'bpmn:InclusiveGateway',
x: 300,
y: 100,
});
3.创建连接线:createConnection(source,target,attributes,parent)
source:源节点
target:目标节点
attributes:连接线属性,包含type、name等属性
parent:连接线的父元素,通常为Process对象
4.创建标签:createLabelcreate(element,attributes)
element:需要关联的元素,就是给哪个元素创建标签
attributes:基础属性,包括x、y坐标信息
四、关于create与createShape
create与createShape都可以创建BPMN元素,这俩方法的应用场景是不同的,下面是这两个方法的使用讲解。
- 定义不同
create:通用元素创建,最基础、最底层、最通用的创建方法,不限制元素类型
createShape:专用于图形节点元素创建,限制元素类型,不符合bpmn的类型不会被创建
2. 使用场景不同
create创建的元素,可能不会显示在画布上,比如创建定时器,默认10分钟启动一次任务,这个“10分钟”的属性是不会显示到画布上的,再比如,给节点增加一个监听任务,同理,这个监听任务也不会显示在画布上。
createShape创建的元素,是肯定会显示在画布上的,并且根据BPMN规定的图形格式进行展示,比如UserTask的显示图形与Gateway的显示图形是不一样的,但是他们的基础属性,都拥有id,name等属性。
下一章,讲解Modeling-流程模型交互操作-Modeling
2631

被折叠的 条评论
为什么被折叠?



