flowable 自定义流程属性
之前写过在节点上添加自定义扩展属性,但是如何在流程上面扩展自定义属性呢?其实和给节点添加自定义属性是一致的,只是修改的相关类不一样。
编辑stencilset_bpmn.json文件
找到stencilset_bpmn.json文件,打开会发现有propertyPackages的属性,如图:
我们只需要根据流程之前创建的形式一样就行了,我这里定义为如下:
{
"name": "isbatchapproval_package",
"properties": [
{
"id": "isbatchapproval",
"type": "Boolean", //设置为boolean类型
"title": "是否允许批量审批",
"value": "",
"description": "对相关节点设置是否允许批量审批",
"popular": true
}
]
}
写好之后,要在相关节点上显示相关的属性,就需要在流程上进行引用上面的属性id值为isbatchapproval的,我们需要在流程上面引入:
{
"type": "node",
"id": "BPMNDiagram",
"title": "BPMN\u56fe\u8868",
"description": "A BPMN 2.0 diagram.",
"view": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:svg=\"http://www.w3.org/2000/svg\"\n xmlns:oryx=\"http://www.b3mn.org/oryx\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n width=\"800\"\n height=\"600\"\n version=\"1.0\">\n <defs></defs>\n <g pointer-events=\"fill\" >\n <polygon stroke=\"black\" fill=\"black\" stroke-width=\"1\" points=\"0,0 0,590 9,599 799,599 799,9 790,0\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" stroke-miterlimit=\"10\" />\n <rect id=\"diagramcanvas\" oryx:resize=\"vertical horizontal\" x=\"0\" y=\"0\" width=\"790\" height=\"590\" stroke=\"black\" stroke-width=\"2\" fill=\"white\" />\n \t<text font-size=\"22\" id=\"diagramtext\" x=\"400\" y=\"25\" oryx:align=\"top center\" stroke=\"#373e48\"></text>\n </g>\n</svg>",
"icon": "diagram.png",
"groups": [
"图解"
],
"mayBeRoot": true,
"hide": true,
"propertyPackages": [
"process_idpackage",
"namepackage",
"documentationpackage",
"process_authorpackage",
"process_versionpackage",
"process_namespacepackage",
"process_historylevelpackage",
"isexecutablepackage",
"datapropertiespackage",
"executionlistenerspackage",
"eventlistenerspackage",
"signaldefinitionspackage",
"messagedefinitionspackage",
"process_potentialstarteruserpackage",
"process_potentialstartergrouppackage",
"process_iseagerexecutionfetchpackage",
"isbatchapproval_package"
],
"hiddenPropertyPackages": [],
"roles": []
}
添加之后流程的属性上面就会有一个选择框。
在下载的BPMN.xml中添加属性
我们知道在节点上使用的时候,需要扩展UserTaskJsonConverter,但是流程要扩展哪些类呢?通过之前的经验,我们知道流程的扩展是在BaseBpmnJsonConverter.java和BpmnJsonConverter。
编辑BaseBpmnJsonConverter.java
找到if (baseElement instanceof FlowElement)修改为如下的代码:PROCESS_IS_BATCHAPPROVAL_KEY = “isbatchapproval”;
if (baseElement instanceof FlowElement) {
FlowElement flowElement = (FlowElement) baseElement;
if (StringUtils.isNotEmpty(flowElement.getName())) {
propertiesNode.put(PROPERTY_NAME, flowElement.getName());
}
if (StringUtils.isNotEmpty(flowElement.getDocumentation())) {
propertiesNode.put(PROPERTY_DOCUMENTATION, flowElement.getDocumentation());
}
Map<String, List<ExtensionElement>> extensionElements = flowElement.getExtensionElements();
List<ExtensionElement> elements = extensionElements.get(PROCESS_IS_BATCHAPPROVAL_KEY);
if (CollectionUtils.isNotEmpty(elements)) {
for (ExtensionElement extensionElement : elements) {
if (extensionElement.getName().equals(PROCESS_IS_BATCHAPPROVAL_KEY)) {
propertiesNode.put(PROCESS_IS_BATCHAPPROVAL_KEY, extensionElement.getElementText());
}
}
}
BpmnJsonConverterUtil.convertListenersToJson(((FlowElement) baseElement).getExecutionListeners(), true, propertiesNode);
}
编辑BpmnJsonConverter.java
找到if (!nonEmptyPoolFound)添加为如下的代码:
String isbatchapproval = BpmnJsonConverterUtil.getPropertyValueAsString("isbatchapproval", modelNode);
if (StringUtils.isNotEmpty(isbatchapproval)) {
ExtensionElement isbatchapprovalExtensionElement = new ExtensionElement();
isbatchapprovalExtensionElement.setName("isbatchapproval");
isbatchapprovalExtensionElement.setNamespace("http://flowable.org/bpmn");
isbatchapprovalExtensionElement.setNamespacePrefix("flowable");
isbatchapprovalExtensionElement.setElementText(isbatchapproval);
process.addExtensionElement(isbatchapprovalExtensionElement);
}
之后启动项目,下载下来的xml将会有流程上面自定义属性了,如图:
注意点
1.如果是源码部署的话,修改源码即可
2.如果是引入jar的时候,需要覆盖BaseBpmnJsonConverter.java和BpmnJsonConverter.java,在项目中,创建和源码类中包一样的包,赋值源码中的进行笔记即可,注意引入的版本和编辑的版本,不要搞错了哦!