工作流修改审批记录
一、需求
工作流修改审批记录,或者在审批记录列表中不展示某些审批记录。
二、思路与方案
展示审批记录有如下几个地方:
1. 审批记录列表
2. 审批记录控件
3. 流程图里面的节点详情的审批记录
审批记录列表和审批记录控件,可以通过自定义审批记录数据源来实现,可以做移除、修改等逻辑。
流程图里面的节点详情的审批记录,可以通过节点记录格式化插件来实现,可以做修改。
三、实现过程
1.实现审批记录的自定义数据源
(1)开发平台搜索wf_confcenter
(2)查找customApprovalRecord,如果没有,需要新增一个。这个键“customApprovalRecord”是固定写法,不能自定义。
添加一个json格式的值,里面包含类路径,需要把二开的工作流插件的完整路径填进去,开发者可以根据自身的包的路径自行调整,如下:
{"type":"class", "value":"kdec.wf.CustomApprovalRecord"}
(3)编写插件代码
继承IWorkflowPlugin,实现getCustomApprovalRecordGroup事件。使用TaskService查询审批记录。然后对审批记录列表里面即将展示的数据进行修改或者移除。
注意
1. 苍穹V6.0.04版本以上,需要配置 "isNotUsePlugin", "true"的请求参数(具体实现细节,请查看下面代码)。
2. 下面代码中,我实现了2种效果,一种是将审批记录置为“------”字符串,另一种是移除审批记录(这部分代码已注释,如有需要可以还原)
完整代码如下
import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.workflow.component.approvalrecord.IApprovalRecordGroup; import kd.bos.workflow.component.approvalrecord.IApprovalRecordItem; import kd.bos.workflow.engine.ProcessEngines; import kd.bos.workflow.engine.TaskService; import kd.bos.workflow.engine.extitf.IWorkflowPlugin; import java.util.*; // 审批记录列表 public class CustomApprovalRecord implements IWorkflowPlugin { @Override public List<IApprovalRecordGroup> getCustomApprovalRecordGroup(String businesskey, String entityNumber, Map<String, Object> params) { // 当前登录用户id long userId = RequestContext.get().getCurrUserId(); // 由于一个单据可能存在多条流程实例,查询本单据最近结束的一条流程 DynamicObjectCollection dynamicObjectCollection = QueryServiceHelper.query("wf_hiprocinst", "processinstanceid", new QFilter("businesskey", "=", businesskey).toArray(),"createdate desc", 1); if (dynamicObjectCollection.size() > 0) { long processinstanceid = dynamicObjectCollection.get(0).getLong("processinstanceid"); TaskService taskService = ProcessEngines.getDefaultProcessEngine().getTaskService(); Map<String,Object> parm = new HashMap<>(); //V6.0.04版本新接口,通过传入参数控制流程记录不进入二开插件,否则会进入死循环。 parm.put("isNotUsePlugin", "true"); List<IApprovalRecordGroup> recordGroups = taskService.queryApprovalRecord(businesskey, processinstanceid, parm); // 当单据标识不是kdec_reqbill13的时候,直接返回审批记录,不做处理 if (!"kdec_reqbill13".equals(entityNumber)) { return recordGroups; } // 当单据是kdec_reqbill13的时候,对审批记录进行一些处理后再展示 // 遍历审批记录,如果当前登录用户不是这个节点的审批人,则隐藏审批记录 for (IApprovalRecordGroup approvalRecordGroup : recordGroups) { for (IApprovalRecordItem recordItem : approvalRecordGroup.getChildren()) { if (recordItem.getUserId() != userId) { // 将审批记录设置为------,不对当前用户可见 recordItem.setMessage("------"); System.out.println(); } } } // 使用迭代器,移除部分不符合展示需求的审批记录 /* Iterator iterator = recordGroups.iterator(); while (iterator.hasNext()) { IApprovalRecordGroup approvalRecordGroup = (IApprovalRecordGroup)iterator.next(); for (IApprovalRecordItem recordItem : approvalRecordGroup.getChildren()) { if (recordItem.getUserId() != userId) { // 移除审批人不是当前登录用户的审批记录 iterator.remove(); break; } } }*/ System.out.println(); return recordGroups; } return IWorkflowPlugin.super.getCustomApprovalRecordGroup(businesskey, entityNumber, params); } }
2.流程图里面的节点详情的审批记录
(1)在会审节点或者审批节点注册插件
(2)节点记录格式化插件,代码如下
import kd.bos.context.RequestContext; import kd.bos.workflow.component.approvalrecord.IApprovalRecordItem; import kd.bos.workflow.engine.extitf.IWorkflowPlugin; // 流程图,审批记录,节点详情 public class CustomApprovalRecordNode implements IWorkflowPlugin { //流转记录格式化请实现此方法 @Override public IApprovalRecordItem formatFlowRecord(IApprovalRecordItem item) { Long userId = item.getUserId();//获取节点处理人id if (RequestContext.get().getCurrUserId() != userId) { item.setMessage("------"); } return item; } }
四、效果图
审批记录列表效果
审批记录控件
流程图的节点详情效果
工作流修改审批记录
一、需求工作流修改审批记录,或者在审批记录列表中不展示某些审批记录。二、思路与方案展示审批记录有如下几个地方:1. 审批记录列表2. ...
点击下载文档
本文2024-09-23 00:17:16发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-138507.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章