2013-11-28 6 views
0

В CRM 2011 можно легко получить текущий язык пользователя с помощью JavaScript, используя следующий код:Получить текущий язык пользователя с помощью JavaScript

Xrm.Page.context.getUserLcid(); 

есть в любом случае, чтобы сделать то же самое в стороне сервера с помощью плагинов?

Спасибо и наилучшие пожелания

ответ

0

Есть несколько вариантов для этого, что я использовал раньше.

  1. Используйте извлечение на объекте системного пользователя, используя идентификатор пользователя из контекста выполнения плагина. Не забудьте установить набор столбцов, чтобы просто получить пользователя! В противном случае системный пользователь может быть изрядным изъятием для онлайн-ресурсов.

  2. Выдать запрос WhoAmI на сервер.

Я лично использую бывший, потому что Извлекает очень часто для разработчиков, которые используют плагин, но не все знакомы с сообщением WHOAMI (оно происходит от получения: http://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.whoamirequest.aspx)

К сожалению, я не нашел способ получить его, не вызывая запрос на сервер. Позвольте мне знать, если это помогает!

Ник

+0

Пожалуйста, опишите, как получение запроса systemuser или WhoAmI может получить текущий пользовательский язык –

+0

'WhoAmIRequest()' не вернет код языка пользователя. – Nicknow

-1

Я думаю, что как только пользователь выбирает предпочтительный языковой стандарт, вы можете забрать ее с помощью:

Thread.CurrentUICulture.LCID 
+0

Нить, на которой запущен плагин CRM, обычно не запускается в контексте вызывающего пользователя. – Nicknow

+0

@Nicknow Это не имеет значения. Если подключаемый модуль использует контекст пользовательского контекста, то предлагаемое решение намного лучше, чем вызов CRM при каждом запуске подключаемого модуля. Запрос на использование пользователей лучше подходит для внешних приложений, ориентированных на пользовательские настройки, а не при работе внутри контекста CRM. Кроме того, я бы сделал статический RetrieveUserUiLanguageCode личным или общедоступным, поэтому все плагины могут его использовать. делает его защищенным, не имеет смысла, поскольку вы не наследуете от GetUserLanguage –

+0

Но вы не знаете, что подключаемый модуль использует контекст вызывающего пользователя. Плагин может выполняться в контексте «Джон Смит», хотя «Джейн Доу» является пользователем, инициирующим действие. Если вы хотите получить тот же результат, что и JavaScript в указанном вопросе, вы не можете полагаться на Thread. Это сделало бы предположение, что это не гарантировано - поэтому почему ваше предлагаемое решение не поддерживается SDM CRM. Я изменил аксессуар по вашему предложению - на самом деле не посмотрел на него, потому что я просто разместил его как образец кода, скопированный из SDK. – Nicknow

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; 
    } 
} 
Смежные вопросы