簡體   English   中英

Dynamics CRM 2011 OptionSetValue用不同的語言

[英]Dynamics CRM 2011 OptionSetValue in different languages

有人可以幫助我弄清楚如何使用CRM 2011 SDK檢索一個選項集標簽的不同語言嗎?

我的任務如下:例如,我與德語聯系,那么我的sdk應該帶回該語言的optionsset值。 如果我與某個英國國家/地區聯系過,SDK應該將我帶回英語標簽,依此類推。

獲取值沒問題:

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

但是如何獲得正確語言的標簽?

您需要執行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;訪問德語文本return optionList.GetFirst(o => o.Value == optSetValue).Label.UserLocalizedLabel.Label;

我傾向於緩存元數據,而不是經常訪問CRM服務器以獲取文本信息。 但是話又說回來,我在一家只有英文的組織中,不必擔心人們使用的是什么語言...

評論中的其他答案

GetFirst()只是一個標准的Linq方法。 只要您在using語句中添加了System.Linq命名空間,任何IEnumerable都將擁有它。

德語為1031 盡管更正確的方法是查找用戶的UsersSetting.UILanguageId。 我相信其中應該包含正確的代碼,盡管我尚未對其進行測試...

要檢索所選值的用戶本地化選項標簽,請嘗試

string myoption;

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

也可以使用LINQ查詢IList<KeyValuePair<string,string>> FormattedValues

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

適用於我的代碼:

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;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM