二开案例.过滤插件.列表过滤窗体上的状态字段设置默认值

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

二开案例.过滤插件.列表过滤窗体上的状态字段设置默认值

【应用场景】

列表过滤窗体上的状态字段设置默认值。

【案例演示】

物料列表,给列表过滤窗体上的状态字段设置默认值。


【实现步骤】

<1>编写过滤插件,代码如下。

using Kingdee.BOS.Core.ListFilter;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Model.CommonFilter;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【过滤插件】列表过滤窗体上的状态字段设置默认值
    /// </summary>
    [Description("【过滤插件】列表过滤窗体上的状态字段设置默认值"), HotUpdate]
    public class StatusFieldSetDefaultValueListFilterPlugIn : AbstractListFilterPlugIn
    {
        public override void AfterBindData(EventArgs e)
        {
            base.AfterBindData(e);
            // 给物料列表的过滤窗体上的状态字段设置默认值
            if (this.View.ParentFormView != null && this.View.ParentFormView.BillBusinessInfo.GetForm().Id.Equals("BD_MATERIAL", StringComparison.OrdinalIgnoreCase))
            {
                #region 方案1:直接修改状态字段的默认值
                var parameter = new JSONArray();
                // 设置单据状态字段的默认值为已审核
                var kvStatusField = new JSONObject();
                kvStatusField["Key"] = this.View.ParentFormView.BillBusinessInfo.GetForm().DocumentStatusFieldKey;
                kvStatusField["Value"] = "C";
                parameter.Add(kvStatusField);
                // 设置禁用状态字段的默认值为否
                var kvForbidField = new JSONObject();
                var forbidField = this.View.ParentFormView.BillBusinessInfo.GetField("FForbidStatus");
                if (forbidField != null)
                {
                    kvForbidField["Key"] = forbidField.Key;
                    kvForbidField["Value"] = "A";
                    parameter.Add(kvForbidField);
                }
                this.View.GetControl("FStatusFilter").InvokeControlMethod("SetStatusValues", parameter);
                #endregion
                #region 方案2:修改过滤方案的状态条件
                var filterModel = View.Model as FilterModel;
                if (filterModel != null)
                {
                    var statusFilterSetting = filterModel.StatusFilterObject.Setting;
                    if (statusFilterSetting != null)
                    {
                        foreach (var obj in statusFilterSetting)
                        {
                            var statusFilter = obj as Dictionary<string, object>;
                            if (statusFilter == null || !statusFilter.ContainsKey("Key") || !statusFilter.ContainsKey("Value") || statusFilter["Key"] == null)
                            {
                                continue;
                            }
                            if (statusFilter["Key"].ToString().Equals(this.View.ParentFormView.BillBusinessInfo.GetForm().DocumentStatusFieldKey, StringComparison.OrdinalIgnoreCase))
                            {
                                statusFilter["Value"] = "C";
                            }
                            else if (statusFilter["Key"].ToString().Equals("FForbidStatus", StringComparison.OrdinalIgnoreCase))
                            {
                                statusFilter["Value"] = "A";
                            }
                        }
                    }
                }
                #endregion
            }
        }
    }
}

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


<3>BOSIDE扩展【列表过滤(带组织)[BOS_OrgIsolationFilter]】,注册表单插件,保存元数据,开发完毕。




【功能验证】

<1>登录业务站点,打开物料列表,点开列表过滤界面,此时数据状态字段已被设置为已审核,禁用状态字段已被设置为否。

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


【知识点】

<1>可通过Http数据监控,获取当前列表使用的是哪个过滤窗体业务对象。

<2>此方案只能干预列表的过滤窗体被打开过之后的列表查询,无法干预列表使用默认过滤方案首次查询的场景,因此建议开启选项【列表查询弹出过滤界面】吗,或者另写列表插件控制好列表首次查询时的状态设置和当前要求保持一致。

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













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

二开案例.过滤插件.列表过滤窗体上的状态字段设置默认值

【应用场景】列表过滤窗体上的状态字段设置默认值。【案例演示】物料列表,给列表过滤窗体上的状态字段设置默认值。【实现步骤】<1>编写过...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息