F7字段过滤原创
金蝶云社区-勤劳的小蜜蜂
勤劳的小蜜蜂
3人赞赏了该文章 1,112次浏览 未经作者许可,禁止转载编辑于2019年08月09日 21:38:53


场景描述:选择销售订单号,过滤出销售订单所对应的物料编码

案例所用代码
继承:AbstractCommonFilterPlugIn
重写BeforeF7Select方法
代码参考:
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.CommonFilter.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HL.K3Cloud.PUS.ProductionWarehousingReport.Plugin
{
    [Description("二开--BOM完整性检查过滤")]
    [Kingdee.BOS.Util.HotUpdate]
    public class BOMSearchFilter: AbstractCommonFilterPlugIn
    {
        public override void BeforeF7Select(BeforeF7SelectEventArgs e)
        {
            base.BeforeF7Select(e);
            switch (e.FieldKey)
            {
                case "FOrderNumber": //字段的标识
                    ListSelBillShowParameter para = new ListSelBillShowParameter();
                    para.FormId = "SAL_SaleOrder";
                    para.ParentPageId = this.View.PageId;
                    para.ListFilterParameter.Filter = "FDOCUMENTSTATUS= '"+"C"+"'";//过滤条件
                    this.View.ShowForm(para, new Action<FormResult>(result =>
                    {
                        if (result != null && result.ReturnData != null && (result.ReturnData as ListSelectedRowCollection).Count > 0)
                        {
                            ListSelectedRowCollection rows = (ListSelectedRowCollection)result.ReturnData;
                            string BillNo = "";
                            foreach (ListSelectedRow row in rows)
                            {
                                BillNo = BillNo + row.BillNo + ";";
                            }
                            BillNo = BillNo.Remove(BillNo.Length - 1, 1);
                            this.View.Model.SetValue("FOrderNumber", BillNo);
                        }
                    }));
                    break;
                case "FMaterialID":// 表示物料编码所对应的标识
                    {

                        string FOrderNumber = (string)this.Model.GetValue("FOrderNumber");// 获销售订单号
                        if (!ObjectUtils.IsNullOrEmptyOrWhiteSpace(FOrderNumber)) //如果销售订单号不为空
                        {
                            FOrderNumber = splitString(FOrderNumber);
                            string sql = "select distinct " +
                                           " SALOrderEntry.FMATERIALID," +
                                           " SALOrder.FBILLNO OrderNum," +
                                           " SALOrder.FSALEORGID USEORGID," +
                                           " BOM.FNUMBER FNUMBER, BOM.FDOCUMENTSTATUS " +
                                           " from T_SAL_ORDER SALOrder " +
                                           " left join T_SAL_ORDERENTRY SALOrderEntry " +
                                           " on SALOrder.FID = SALOrderEntry.FID " +
                                           " left join T_ENG_BOM BOM " +
                                           " on(BOM.FUSEORGID = SALOrder.FSALEORGID and BOM.FMATERIALID = SALOrderEntry.FMATERIALID)" +
                                           " where SALOrder.FDOCUMENTSTATUS = 'C' and SALOrder.FBILLNO in(" + FOrderNumber + ")";
                            var count = DBUtils.ExecuteDynamicObject(this.Context, sql.ToString());
                            List<long> orgList = new List<long>();
                            foreach (DynamicObject obj in count)
                            {
                                if (!"".Equals(obj["FMATERIALID"]))
                                {
                                    long FMATERIALID = Convert.ToInt32(obj["FMATERIALID"]);
                                    orgList.Add(FMATERIALID);
                                }
                            }
                            string productLineFilter = string.Format(" FMaterialID in ({0}) ", string.Join(",", orgList.ToArray()));// 过滤字符串
                            e.ListFilterParameter.Filter = productLineFilter;

                        }
                    }
                    break;
            }
        }
        //分割字符串
        private string splitString(string fOrderNumber)
        {
            string splitAfter = "";
            string[] arr = fOrderNumber.Split(';');
            foreach (string str in arr)
            {
                splitAfter = splitAfter + "'" + str + "'" + ",";
            }
            splitAfter = splitAfter.Remove(splitAfter.Length - 1, 1);
            return splitAfter;
        }

    }
}
------------------------------------------------------------------------支持多选----------

  • public override void ButtonClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.ButtonClickEventArgs e)

  •         {

  •             base.ButtonClick(e);

  •             if (e.Key.Equals("Fbtn"))

  •             {

  •                 ListShowParameter listPara = new ListShowParameter();

  •                 listPara.FormId = "BD_Metarial";

  •                 listPara.IsLookUp = true;  //查找型列表

  •                 listPara.MultiSelect = true;  //支持多选

  •                 this.View.ShowForm(listPara, new Action<FormResult>((result) =>

  •                 {

  •                     //回调函数里面处理数据回填等逻辑

  •                     if (result.ReturnData == null)

  •                     {

  •                         return;

  •                     }

  •                 })

  •                                    );

  •             }

  •         }


第三步:挂载表单插件


赞 3