获取Data Entity字段类型:字符串长度与枚举名称需求
获取Data Entity字段的类型、字符串长度及枚举信息(X++)
原代码中直接将字段转为字符串后调用typeOf(),只能得到字符串本身的类型,无法获取Data Entity字段的真实元数据。要解决这个问题,需要通过DataEntityViewField类访问字段的完整元数据,结合元数据工具类获取类型、长度和枚举信息。
修正后的代码示例
public static void main(Args _args) { var entityNames = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetDataEntityViewNames(); var enumerator = entityNames.GetEnumerator(); while (enumerator.MoveNext()) { str entityName = enumerator.Current; Info(strFmt("Data Entity: %1", entityName)); DataEntityView dataEntity = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetDataEntityView(entityName); var fieldsEnumerator = dataEntity.Fields.GetEnumerator(); while (fieldsEnumerator.MoveNext()) { DataEntityViewField field = fieldsEnumerator.Current; str fieldName = field.Name; ExtendedDataTypeName dataTypeName = field.DataType; Types fieldType = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetExtendedDataTypeType(dataTypeName); Info(strFmt("Field: %1, Type: %2", fieldName, enum2Str(fieldType))); // 处理字符串类型,获取长度 if (fieldType == Types::String) { int stringLength = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetExtendedDataTypeStringSize(dataTypeName); Info(strFmt(" String length: %1", stringLength)); } // 处理枚举类型,获取枚举名称及值 else if (fieldType == Types::Enum) { EnumId enumId = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetExtendedDataTypeEnumId(dataTypeName); str enumName = enumId2Name(enumId); Info(strFmt(" Enum name: %1", enumName)); // 遍历枚举值与标签 SysDictEnum dictEnum = new SysDictEnum(enumId); for (int i = 0; i < dictEnum.values(); i++) { Info(strFmt(" Enum value: %1 - %2", dictEnum.index2Value(i), dictEnum.index2Label(i))); } } } break; // 仅演示第一个实体,移除可遍历所有实体 } }
关键逻辑说明
- 获取字段元数据:
dataEntity.Fields返回的是DataEntityViewField集合,直接获取该对象可得到字段的名称、扩展数据类型等核心属性,无需转为字符串。 - 判断字段类型:通过
Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetExtendedDataTypeType(),传入字段的扩展数据类型名称,得到真实的Types枚举类型。 - 字符串长度获取:使用
GetExtendedDataTypeStringSize()方法,基于扩展数据类型名称获取字符串的最大长度。 - 枚举信息获取:
- 通过
GetExtendedDataTypeEnumId()获取枚举的ID; - 用
enumId2Name()将ID转为枚举名称; - 实例化
SysDictEnum遍历枚举的所有值和对应的标签。
- 通过
内容的提问来源于stack exchange,提问作者Mohammad Yusuf
相关产品推荐
相关产品推荐

