二开案例.表达式函数.复杂字段取值函数

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

二开案例.表达式函数.复杂字段取值函数

【应用场景】大文本字段,富文本字段,批号字段等,其字段内容通常被拆分成两部分存储(字段标识,字段标识_Tag),表达式通常只能拿到字段标识定义的这部分数据,而另一部分数据则无法获取。

【演示案例】新增函数,用于获取复杂字段的任意部分的值。

【实现步骤】

<1>编写函数,代码如下。

using Kingdee.BOS;

using Kingdee.BOS.Core.Metadata.Expression.FuncDefine;

using System;


namespace Jac.XkDemo.BOS.Core.Functions

{

    /// <summary>

    /// 【函数】复杂字段取值函数

    /// </summary>

    [Serializable]

    public class GetValueByTagFuncDefine : AbstractFuncDefine

    {

        public GetValueByTagFuncDefine()

        {

        }


        public GetValueByTagFuncDefine(Context ctx, dynamic obj)

        {

            m_ctx = ctx;

            m_obj = obj;

        }


        public override IFuncDefine GetFunctionDefine(Context ctx, dynamic obj)

        {

            return new GetValueByTagFuncDefine(ctx, obj);

        }


        public override object GetFuncDefine()

        {

            return new Func<string, object>(FuncDefine);

        }


        /// <summary>

        /// 富文本获取Tag

        /// </summary>

        /// <param name="key">复杂字段的值的标识(复杂字段的标识+Tag)</param>

        /// <returns>返回复杂字段的指定部分的值</returns>

        object FuncDefine(string key)

        {

            if (key == null)

            {

                return null;

            }


            return m_obj.ActiveObject.ActiveObject[key];

        }

    }

}



<2>注册函数(可参考:https://vip.kingdee.com/article/74091717745675520)。

-- 复杂字段取值函数 

DELETE T_MDL_ELEMENTTYPE WHERE FID=888009;

INSERT INTO T_MDL_ELEMENTTYPE (FID,FIMGKEY,FTYPEID,FISVISIBLE,FELEMENTCLASS,FAPPEARANCECLASS)

VALUES (888009, '', 1, 0, 'Jac.XkDemo.BOS.Core.Functions.GetValueByTagFuncDefine,Jac.XkDemo.BOS.Core', 'BOS_GETVALUEBYTAG');


DELETE T_MDL_DOMAINMODELELEMENTMAP WHERE FID=1200 and FELEMENTGROUPID=24 and FELEMENTTYPEID=888009;

INSERT INTO T_MDL_DOMAINMODELELEMENTMAP (FID, FENTRYID, FELEMENTTYPEID, FELEMENTGROUPID, FSEQ)

VALUES (1200, 888009, 888009, 24, 81);

 

DELETE T_MDL_ELEMENTTYPE_L WHERE FID=888009 AND FLOCALEID=2052;

INSERT INTO T_MDL_ELEMENTTYPE_L(FID,FNAME,FDESCRIPTION,FLOCALEID,FPKID) 

VALUES (888009,N'复杂字段取值',N'按属性名获取复杂字段的指定部分的值。

使用示例:

取富文本字段的Tag:GETVALUEBYTAG(''F_Jac_RichEditTips_Tag'')

',2052,(SELECT ISNULL(MAX(FPKID), 0) + 1 FROM T_MDL_ELEMENTTYPE_L WHERE FPKID > 100000)); 

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


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


<4>BOSIDE扩展采购订单,单据头新增富文本内容编辑字段,保存操作新增校验规则,如下图所示,保存元数据,开发完毕。

计算公式:GETVALUEBYTAG('F_Jac_RichEditTips_Tag')  <> null




现在可以登录业务站点,打开采购订单编辑界面,录入订单数据但是不要填写富文本字段的内容部分,执行保存,此时保存操作会被校验规则拦截下来啦。














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

二开案例.表达式函数.复杂字段取值函数

【应用场景】大文本字段,富文本字段,批号字段等,其字段内容通常被拆分成两部分存储(字段标识,字段标识_Tag),表达式通常只能拿到字段...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息