Asp.net mvc 如何通过Microsoft Dynamics组织服务获取不同语言的OptionSet值和格式化值?

Asp.net mvc 如何通过Microsoft Dynamics组织服务获取不同语言的OptionSet值和格式化值?,asp.net-mvc,dynamics-crm,Asp.net Mvc,Dynamics Crm,我有一个自定义的.NET应用程序来查询和管理Microsoft Dynamics CRM实例上的数据。 此应用程序是多语言的,用户可以通过语言开关更改应用程序的语言 对于连接和操作,我使用的是来自Microsoft.Xrm.Sdk的OrganizationService和CRMServiceClient。这与依赖项注入相结合,将连接传递给不同的类 使用Ninject时,此绑定看起来像 Bind().To().WithConstructArgument(“crmConnectionString”,

我有一个自定义的.NET应用程序来查询和管理Microsoft Dynamics CRM实例上的数据。 此应用程序是多语言的,用户可以通过语言开关更改应用程序的语言

对于连接和操作,我使用的是来自Microsoft.Xrm.Sdk的OrganizationService和CRMServiceClient。这与依赖项注入相结合,将连接传递给不同的类

使用Ninject时,此绑定看起来像 Bind().To().WithConstructArgument(“crmConnectionString”,“连接字符串”)

在Dynamics中查询和更新数据正在工作,但我们无法检索OptionSet值和访问者在自定义应用程序中选择的语言格式的值。即使在调用Dynamics之前更改线程的区域性,这也始终使用相同的语言

我们如何将当前语言/区域性传递给OrganizationService,以便它知道必须使用何种语言检索字段

有人告诉我,这是基于用于连接到CRM的帐户。如果确实是这样,那么这意味着如果我们有5种语言,我们需要5个连接字符串和5个需要调用的OrganizationService实例。在这种情况下,我应该如何处理好这件事


感谢您的回答

我不知道您是否可以将区域性传递给
组织服务
,我认为如果您想这样做,使用不同的连接字符串是可行的

但是,您可以查询CRM以检索所需选项集的本地化标签,如前所述。
总之,它使用了一个,传递实体逻辑名和字段名,并通过结果循环得到标签

var request = new RetrieveAttributeRequest
{
    EntityLogicalName = "incident",
    LogicalName = "casetypecode"
};
var response = organizationService.Execute(request) as RetrieveAttributeResponse;
var optionSetAttributeMetadata = response.AttributeMetadata as EnumAttributeMetadata;
foreach (var option in optionSetAttributeMetadata.OptionSet.Options)
{
    Console.WriteLine($"Localized labels for option {option.Value}:");
    foreach (var locLabel in option.Label.LocalizedLabels)
    {
        Console.WriteLine($"Language {locLabel.LanguageCode}: {locLabel.Label}");
    }

    Console.WriteLine($"Localized description for option {option.Value}:");
    foreach (var locLabel in option.Description.LocalizedLabels)
    {
        Console.WriteLine($"Language {locLabel.LanguageCode}: {locLabel.Label}");
    }
}

链接中的代码还添加了对已检索值的缓存,这样每个选项集只能查询CRM一次。

我实现的解决方案是使用CallerId。 在返回客户端之前,我用Guid填充被调用方ID

Guid来自在Dynamics中使用特定语言配置的用户。
基于语言,我选择了不同的用户。

谢谢科林,这也是我最初考虑的方向。但似乎也有一些OrganizationRequests的执行需要使用不同的语言。我还收到了一些关于模拟OrganizationService和/或使用CallerId的信息。我需要调查一下这种可能性。希望这能成为一个解决方案,这样我就不必完全重写我的应用程序了。