在CRM 2011中,使用以下代码很容易使用javascript获取当前用户语言:
Xrm.Page.context.getUserLcid();
无论如何使用插件在服务器端做同样的事情吗?
谢谢和最好的问候
答案 0 :(得分:2)
以下是插件中的示例:
class GetUserLanguage : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
//PluginSetup abstracts setup code: http://nicknow.net/dynamics-crm-2011-abstracting-plugin-setup/
var p = new PluginSetup(serviceProvider);
var user = p.Context.InitiatingUserId;
var lcid = RetrieveUserUiLanguageCode(p.Service, user);
}
//From the SDK: http://msdn.microsoft.com/en-us/library/hh670609.aspx
private static int RetrieveUserUiLanguageCode(IOrganizationService service, Guid userId)
{
var userSettingsQuery = new QueryExpression("usersettings");
userSettingsQuery.ColumnSet.AddColumns("uilanguageid", "systemuserid");
userSettingsQuery.Criteria.AddCondition("systemuserid", ConditionOperator.Equal, userId);
var userSettings = service.RetrieveMultiple(userSettingsQuery);
if (userSettings.Entities.Count > 0)
{
return (int)userSettings.Entities[0]["uilanguageid"];
}
return 0;
}
}
答案 1 :(得分:0)
我之前使用过几种选择。
使用插件执行上下文中的userid在systemuser实体上使用Retrieve。不要忘记将列设置为仅获取用户!否则,systemuser可能是对在线环境的大量检索。
向服务器发出WhoAmI请求。
我个人使用前者,因为对于使用插件的开发人员来说,检索很常见,但并非所有人都熟悉WhoAmI消息(它来自retrieve:http://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.whoamirequest.aspx)
不幸的是,我没有找到一种方法来获取它而不向服务器发出请求。如果这有帮助,请告诉我!
尼克
答案 2 :(得分:-1)
我认为,一旦用户选择首选语言环境,您可以使用以下方式进行选择:
Thread.CurrentUICulture.LCID