电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开案例.列表插件.使用AfterCreateSqlBuilderParameter事件干预列表查询

来源:金蝶云社区作者:金蝶2024-09-239

二开案例.列表插件.使用AfterCreateSqlBuilderParameter事件干预列表查询

【应用场景】使用列表插件对列表查询进行干预。

【案例演示】采购订单,列表查询,在列表插件中对列表查询强制增加一些过滤条件。

【实现步骤】

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

using Kingdee.BOS;

using Kingdee.BOS.Core.List.PlugIn;

using Kingdee.BOS.Core.List.PlugIn.Args;

using Kingdee.BOS.Core.SqlBuilder;

using Kingdee.BOS.Util;

using System.ComponentModel;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【列表插件】使用AfterCreateSqlBuilderParameter事件干预列表查询

    /// </summary>

    [Description("【列表插件】使用AfterCreateSqlBuilderParameter事件干预列表查询"), HotUpdate]

    public class AppendListQueryFilterStringListPlugIn : AbstractListPlugIn

    {

        /// <summary>

        /// 准备过滤参数(此事件主要用于附加各种SQL过滤条件)

        /// </summary>

        /// <param name="e"></param>

        public override void PrepareFilterParameter(FilterArgs e)

        {

            base.PrepareFilterParameter(e);

            // 文本字段

            e.FilterString = e.FilterString.JoinFilterString("FBillNo LIKE 'CG%'");

            // 基础资料字段(基础资料字段标识.引用字段标识)

            //e.FilterString = e.FilterString.JoinFilterString("FMaterialId.FNumber Like N'%0.0000.01%'");

            //// 单据体主键字段(单据体标识_分录主键标识)

            //e.FilterString = e.FilterString.JoinFilterString("FPOOrderEntry_FEntryID NOT IN (1,2,3)");

            //// 子单据体主键字段(单据体标识_分录主键标识)

            //e.FilterString = e.FilterString.JoinFilterString("FEntryDeliveryPlan_FDetailId NOT IN (5,6,7)");

        }


        /// <summary>

        /// 在构建完sql取数参数之后进一步干预列表过滤()

        /// 1.此事件在PrepareFilterParameter事件之后执行

        /// 2.整个SqlBuilderParameter都当成参数传入事件中,相比PrepareFilterParameter事件,此事件中插件可操控范围更大了

        /// 3.此事件是能对过滤动作进行干预的最后的机会

        /// </summary>

        /// <param name="e"></param>

        public override void AfterCreateSqlBuilderParameter(SqlBuilderParameterArgs e)

        {

            base.AfterCreateSqlBuilderParameter(e);


            // 附加常规过滤条件

            e.sqlBuilderParameter.FilterClauseWihtKey = e.sqlBuilderParameter.FilterClauseWihtKey.JoinFilterString("FBillNo LIKE '%DD%'");


            // 表连接之表变量

            var pks = new long[] { 100001, 100002, 100003, 100004, 100005, 100006 };

            var sqlParam = new SqlParam("@PKValue", KDDbType.udt_inttable, pks);

            var pkTmpTable = StringUtils.GetSqlWithCardinality(pks.Length, "@PKValue", 1);

            var joinTable = new ExtJoinTableDescription

            {

                JoinOption = QueryBuilderParemeter.JoinOption.LeftJoin,

                TableName = pkTmpTable,

                TableNameAs = "tp801",

                FieldName = "FID",

                ScourceKey = "FID"

            };

            e.sqlBuilderParameter.SqlParams.Add(sqlParam);

            e.sqlBuilderParameter.ExtJoinTables.Add(joinTable);


            // 表连接之物理表

            var joinTable2 = new ExtJoinTableDescription

            {

                TableName = "T_PUR_POCHANGE",

                TableNameAs = "tp802",

                FieldName = "FID",

                ScourceKey = "FID"

            };

            e.sqlBuilderParameter.ExtJoinTables.Add(joinTable2);


            // 修改隔离组织

            e.sqlBuilderParameter.IsolationOrgList.Add(100001);

        }

    }

}


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


<3>BOSIDE扩展采购订单,注册列表插件,保存元数据,开发完毕。


现在可以登录业务站点,打开采购订单列表,检验一下插件效果啦。


从数据库抓到的SQL可知,插件中附件的各种过滤条件,最后全部都融入到列表查询SQL中啦。


SELECT *

 FROM   ( SELECT    t0.FBILLNO AS FBILLNO ,

                    t0.FDATE AS FDATE ,

                    t0.FSUPPLIERID AS FSupplierId_Id ,

                    t0.FDOCUMENTSTATUS AS FDOCUMENTSTATUS ,

                    t0.FPURCHASEORGID AS FPurchaseOrgId_Id

二开案例.列表插件.使用AfterCreateSqlBuilderParameter事件干预列表查询

【应用场景】使用列表插件对列表查询进行干预。【案例演示】采购订单,列表查询,在列表插件中对列表查询强制增加一些过滤条件。【实现步骤...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信