更多ruoyi-nbcio功能请看演示系统
gitee源代码地址
前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio
演示地址:RuoYi-Nbcio后台管理系统
更多nbcio-boot功能请看演示系统
gitee源代码地址
后端代码: https://gitee.com/nbacheng/nbcio-boot
前端代码:https://gitee.com/nbacheng/nbcio-vue.git
在线演示(包括H5) : http://218.75.87.38:9888
自自定义业务表单流程审批过程中回写状态有多种方法,今天介绍一种新的方法。
1、这次采用任务监听器的方式来更新自定业务表的状态
其中任务监听器就用一个监听器,不同的任务节点赋的表达式不一样
2、监听器代码如下
/** * 用户任务监听器,根据传入的字段参数,回写自定义业务表单字段值 * * @author nbacheng * @since 2024/2/01 */ @Component(value = "UpdateFieldListener") public class UpdateFieldListener implements TaskListener { /** * 注入字段(名称与流程设计时字段名称一致) */ private Expression status; @Override public void notify(DelegateTask delegateTask) { // 实现你的任务监听器逻辑 String procInsId = delegateTask.getProcessInstanceId(); CommonService commonService = SpringContextUtils.getBean(CommonService.class); HistoryService historyService = SpringContextUtils.getBean(HistoryService.class); boolean bOperate = false; //对于撤回,退回,收回等都要做过滤处理 Object object = delegateTask.getVariable("recall"); if ( object != null) { bOperate = (boolean) delegateTask.getVariable("recall"); if (bOperate) return; } HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery() .processInstanceId(procInsId) .singleResult(); if (hi != null) { String dataId = hi.getBusinessKey(); String statusValue = status.getValue(delegateTask).toString(); if(dataId != null && statusValue !=null) { commonService.UpdateData(dataId, statusValue); } } }
3、其中公共调用更新字段数据代码如下:
@Override public void UpdateData(String dataId, String statusValue) { //设置自定义表单dataid的数据 WfMyBusiness flowmybusiness = wfMyBusinessServiceImpl.getByDataId(dataId); String serviceImplName = flowmybusiness.getServiceImplName(); WfCallBackServiceI flowCallBackService = (WfCallBackServiceI) SpringContextUtils.getBean(serviceImplName); if (flowCallBackService!=null){ flowCallBackService.updateStatusBydataId(dataId, statusValue); } }
4、在WfCallBackServiceI类里增加下面接口
/** * 根据业务id更新状态值<br/> * @param dataId,statusValue * @return */ void updateStatusBydataId(String dataId, String statusValue);