二开案例.过滤符.今年
【应用场景】平台内置的过滤符无法满足数据过滤需求。
【案例演示】编写一个自定义过滤符,用于执行【今年】的数据查询。
【实现步骤】
<1>继承 AbstractVariableAnalysisPlugin,编写自定义过滤符,实现条件过滤功能。
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.CommonFilter;
using Kingdee.BOS.Core.CommonFilter.ConditionVariableAnalysis;
using System;
namespace Jac.XkDemo.BOS.Core.Filter.ConditionVariables
{
/// <summary>
/// 【过滤符】今年
/// </summary>
public class YearAnalysis : AbstractVariableAnalysisPlugin
{
/// <summary>
/// 生成过滤条件
/// </summary>
/// <param name="ctx"></param>
/// <returns></returns>
public override string GetVariableFilter(ConditionVariableContext ctx)
{
var dts = new DateTimeFunctions(ctx.Context, ctx.NowTime);
if (TimeZoneUtils.IsLongDateField(ctx.filterRow))
{
var year = dts.GetSystemYear(0);
var beginTime = year.Item1;
var endTime = year.Item2;
var filterString = dts.GetCompareDateTimeString(ctx.FieldName, ctx.Operater, beginTime, endTime);
return filterString;
}
else
{
var beginTime = new DateTime(ctx.NowTime.Value.Year, 1, 1);
var endTime = beginTime.AddYears(1);
var filterString = dts.GetCompareDateTimeString(ctx.FieldName, ctx.Operater, beginTime, endTime);
return filterString;
}
}
/// <summary>
/// 照搬GetVariableFilter的实现就好
/// </summary>
/// <param name="ctx"></param>
/// <returns></returns>
public override string GetScriptFilter(ConditionVariableContext ctx)
{
return GetVariableFilter(ctx);
}
}
}
<2>执行以下SQL脚本,向平台内置过滤比较符号库注册自定义过滤符。
/*
-- 添加自定义过滤符
DELETE FROM T_MDL_FILTERCONDITION WHERE FID=888006;
INSERT INTO T_MDL_FILTERCONDITION
( FID ,
FCONDITIONTYPEID ,
FSEQ ,
FOPERATE ,
FINPUTCTLTYPE ,
FDATASOURCETYPE ,
FDATAFIELDINDEX ,
FVALUE ,
FINPUT ,
FCLASSNAME ,
FISCUST
)
VALUES ( 888006 , -- FID - int
88888 , -- FCONDITIONTYPEID - int
6 , -- FSEQ - int
'BETWEEN' , -- FOPERATE - varchar(50)
-1 , -- FINPUTCTLTYPE - int【-1:常量,不需要输入数据;0:手工录入(包括文本, 日期, 数值等);1:下拉选择 (包括下拉列表, 字段比较等);9:自定义,参考Enu_FieldInputCtlType】
0 , -- FDATASOURCETYPE - int【-1:不需要输入数据;1:SQL;3:固定列表;4:动态SQL,参考Enu_FilterDataSouceType】
0 , -- FDATAFIELDINDEX - int
N'YEAR' , -- FVALUE - nvarchar(50)
0 , -- FINPUT - int
'Jac.XkDemo.BOS.Core.Filter.ConditionVariables.YearAnalysis,Jac.XkDemo.BOS.Core' , -- FCLASSNAME - varchar(150)
'1' -- FISCUST - char(1)
);
DELETE FROM T_MDL_FILTERCONDITION_L WHERE FID=888006 AND FLOCALEID=2052;
INSERT INTO T_MDL_FILTERCONDITION_L
( FPKID ,
FID ,
FLOCALEID ,
FNAME ,
FDATASOURCE ,
FTOOLTIP
)
VALUES ( 888006 , -- FPKID - int
888006 , -- FID - int
2052 , -- FLOCALEID - int
N'今年' , -- FNAME - nvarchar(50)
N'' , -- FDATASOURCE - nvarchar(1000)
N'今年' -- FTOOLTIP - nvarchar(200)
);
*/
<3>将自定义过滤符所在程序集编译后拷贝组件到应用服务器星空站点对应的WebSite\Bin目录下,然后重启IIS,使新增的自定义过滤符即时生效。
<4>登录BOSIDE,扩展采购订单,选中采购日期字段,修改过滤比较符号集,如下图所示,修改完毕后,保存元数据,开发完毕。
现在可以登录业务站点,打开采购订单列表,过滤方案中,选择采购日期字段,进行【今年】的查询操作啦。
断点插件,可以看到【非左包含】产生的过滤条件如下。
数据库抓到的列表查询SQL如下。
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.过滤符.今年
本文2024-09-23 04:20:01发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164631.html