#实践案例#文本框弹窗列表案例分享原创
金蝶云社区-拿了你的糖
拿了你的糖
31人赞赏了该文章 1033次浏览 未经作者许可,禁止转载编辑于2022年12月21日 11:29:55
封面

【业务背景】

    众所周知,基础资料字段可以在BOS中简单配置,即可弹出对应基础资料列表。但是在实际的工作中部分场景可能想要选单单据,而单据列表无法在BOS中通过简单配置的方式实现弹窗。此时需要通过插件干预的方式,可以实现弹窗列表功能。

【案例演示】

image.png

【知识点分析】

    1.文本字段有【编辑按钮】选项可以插件干预

    2.插件中BeforeF7Select方法可以监听到文本字段的编辑按钮点击

    3.通过ListShowParameter类可以弹窗单据列表

    4.在ShowForm的回调函数中,可以拿到列表返回结果


【解决方案】

    1.在表单中新增文本字段,同时修改以下两个属性

image.png

        效果如图:

                image.png

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查看效果。

image.png

效果如下图所示:

image.png

【方案的可推广价值】

行业的普适程度:

    适用于所有行业。

对客户的价值:

    如果单据中涉及业务流程以外的节点单据需要记录,而通过查询单据列表再手工反填的方式,既耽误时间增加工作量,又可能会导致非故意的错误。可以通过此方法,二开插件处理,实现打开单据列表,并记录。

尚未被满足的重要产品功能需求:

    本来想着他能显示链接,点击链接再打开对应的单据,但是BOS配置了半天没配置出来勾选这个选项也并没有生效。

image.png

可以通过新增按钮,通过按钮点击事件,获取到该文本值,传参打开对应单据的方式变通实现。


【拓展阅读】

四种ShowParameter示例: https://vip.kingdee.com/link/s/MefJr

ListShowParameter属性:https://vip.kingdee.com/link/s/MEMff





赞 31