二开案例.列表插件.打开F8列表时指定快捷过滤条件

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.列表插件.打开F8列表时指定快捷过滤条件

【应用场景】

打开F8列表时指定快捷过滤条件。


【案例演示】

采购订单,打开物料的F8列表时,将采购订单单据头上的计量单位字段的值,传递给物料F8列表的快捷过滤字段基本单位,并参与列表过滤。



【实现步骤】

<1>编写列表插件,代码如下。

using Kingdee.BOS.Core.CommonFilter;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.List.PlugIn.Args;
using Kingdee.BOS.Core.ListFilter;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【列表插件】打开F8列表时指定快捷过滤条件
    /// </summary>
    [Description("【列表插件】打开F8列表时指定快捷过滤条件"), HotUpdate]
    public class SetQuickFilterRowListPlugIn : AbstractListPlugIn
    {
        public override void PrepareFilterParameter(FilterArgs e)
        {
            base.PrepareFilterParameter(e);
            if (!this.ListView.OpenParameter.IsBaseList())
            {
                return;
            }
            if (this.View.ParentFormView == null || !this.View.ParentFormView.BillBusinessInfo.GetForm().Id.EqualsIgnoreCase("PUR_PurchaseOrder"))
            {
                return;
            }
            // 获取源单上的计量单位的值
            var value = this.View.ParentFormView.Model.GetValue("F_Jac_Base") as DynamicObject;
            if (value == null || value["Name"] == null)
            {
                return;
            }
            var unitName = value["Name"].ToString();
            if (string.IsNullOrWhiteSpace(unitName))
            {
                return;
            }
            // 基本单位过滤字段的字段名
            var filterFieldName = "FBaseUnitId.FName"; // 基础资料.名称
            //var filterFieldName = "FBaseUnitId.FNumber";// 基础资料.编码
            var filterModel = this.View.GetService<IListFilterModelService>();
            if (filterModel != null
                && filterModel.QuickFilterObject != null
                && filterModel.QuickFilterObject.FilterRows != null
                && filterModel.QuickFilterObject.FilterRows.Count > 1)
            {
                var hasRow = false;
                foreach (var filterRow in filterModel.QuickFilterObject.FilterRows)
                {
                    if (filterRow.FilterField.FieldName.EqualsIgnoreCase(filterFieldName))
                    {
                        filterRow.Value = unitName;
                        hasRow = true;
                    }
                }
                if (!hasRow)
                {
                    CreateFilterRow(filterModel.QuickFilterObject, filterFieldName, "等于", unitName);
                }
                this.ListView.Model.FilterParameter.QuickFilterString = filterModel.GetQuickFilterString();
                //e.QuickFilterString = this.ListView.Model.FilterParameter.QuickFilterString;// 2022年03月17日(PT-146905)之后的补丁,需要加上这一句
            }
        }
        /// <summary>
        /// 创建过滤行
        /// </summary>
        /// <param name="filterObject"></param>
        /// <param name="filterFieldName"></param>
        /// <param name="compareTypeName"></param>
        /// <param name="value"></param>
        private void CreateFilterRow(FilterObject filterObject, string filterFieldName, string compareTypeName, string value)
        {
            var filterField = filterObject.AllFilterFieldList.FirstOrDefault(o => o.FieldName.EqualsIgnoreCase(filterFieldName));
            if (filterField == null)
            {
                return;
            }
            var filterRow = new FilterRow();
            filterRow.FilterField = filterField;
            filterRow.CompareType = filterField.CompareType.FirstOrDefault(o => o.Name.EqualsIgnoreCase(compareTypeName));
            if (filterRow.CompareType == null)
            {
                filterRow.CompareType = filterField.CompareType.FirstOrDefault();
            }
            filterRow.Value = value;
            filterRow.Logic = LogicOperate.AND;
            filterObject.FilterRows.Add(filterRow);
        }
    }
}

<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展采购订单,采购订单新增基础资料字段:计量单位,物料字段禁用F8列表缓存。


<4>BOSIDE扩展物料,注册列表插件,保存元数据,开发完毕。

如需更好的使用体验,还可以提前按需调整默认显示的快捷过滤字段,如下图。


【功能验证】

<1>登录业务站点,打开采购订单新增界面,先输入计量单位,再打开物料的F8列表,此时采购订单上的计量单位已被携带到物料的F8列表的快捷过滤条件中。

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.列表插件.打开F8列表时指定快捷过滤条件

【应用场景】打开F8列表时指定快捷过滤条件。【案例演示】采购订单,打开物料的F8列表时,将采购订单单据头上的计量单位字段的值,传递给物...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息