按标签而不是按值查找枚举

时间:2017-05-24 22:55:54

标签: enums axapta dynamics-ax-2012

是否有一种快速查找枚举的方法,只使用枚举的标签而不是值。假设Enum类型是SalesStatus,我希望能够基本上调用某种函数,如enumLabel2Value(enumStr(SalesStatus),“Open order”),它将返回1.

我试图避免循环通过所有可能的值并分别检查每个值,似乎这应该是随时可用的东西,因为每当用户过滤网格上的枚举列时,它们都会输入标签,而不是价值,但我没有看到类似的东西。

2 个答案:

答案 0 :(得分:3)

它不存在,因为标签可以是不同语言的各种东西。 symbol2Value()虽然存在,但您可能正在寻找,但您的问题仅针对标签。这可能是非常糟糕的一个例子......

假设您有一个名为GoodBadPresent的枚举,用两个值表示您将收到的圣诞礼物类型:

  1. GoodBadPresent::Poison英文标签:“Poison”;德国品牌:“礼物
  2. GoodBadPresent::Gift英文标签:“礼物”;德国品牌:“Geschenk”
  3. 如果此示例不明确,则德语中Poison的字词为Gift。因此,如果您尝试将Gift解析为枚举值,则还必须提供该语言。这里的性能问题可能大于循环枚举的性能问题。

    您可以查看DictEnum,看看是否有任何方法可以帮助您更简洁地实现您想要的效果。 https://msdn.microsoft.com/en-us/library/gg837824.aspx

    我对您的场景细节更感兴趣,您需要从标签返回枚举。

答案 1 :(得分:3)

您可以使用str2Enum功能。来自文档:

  

检索其本地化 Label 属性值的枚举元素   匹配输入字符串。

除了Alex Kwitny的回答之外,我建议您查看文档的评论,特别是评论

  

请注意,str2Enum执行部分匹配并匹配   字符串的开头。如果有多个匹配,则需要   第一个。

另外,请查看类string2Enum的方法DMFEntityBase,它支持如何指定枚举元素的不同选项。我认为使用DictEnum.name2Value()方法枚举其标签指定的枚举元素。

<强>更新

OP在对Alex Kwitny的回答中提到,这是他遇到问题的特定枚举ExchangeRateDisplayFactorstr2Enum也适用于该枚举,如以下作业所示:

static void str2EnumTest(Args _args)
{
    ExchangeRateDisplayFactor factor;

    factor = str2Enum(factor, '1');
    info(strFmt('%1', factor)); // outputs '1'
    factor = str2Enum(factor, '10');
    info(strFmt('%1', factor)); // outputs '10'
    factor = str2Enum(factor, '100');
    info(strFmt('%1', factor)); // outputs '100'
    factor = str2Enum(factor, '1000');
    info(strFmt('%1', factor)); // outputs '1000'
    factor = str2Enum(factor, '10000');
    info(strFmt('%1', factor)); // outputs '10000'
}