本文档介绍了在BOS系统中,通过插件干预实现单据列表弹窗功能的方法。针对无法直接通过BOS配置实现弹窗列表的场景,提出了插件解决方案。详细步骤包括在表单中添加文本字段并设置属性,编写插件代码以监听文本字段编辑按钮的点击事件,并通过ListShowParameter类打开单据列表弹窗。此外,还说明了插件代码的编写要点、如何部署插件以及方案的可推广价值和行业普适性,最后提供了相关阅读资源链接。
【业务背景】
众所周知,基础资料字段可以在BOS中简单配置,即可弹出对应基础资料列表。但是在实际的工作中部分场景可能想要选单单据,而单据列表无法在BOS中通过简单配置的方式实现弹窗。此时需要通过插件干预的方式,可以实现弹窗列表功能。
【案例演示】
【知识点分析】
1.文本字段有【编辑按钮】选项可以插件干预
2.插件中BeforeF7Select方法可以监听到文本字段的编辑按钮点击
3.通过ListShowParameter类可以弹窗单据列表
4.在ShowForm的回调函数中,可以拿到列表返回结果
【解决方案】
1.在表单中新增文本字段,同时修改以下两个属性
效果如图:
tip:为什么选择【仅按钮编辑】,是因为如果选择【标准】,也能显示编辑按钮。但是文本框是可以手工维护的(并不会像基础资料那样,模糊匹配出对应单据)。而如果使用锁定性锁定该字段,就会导致编辑按钮不显示。所以选择【仅按钮编辑】,既可以避免手工维护错误数据,又可以显示编辑按钮。
2.新增表单插件:
using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System.Collections.Generic; using System.ComponentModel; namespace Demo.BOS.Business.PlugIn { /// <summary> /// 【单据插件】文本编辑按钮点击事件 /// </summary> [Description("【单据插件】文本编辑按钮点击事件"), HotUpdate] public class TextEditButtonPlugIn : AbstractBillPlugIn { public override void BeforeF7Select(BeforeF7SelectEventArgs e) { base.BeforeF7Select(e); switch (e.FieldKey.ToUpperInvariant()) { //对应文本字段 case "FTEMPLATE": this.ShowTemplate(); return; } } private void ShowVoucherTemplate() { //打开单据列表 ListShowParameter listShowPara = new ListShowParameter(); listShowPara.FormId = "XXXX";//单据标识 listShowPara.PageId = Guid.NewGuid().ToString(); listShowPara.ParentPageId = this.View.PageId; listShowPara.MultiSelect = true; listShowPara.ListType = (int)Kingdee.BOS.Core.Enums.BOSEnums.Enu_ListType.SelBill; listShowPara.IsLookUp = true; //过滤条件已审核 listShowPara.ListFilterParameter.Filter = listShowPara.ListFilterParameter.Filter.JoinFilterString(" FDocumentStatus ='C' "); listShowPara.IsShowUsed = true; listShowPara.IsShowApproved = false; this.View.ShowForm(listShowPara, delegate (FormResult result) { if (result.ReturnData != null) { ListSelectedRowCollection returnData = result.ReturnData as ListSelectedRowCollection; if (returnData.Count > 0) { List<string> billNumbers= returnData.Select(o => o.BillNo).ToList(); //赋值到字段 this.View.Model.SetValue("FTEMPLATE", string.Join(";", billNumbers)); this.View.UpdateView("FTEMPLATE"); } } }); } }
tip:(1)e.FieldKey判断字段名的时候,注意大小写,文本的 A != a;
(2)returnData 里不只有BillNo属性,可以调试起来看看
(3)listShowPara.MultiSelect 为是否显示复选框
3.生成插件并拷贝到应用站点的WebSite\Bin目录下
4.BOS中挂载插件到表单插件,保存元数据,重启IIS查看效果。
效果如下图所示:
【方案的可推广价值】
行业的普适程度:
适用于所有行业。
对客户的价值:
如果单据中涉及业务流程以外的节点单据需要记录,而通过查询单据列表再手工反填的方式,既耽误时间增加工作量,又可能会导致非故意的错误。可以通过此方法,二开插件处理,实现打开单据列表,并记录。
尚未被满足的重要产品功能需求:
本来想着他能显示链接,点击链接再打开对应的单据,但是BOS配置了半天没配置出来勾选这个选项也并没有生效。
可以通过新增按钮,通过按钮点击事件,获取到该文本值,传参打开对应单据的方式变通实现。
【拓展阅读】
四种ShowParameter示例: https://vip.kingdee.com/link/s/MefJr
ListShowParameter属性:https://vip.kingdee.com/link/s/MEMff