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()));
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
2021-03-17 通过telnet调用dubbo进行调试
2020-03-17 dubbo源码阅读-服务调用(十二)之本地调用(Injvm)
2020-03-17 dubbo源码阅读-ProxyFactory(十一)之StubProxyFactoryWrapper本地存根
2020-03-17 dubbo源码阅读-ProxyFactory(十一)之JavassistFactory
2020-03-17 dubbo源码阅读-ProxyFactory(十一)之JdkProxyFactory