工作流加签动态设置加签节点属性

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

工作流加签动态设置加签节点属性

一、需求描述

工作流加签时,想要在单据里面的附件面板上传附件,以及想要修改某个字段的值。


二、思路与方案

  1. 通过扩展加签弹窗页面(如下图这个页面)(wf_addsignpage),注册新的页面插件。

  2. 如果想要查看节点有哪些属性可以加,可以查询和解析流程资源表T_WF_GEBYTEARRAY的fcontent字段。

  3. 重写customEvent事件,在点击加签确认按钮后,触发该事件,构造加签节点的“允许字段被修改”相关属性以及设置哪些字段可修改的数据包,把数据包传递给工作流服务。

   注意:自定义决策项,无需开发工作流插件,需要开发的是页面插件。



三、实现过程

1.扩展加签弹窗页面

1.1 开发平台,扩展工作流服务


1.2 扩展加签弹窗页面(标识为:wf_addsignpage)


1.3 注册页面插件


2.查询工作流的审核节点有哪些参数

(1)为了完成设置加签节点的“允许字段被修改”相关属性以及设置哪些字段可修改,我们需要知道决策项的数据结构,可以先在工作流中配置某些想要达到的效果,例如我这里配置了第三级审核节点“允许字段被修改”。


(2)然后通过查询“流程资源”表。我们就能够得知“允许字段被修改”相关属性是如何配置的。sql语句如下:

select fcontent from T_WF_GEBYTEARRAY where fid=

(select fresourceid from T_WF_PROCDEF where fkey='流程编码' and fversion='流程版本号')



(3)上图的fcontent字段以json结构承载,里面记录了这个流程的众多属性,解析这个json,可以看到第三级审核节点我配了哪些属性,如下图:


3.编写插件代码

经过了上述第二步骤,就能得知审核节点的“允许字段被修改”相关属性的key和value,这样我们就能通过重写customEvent事件,为加签节点添加相关属性。注意:这个代码在每个加签节点都会给加签人修改加签属性。代码如下:

import kd.bos.form.events.CustomEventArgs;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.servicehelper.workflow.WorkflowServiceHelper;
import kd.bos.workflow.engine.impl.persistence.entity.task.TaskEntityImpl;
import kd.bos.workflow.taskcenter.plugin.validate.BeforeAddSignConfirmCustomEvent;

import java.util.HashMap;
import java.util.Map;

// 加签,调整加签审核节点参数
public class PropertySignPlugin extends AbstractFormPlugin {
    
    @Override
    public void customEvent(CustomEventArgs e) {

        if(e != null && BeforeAddSignConfirmCustomEvent.SELECT_ADDSIGNCONFIRM_ISOLATION.equals(e.getKey())
                && e instanceof BeforeAddSignConfirmCustomEvent) {
            BeforeAddSignConfirmCustomEvent bac = (BeforeAddSignConfirmCustomEvent) e;

            TaskEntityImpl taskInfo = (TaskEntityImpl)WorkflowServiceHelper.findTaskById(bac.getTaskId());

            // 所有的加签都会走这个方法,而我们这个案例里面,是针对特定的单据在加签时,修改其属性
            // 所以这里要判断一下是否为目标单据,kdec_reqbill3就是本案例的单据标识,我们只针对kdec_reqbill3在加签时,修改其属性
            if ("kdec_reqbill3".equals( taskInfo.getDynamicObject().get("billtype") )) {

                Map<String, Object> extProps = bac.getExtProps();
                extProps.put("billSetting", initPropertyOptions());
            }
        }
    }


    // 初始化“允许字段被修改”相关属性
    private Map<String,Object> initPropertyOptions() {

        Map<String,Object> billSettingOption = new HashMap<>();

        // 单据标识
        billSettingOption.put("formKey", "kdec_reqbill3");
        // 移动单据标识
        billSettingOption.put("mobilFormKey", "kdec_reqbill3_mob");
        // 开启“允许字段被修改”开关
        billSettingOption.put("fieldModified", true);
        //billSettingOption.put("dataSignedVerify", false);
        //billSettingOption.put("dataSignedAdd", false);

        // 设置哪些字段可修改
        billSettingOption.put("pageAttrConfigModel", createFieldOption() );

        return billSettingOption;
    }

    private Map<String,Object> createFieldOption () {


        Map<String,Object> pageAttrConfigModel = new HashMap<>();

        Map<String,Object> field = new HashMap<>();

        Map<String,Object> modify = new HashMap<>();
        // 设置附件面板(标识为attachmentpanel)可以上传数据,设置备注字段(标识为kdec_notes)可以被修改
        modify.put("fieldname", "附件,备注");
        modify.put("fieldnumber", "attachmentpanel,kdec_notes");
        field.put("modify", modify);
        field.put("pagenumber", "kdec_reqbill3");
        field.put("pagename", "采购申请单3(kdec_reqbill3)");

        pageAttrConfigModel.put("field", field);

        return pageAttrConfigModel;
    }

}


四、效果图

当前参与人处理审批流,设置张三为加签节点处理人。


加签成功


张三的账号,进入加签审批单据,发现能够上传附件,能够修改备注字段,代码生效。



工作流加签动态设置加签节点属性

一、需求描述工作流加签时,想要在单据里面的附件面板上传附件,以及想要修改某个字段的值。二、思路与方案通过扩展加签弹窗页面(如下图这...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息