flowable-流程中心设计之审核按钮扩展(十一)

 

说明

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

针对模型设计提交的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()));

 

posted @ 2022-03-17 14:14  意犹未尽  阅读(2175)  评论(0编辑  收藏  举报