AXForum  
Вернуться   AXForum > Блоги > CRM, SharePoint и Черная Магия
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
  • Консалтинг
  • Проектирование
  • Разработка
  • Обучение


MVP 2010, 2011
Оценить эту запись

Мультиязычный CRM. Как автоматически назначить пользователю нужный язык

Запись от Артем Enot Грунин размещена 28.05.2013 в 15:38

В одном из своих прошлых постов, я писал о том, как проще локализовать систему, чтобы не убиться в поисках нужной строки в огромном файле трансляций: Локализация выпадающих списков и других элементов интерфейса.

Сегодня жизнь подкинула другую задачу: как вообще избавить пользователя, от необходимости самостоятельно выбирать язык? Все дело в том, что базовый язык у нас русский, так что коллегам из других стран будет не сладко искать родной "инглишь" в дебрях зловещей кириллицы.

Решение нашлось достаточно простое и элегантное. Создадим и добавим на форму объекта Пользователь (systemuser) новое поле:

Нажмите на изображение для увеличения
Название: Field.png
Просмотров: 2194
Размер:	90.5 Кб
ID:	321

Тип - целое число. Формат - Язык. Система будет автоматически отражать в этом поле только те языки, которые включены в параметрах системы:

Нажмите на изображение для увеличения
Название: settings.png
Просмотров: 2093
Размер:	46.7 Кб
ID:	322

... и базовый язык, разумеется.

На форме поле будет вести себя так:

Название: langfield.png
Просмотров: 479

Размер: 2.4 Кб

Значением этого поля будет числовой код языка. В данном случае 1033 и 1049.

Далее нам необходим плагин, который реализует искомую функциональность и обновит персональные настройки пользователя. Настройки пользователя хранятся в объекте UserSettings, который состоит в отношении 1:1 с объектом Пользователь (SystemUser), что очень удобно, так как нам не придется искать нужный объект в базе. Код плагина предельно прост:
X++:
protected void ExecutePlugin(LocalPluginContext localContext)
        {
            IPluginExecutionContext context = localContext.PluginExecutionContext;

            Entity postImageEntity;
            if (context.PostEntityImages.TryGetValue(postImageAlias, out postImageEntity) == true)
            {
                int? langCode = postImageEntity.GetAttributeValue<int>("fixrm_defaultlanguage");

                if(langCode != null)
                {
                    Entity usersettings = new Entity
                    {
                        LogicalName = "usersettings",
                        Id = postImageEntity.Id
                    };
                    usersettings.Attributes.Add("uilanguageid", langCode);
                    usersettings.Attributes.Add("helplanguageid", langCode);

                    localContext.OrganizationService.Update(usersettings);
                }
            }
        }
Данный пример реализован с использованием CRM Toolkit для Visual Studio. Плагин следует повесить на этап пост обработки событий создания и обновления объекта Пользователь. Для обоих событий я использовал снимки (PostImage) с выбором единственного атрибута - Язык по умолчанию.

Так как процедура создания пользователя - это одна из самых дорогостоящих операций в системе, я рекомендую регистрировать плагин как асинхронный.

Если кому из вас нужно готовое решение - пожалуйста, напишите об этом в комментарии, я постараюсь выложить его в ближайшее время.
Размещено в CRM
Просмотров 33882 Комментарии 0
Всего комментариев 0

Комментарии

 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:34.