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

二开案例.表达式函数.在中文环境下获取英文词条

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

二开案例.表达式函数.在中文环境下获取英文词条

【应用案例】在表达式中,如何在中文环境下获取英文词条?

【场景描述】有单选辅助资料字段【F_kin_Assistant】(经验方式)和文本字段【F_kin_Text】(经验方式(英文)),怎么将辅助资料的名称中的英文名称(LocaleID=1033)携带到文本字段上呢?


方案1:Python语法实现。

编写表达式首先应该了解数据包的结构以及多语言文本在当前数据包中的具体位置,如下图所示:

例如:

F_kin_Text  =  filter(lambda x:x[1]==1033, F_kin_Assistant.MultiLanguageText)[0][2]

如果多语言文本所在字段的值有可能为null,则使用以下表达式:

F_kin_Text  = ((filter(lambda x:x[1]==1033, F_kin_Assistant.MultiLanguageText)[0][2]) if (F_kin_Assistant<>null) else '')

更糟糕的,如果多语言文本的指定语言也可能为null(比如英文压根就没有启用),则使用以下表达式:

F_kin_Text  = ((filter(lambda x:x[1]==1033, F_kin_Assistant.MultiLanguageText)[0][2]) if (F_kin_Assistant<>null and F_kin_Assistant.MultiLanguageText<>null and len(filter(lambda x:x[1]==1033, F_kin_Assistant.MultiLanguageText))>0) else '')

优点:简单。

缺点:难理解,代码不够健壮。


方案2:编写自定义函数实现。

例如:

F_kin_Text  =  GetLocaleValue (F_kin_Assistant.MultiLanguageText ,1033)

优点:容易理解,代码想多健壮都可以。

缺点:需编写C#组件。

配置界面如下图所示:


方案2示例代码:

using Kingdee.BOS;

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

using Kingdee.BOS.Core.Metadata.FieldElement;

using Kingdee.BOS.Orm.DataEntity;

using System;


namespace Jac.XkDemo.BOS.Core.Functions

{

    /// <summary>

    /// 【函数】获取多语言文本的指定语言下的文本

    /// </summary>

    [Serializable]

    public class GetLocaleValueFuncDefine : AbstractFuncDefine

    {

        public GetLocaleValueFuncDefine()

        {

        }


        public GetLocaleValueFuncDefine(Context ctx, dynamic obj)

        {

            m_ctx = ctx;

            m_obj = obj;

        }


        public override IFuncDefine GetFunctionDefine(Context ctx, dynamic obj)

        {

            return new GetLocaleValueFuncDefine(ctx, obj);

        }


        public override object GetFuncDefine()

        {

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

        }


        /// <summary>

        /// 获取多语言文本的指定语言

        /// </summary>

        /// <param name="localeValue">多语言文本</param>

        /// <param name="localeId">语言ID</param>

        /// <returns></returns>

        string FuncDefine(object localeValue, int localeId)

        {

            if (localeValue == null)

            {

                return null;

            }

            if (localeValue is LocalDynamicObjectCollection)

            {

二开案例.表达式函数.在中文环境下获取英文词条

【应用案例】在表达式中,如何在中文环境下获取英文词条?【场景描述】有单选辅助资料字段【F_kin_Assistant】(经验方式)和文本字段【F_k...
点击下载文档文档为doc格式

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

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