二开案例.表达式函数.编写自定义的表达式函数(字符串包含函数)
【应用场景】
当Python内置函数和平台内置函数都无法满足编写表达式的需求时,可使用自定义函数。
【案例演示】
编写一个字符串包含函数,用于判断指定文本中是否包含某串字符。
【实现步骤】
<1>继承AbstractFuncDefine,编写自定义函数,实现字符串检索功能。
using Kingdee.BOS; using Kingdee.BOS.Core.Metadata.Expression.FuncDefine; using System; namespace Jac.XkDemo.BOS.Core.Functions { /// <summary> /// 【函数】字符串包含函数 /// https://vip.kingdee.com/article/81106082826904320 /// </summary> [Serializable] public class StringContainsFuncDefine : AbstractFuncDefine { public StringContainsFuncDefine() { } public StringContainsFuncDefine(Context ctx, dynamic obj) { m_ctx = ctx; m_obj = obj; } public override IFuncDefine GetFunctionDefine(Context ctx, dynamic obj) { return new StringContainsFuncDefine(ctx, obj); } public override object GetFuncDefine() { return new Func<string, string, bool>(StringContains); } /// <summary> /// 当前文本包含指定字符串时,返回true /// </summary> /// <param name="str">被检索的文本</param> /// <param name="findStr">要查找的字符串</param> /// <returns></returns> bool StringContains(string str, string findStr) { return str.IndexOf(findStr, StringComparison.OrdinalIgnoreCase) >= 0; } } }
<2>向平台内置函数库注册自定义函数。
-- 注册字符串包含函数
DELETE T_MDL_ELEMENTTYPE WHERE FID=888001;
INSERT INTO T_MDL_ELEMENTTYPE (FID,FIMGKEY,FTYPEID,FISVISIBLE,FELEMENTCLASS,FAPPEARANCECLASS)
VALUES (888001, '', 1, 0, 'Jac.XkDemo.BOS.Core.Functions.StringContainsFuncDefine,Jac.XkDemo.BOS.Core', 'BOS_CONTAINS');
DELETE T_MDL_DOMAINMODELELEMENTMAP WHERE FID=1200 and FELEMENTGROUPID=24 and FELEMENTTYPEID=888001;
INSERT INTO T_MDL_DOMAINMODELELEMENTMAP (FID, FENTRYID, FELEMENTTYPEID, FELEMENTGROUPID, FSEQ)
VALUES (1200, 888001, 888001, 24, 81);
DELETE T_MDL_ELEMENTTYPE_L WHERE FID=888001 AND FLOCALEID=2052;
INSERT INTO T_MDL_ELEMENTTYPE_L(FID,FNAME,FDESCRIPTION,FLOCALEID,FPKID)
VALUES (888001,N'字符串包含',N'判断当前字符串是否包含某些字符(不区分大小写)',2052,(SELECT ISNULL(MAX(FPKID), 0) + 1 FROM T_MDL_ELEMENTTYPE_L WHERE FPKID > 100000));
<3>将自定义函数所在程序集编译后拷贝组件到应用服务器星空站点对应的WebSite\Bin目录下,然后重启IIS,使新增的自定义函数生效。
<4>编写表达式,使用该函数。
---------------------------------------------------------------------------------------------------------
【注意事项】
关于类全名的各部分的含义,说明如下:
Jac.XkDemo.BOS.Core.Functions.StringContainsFuncDefine,Jac.XkDemo.BOS.Core
<1>逗号之前的部分是类的完整命名空间加类全名。
<2>逗号之后的部分是组件的名称(注意是dll文件的名称,不是命名空间)。
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表达式函数.编写自定义的表达式函数(字符串包含函数)
本文2024-09-23 04:00:43发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-162535.html