• 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()));
  • 相关阅读:
    C++程序代写实现HashSet class
    EL表达式
    Hibernate的事务管理
    ThreadLocal理解
    SOA框架
    JVM垃圾回收机制
    Htpp通讯协议详解
    Android模拟器使用SD卡
    android 开发-HttpClient状态码定义
    android 开发-文件存储之读写sdcard
  • 原文地址:https://www.cnblogs.com/LQBlog/p/16017021.html
Copyright © 2020-2023  润新知