Dynamics CRM 2011 OptionSetValue使用不同语言

时间:2013-01-23 13:07:31

标签: c# dynamics-crm-2011 crm

有人可以帮我弄清楚如何使用CRM 2011 SDK检索一个选项集标签的不同语言吗?

我的任务如下: 例如,我有一个与德语的联系,然后我的sdk应该带回我那个语言的选项集值。我的联系方式是英国国家,sdk应该把我带回英文标签等等。

获取价值没问题:

int optSetValue = ((OptionSetValue)entity["optionsetFieldName"]).value

但我怎样才能以正确的语言获得标签?

4 个答案:

答案 0 :(得分:4)

您需要执行RetrieveAttributeRequest来获取EnumAttributeMetadata,然后根据语言代码查找正确的值:

string languageCode = germanLanguageCode; // Set
int optSetValue =  0; // Set
RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest
{
    EntityLogicalName = entityLogicalName,
    LogicalName = attributeName,
    RetrieveAsIfPublished = true
};

var response = (RetrieveAttributeResponse)service.Execute(attributeRequest);
var optionList = ((EnumAttributeMetadata)response.AttributeMetadata).OptionSet.Options;

return optionList.GetFirst(o => o.Value == optSetValue).Label.LocalizedLabels.First(l => l.LanguageCode == languageCode).Label;

或者,如果您的服务是以德语用户身份运行,那么您可以通过return optionList.GetFirst(o => o.Value == optSetValue).Label.UserLocalizedLabel.Label;

访问德语文本

我倾向于缓存元数据,而不是经常访问CRM服务器以获取文本信息。但话说回来,我只是一个英语组织,不必担心人们使用的语言......

评论的其他答案

GetFirst()只是标准的Linq方法。只要您在using语句中添加了System.Linq命名空间,任何IEnumerable都会拥有它。

德语位于1031。虽然更正确的路线是查找用户的UsersSetting.UILanguageId。我认为应该包含正确的代码,尽管我还没有测试过它......

答案 1 :(得分:0)

要检索所选值的用户本地化选项标签,请尝试

string myoption;

if (!entity.FormattedValues.TryGetValue("optionsetFieldName", out myoption))
{
    myoption = "Not found";
}

还可以使用LINQ查询IList<KeyValuePair<string,string>> FormattedValues

答案 2 :(得分:0)

string optionlabel =entity.FormattedValues["optionsetFieldName"];

答案 3 :(得分:0)

为我工作的代码:

public static dynamic GetOptionSet(string entityName, string fieldName, int langId, OrganizationServiceProxy proxy)
{
    RetrieveEntityRequest retrieveDetails = new RetrieveEntityRequest();
    retrieveDetails.EntityFilters = EntityFilters.All;
    retrieveDetails.LogicalName = entityName;

    RetrieveEntityResponse retrieveEntityResponseObj = (RetrieveEntityResponse)proxy.Execute(retrieveDetails);
    EntityMetadata metadata = retrieveEntityResponseObj.EntityMetadata;
    PicklistAttributeMetadata picklistMetadata = metadata.Attributes.FirstOrDefault(attribute => String.Equals(attribute.LogicalName, fieldName, StringComparison.OrdinalIgnoreCase)) as PicklistAttributeMetadata;
    OptionSetMetadata options = picklistMetadata.OptionSet;
    var optionlist = (from o in options.Options
                          select new { Value = o.Value, Text = o.Label.LocalizedLabels.First(l => l.LanguageCode == langId).Label }).ToList();

    return optionlist;

}