二开案例.表达式函数.获取枚举项名称

【应用场景】
在表达式中获取枚举项名称。
【案例演示】
采购订单,新增下拉列表字段,通过表达式将下拉列表选中项的枚举值对应的枚举项名称携带到文本字段。

【实现步骤】
<1>编写函数,实现获取枚举项名称的功能(代码见附件)。
using Kingdee.BOS;
using Kingdee.BOS.Core.DependencyRules;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.Expression.FuncDefine;
using Kingdee.BOS.Core.Metadata.FieldElement;
using System;
namespace Jac.XkDemo.BOS.Core.Functions
{
/// <summary>
/// 【函数】获取枚举项名称
/// </summary>
[Serializable]
public class GetEnumNameFuncDefine : AbstractFuncDefine
{
public GetEnumNameFuncDefine()
{
}
public GetEnumNameFuncDefine(Context ctx, dynamic obj)
{
m_ctx = ctx;
m_obj = obj;
}
public override IFuncDefine GetFunctionDefine(Context ctx, dynamic obj)
{
return new GetEnumNameFuncDefine(ctx, obj);
}
public override object GetFuncDefine()
{
return new Func<string, object>(FuncDefine);
}
/// <summary>
/// 获取枚举项名称
/// </summary>
/// <param name="fieldKey">下拉列表字段标识</param>
/// <returns>返回枚举项名称</returns>
object FuncDefine(string fieldKey)
{
if (string.IsNullOrWhiteSpace(fieldKey))
{
return null;
}
var businessInfo = (BusinessInfo)m_obj.ActiveInfo;
var dynamicRowModel = (BOSDynamicRow)m_obj.ActiveObject;
// 获取字段元数据
var field = businessInfo.GetField(fieldKey) as ComboField;
if (field == null)
{
return null;
}
object fieldValue = null;
if (field.Entity is HeadEntity)
{
fieldValue = dynamicRowModel.Model.GetValue(field);
}
else
{
// 获取字段所在的单据体的数据包
var entityDataObject = dynamicRowModel.Model.GetEntityDataObject(field.Entity);
if (entityDataObject == null || entityDataObject.Count == 0)
{
return null;
}
// 获取当前行的行索引
var currentRowIndex = dynamicRowModel.Model.GetEntryCurrentRowIndex(field.EntityKey);
if (currentRowIndex < 0 || currentRowIndex > entityDataObject.Count - 1)
{
return null;
}
fieldValue = dynamicRowModel.Model.GetValue(field, currentRowIndex);
}
if (fieldValue == null || string.IsNullOrWhiteSpace(fieldValue.ToString()))
{
return null;
}
if (fie
二开案例.表达式函数.获取枚举项名称
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



