工作流修改审批记录

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:3

工作流修改审批记录

一、需求

工作流修改审批记录,或者在审批记录列表中不展示某些审批记录。


二、思路与方案

展示审批记录有如下几个地方:

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. ...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息