2

CRM 2011 SDK を使用して、1 つのオプションセットのラベルを異なる言語で取得する方法を誰かが教えてくれますか?

私の仕事は次のとおりです。たとえば、私はドイツ語と連絡を取り合っているため、SDK はその言語のオプションセットの値を返す必要があります。私の連絡先は英語の国で、SDK は私に英語のラベルを戻す必要があります。

値を取得することは問題ありません:

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

しかし、どうすれば正しい言語でラベルを取得できますか?

4

4 に答える 4

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 メソッドです。System.Linq 名前空間を using ステートメントに追加している限り、すべての IEnumerable にそれが含まれます。

ドイツ語は1031にあります。より正しいルートは、ユーザーの UsersSetting.UILanguageId を検索することですが。テストしていませんが、正しいコードが含まれているはずです...

于 2013-01-23T13:26:47.330 に答える
0

選択した値のユーザーがローカライズしたオプション ラベルを取得するには、以下を試してください。

string myoption;

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

IList<KeyValuePair<string,string>> FormattedValuesは、LINQ を使用してクエリすることもできます。

于 2013-01-23T13:20:41.113 に答える
0
string optionlabel =entity.FormattedValues["optionsetFieldName"];
于 2013-01-30T22:30:05.017 に答える