工作流加签动态设置加签节点属性
一、需求描述
工作流加签时,想要在单据里面的附件面板上传附件,以及想要修改某个字段的值。
二、思路与方案
通过扩展加签弹窗页面(如下图这个页面)(wf_addsignpage),注册新的页面插件。
如果想要查看节点有哪些属性可以加,可以查询和解析流程资源表T_WF_GEBYTEARRAY的fcontent字段。
重写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; } }
四、效果图
当前参与人处理审批流,设置张三为加签节点处理人。
加签成功
张三的账号,进入加签审批单据,发现能够上传附件,能够修改备注字段,代码生效。
工作流加签动态设置加签节点属性
本文2024-09-23 00:17:44发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-138554.html