更多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://122.227.135.243:9888
自自定义业务表单流程审批过程中回写状态有多种方法,今天介绍一种新的方法。
1、这次采用任务监听器的方式来更新自定业务表的状态
其中任务监听器就用一个监听器,不同的任务节点赋的表达式不一样
2、监听器代码如下
/*** 用户任务监听器,根据传入的字段参数,回写自定义业务表单字段值** @author nbacheng* @since 2024/2/01*/
@Component(value = "UpdateFieldListener")
public class UpdateFieldListener implements TaskListener {/*** 注入字段(名称与流程设计时字段名称一致)*/private Expression status;@Overridepublic 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、其中公共调用更新字段数据代码如下:
@Overridepublic 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);