本篇文章介绍如何使用bpmn-j
s给图例配置颜色。该示例展示了如何向BPMN
图添加颜色的多种不同方法。
通过层叠设置颜色
这种方式比较简单,直接通过设置图片的CSS层叠样式就可实现。
.highlight-overlay {
background-color: green; /* color elements as green */
opacity: 0.4;
pointer-events: none; /* no pointer events, allows clicking through onto the element */
}
将具有给定类的高亮显示覆盖附着到某些元素:
await viewer.importXML(diagramXML);
var overlays = viewer.get('overlays');
var elementRegistry = viewer.get('elementRegistry');
var shape = elementRegistry.get('UserTask_1');
var $overlayHtml =
$('<div class="highlight-overlay">')
.css({
width: shape.width,
height: shape.height
});
overlays.add('UserTask_1', {
position: {
top: -5,
left: -5
},
html: $overlayHtml
});
通过BPMN 2.0扩展
如果希望颜色成为BPMN 2.0
图表的一部分,可以使用BPMN内置的BPMN 2.0
颜色扩展。要添加颜色,请选择建模器并使用Modeling#setColor API
将笔划和填充指定给BPMN
元素:
var bpmnModeler = ...;
var modeling = bpmnModeler.get('modeling');
var elementsToColor = [ element1, element2 ];
// setting colors
modeling.setColor(elementsToColor, {
stroke: '#00ff00',
fill: '#ffff00'
});
// removing previously set colors
modeling.setColor(elementsToColor, null);
这些颜色在BPMN2.0
图表中保持不变,并由BPMN
查看器显示。
标记+CSS样式
添加一个CSS到页面,代码如下:
.highlight:not(.djs-connection) .djs-visual > :nth-child(1) {
fill: green !important; /* color elements as green */
}
该代码段确保具有高亮显示类的元素获得绿色的SVG填充。导入后,将高亮显示类作为元素标记添加到要显示为绿色的每个元素中:
await viewer.importXML(diagramXML);
var canvas = viewer.get('canvas');
canvas.addMarker('UserTask_1', 'highlight');
自定义渲染器
可以通过bpmn-js-task-priorities
来自定义颜色渲染,实现组件颜色的渲染。
$ npm install bpmn-js-task-priorities
使用bpmn-js-task-priorities
模块:
import Modeler from 'bpmn-js/lib/Modeler';
import prioritiesModule from 'bpmn-js-task-priorities/lib/priorities';
var modeler = new Modeler({
additionalModules: [
prioritiesModule
]
});
在XML
中指定任务颜色,并读取序列化的tp:color
和tp:priority
扩展属性:
<definitions ... xmlns:tp="http://tp">
<process>
<task id="Task_1" tp:color="green" />
<task id="Task_2" tp:color="red" tp:priority="100041" />
...
</process>
</definitions>
如上即可指定渲染颜色。