Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamics crm 2011 使用javascript获取当前用户语言_Dynamics Crm 2011_Dynamics Crm_Crm - Fatal编程技术网

Dynamics crm 2011 使用javascript获取当前用户语言

Dynamics crm 2011 使用javascript获取当前用户语言,dynamics-crm-2011,dynamics-crm,crm,Dynamics Crm 2011,Dynamics Crm,Crm,在CRM 2011中,使用javascript,使用以下代码可以轻松获取当前用户语言: Xrm.Page.context.getUserLcid(); 在服务器端使用插件是否也有同样的方法 感谢并致以最诚挚的问候我以前使用过几个选项 使用插件执行上下文中的用户ID对systemuser实体进行检索。不要忘记将列集合设置为只获取用户!否则,systemuser将成为在线环境的重要检索工具 向服务器发出WhoAmI请求 我个人使用前者是因为检索对于使用插件的开发人员来说非常常见,但并不是所有人都熟

在CRM 2011中,使用javascript,使用以下代码可以轻松获取当前用户语言:

Xrm.Page.context.getUserLcid();
在服务器端使用插件是否也有同样的方法


感谢并致以最诚挚的问候

我以前使用过几个选项

  • 使用插件执行上下文中的用户ID对systemuser实体进行检索。不要忘记将列集合设置为只获取用户!否则,systemuser将成为在线环境的重要检索工具

  • 向服务器发出WhoAmI请求

  • 我个人使用前者是因为检索对于使用插件的开发人员来说非常常见,但并不是所有人都熟悉WhoAmI消息(它源于检索:)

    不幸的是,我没有找到一种不向服务器发出请求就获得它的方法。让我知道这是否有帮助


    Nick

    我认为,一旦用户选择了首选语言环境,您就可以使用以下方法选择它:

    Thread.CurrentUICulture.LCID
    

    以下是插件中的一个示例:

    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;
        }
    }
    

    请描述检索systemuser或WhoAmI请求如何获取当前用户语言a
    WhoAmIRequest()
    不会返回用户的语言代码。运行CRM插件的线程通常不会在调用用户的上下文中运行。@Nicknow这与此无关。如果插件正在使用调用用户上下文,那么建议的解决方案比每次运行插件时调用CRM要好得多。“向用户请求”设置更适合于针对用户首选项的外部应用程序,而不是在CRM上下文中运行时。此外,我还将静态RetrieveUserUiLanguageCode设置为私有或公共,以便所有插件都可以使用它。保护它是没有意义的,因为您不是从GetUserLanguage继承的,但是您不知道插件正在使用调用的用户上下文。插件可以在“John Smith”的上下文中执行,即使“Jane Doe”是发起操作的用户。如果您想要与问题中的JavaScript相同的结果,那么您不能依赖线程。这将是一个无法保证的假设,因此CRM SDK不支持您提出的解决方案。我根据您的建议更改了访问器-没有真正查看它,因为我只是将其作为从SDK复制的示例代码发布。在插件中,您可以通过比较执行上下文中的UserId和intatinguserid值来判断您是否在调用用户上下文中。如果它们匹配,则插件在调用用户下运行。