说明
为了满足不同的流程节点可以操作的按钮不同,支持对接方动态配置
如 办理 、驳回、 抄送 、挂起流程 、流程终止 可以控制某些节点可操作按钮

同监听器一样
针对模型设计提交的json改动
{
"resourceId": "sid-47205900-DFBE-4720-A773-98C7970A74A9",
"properties": {
"overrideid": "",
"name": "",
"documentation": "",
"asynchronousdefinition": "false",
"exclusivedefinition": "false",
"executionlisteners": {
"executionListeners": [{
"event": "start",
"implementation": "",
"className": "",
"expression": "",
"delegateExpression": "",
"fields": [],
"$$hashKey": "uiGrid-002D",
"http": "ttps://demeter-dev.biaoguoworks.com/scm/flowable-center-notify?id=${ businessKey}&taskName=${taskName}&status=${status}"
}]
},
"multiinstance_type": "None",
"multiinstance_cardinality": "",
"multiinstance_collection": "",
"multiinstance_variable": "",
"multiinstance_condition": "",
"isforcompensation": "false",
"usertaskassignment": "",
"formkeydefinition": "",
"formreference": "",
"duedatedefinition": "",
"html_form_url": "",
"detail_html_form_url": "",
"prioritydefinition": "",
"formproperties": "",
"tasklisteners": "",
"skipexpression": "",
"categorydefinition": "",
"process_button": "办理,驳回,流程终止",
"autocompletetask": "false",
"startusercommitnode": "false"
},
"stencil": {
"id": "UserTask"
},
"childShapes": [],
"outgoing": [{
"resourceId": "sid-E05A628C-7A43-4DBE-9DDC-2C1A248EE826"
}],
"bounds": {
"lowerRight": {
"x": 265,
"y": 200
},
"upperLeft": {
"x": 165,
"y": 120
}
},
"dockers": []
}
针对部署改动
1.针对json转运行时PBMN对象处
com.biaoguoworks.flowable.custom.convert.CustomUserTaskJsonConverter#convertJsonToElement
2.针对BPMN对象转XML处
com.biaoguoworks.flowable.custom.convert.CustomUserTaskXMLConverter#writeAdditionalAttributes
跟监听器不同的监听器类型我们是根据type区分。但是针对属性我们是扩展属性所以我们要自定义一个TASK继承原有TASK进行封装我们的自定义属性
com.biaoguoworks.flowable.custom.model.CustomUserTask
执行阶段改动
针对XML转为BPMN对象
com.biaoguoworks.flowable.custom.convert.CustomUserTaskJsonConverter#convertJsonToElement
使用
com.biaoguoworks.flowable.center.service.impl.CenterFormServiceImpl#getTaskForm
后续我们就可以通过任务找到流程定义 通过api将流程定义xml转换成运行时对象则可以拿到我们自定义button信息
ProcessDefinition processDefinition=processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult();
BpmnModel bpmnModel = flowBpmnModelService.getBpmnModelByProcessDefId(task.getProcessDefinitionId());
Process process = bpmnModel.getProcessById(processDefinition.getKey());
FlowElement taskFlowElement = process.getFlowElement(task.getTaskDefinitionKey());
if (!(taskFlowElement instanceof CustomUserTask)) {
return null;
}
CustomUserTask customUserTask=(CustomUserTask)taskFlowElement;
getTaskFormResDto.setButtons(ButtonParse.INSTANCE.getProcessButtons(customUserTask.getButtons()));