Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Мультиязычный CRM. Как автоматически назначить пользователю нужный язык
Запись от Артем Enot Грунин размещена 28.05.2013 в 15:38
Теги customization, systemuser
В одном из своих прошлых постов, я писал о том, как проще локализовать систему, чтобы не убиться в поисках нужной строки в огромном файле трансляций: Локализация выпадающих списков и других элементов интерфейса.
Сегодня жизнь подкинула другую задачу: как вообще избавить пользователя, от необходимости самостоятельно выбирать язык? Все дело в том, что базовый язык у нас русский, так что коллегам из других стран будет не сладко искать родной "инглишь" в дебрях зловещей кириллицы.
Решение нашлось достаточно простое и элегантное. Создадим и добавим на форму объекта Пользователь (systemuser) новое поле:
Тип - целое число. Формат - Язык. Система будет автоматически отражать в этом поле только те языки, которые включены в параметрах системы:
... и базовый язык, разумеется.
На форме поле будет вести себя так:
Значением этого поля будет числовой код языка. В данном случае 1033 и 1049.
Далее нам необходим плагин, который реализует искомую функциональность и обновит персональные настройки пользователя. Настройки пользователя хранятся в объекте UserSettings, который состоит в отношении 1:1 с объектом Пользователь (SystemUser), что очень удобно, так как нам не придется искать нужный объект в базе. Код плагина предельно прост:
Данный пример реализован с использованием CRM Toolkit для Visual Studio. Плагин следует повесить на этап пост обработки событий создания и обновления объекта Пользователь. Для обоих событий я использовал снимки (PostImage) с выбором единственного атрибута - Язык по умолчанию.
Так как процедура создания пользователя - это одна из самых дорогостоящих операций в системе, я рекомендую регистрировать плагин как асинхронный.
Если кому из вас нужно готовое решение - пожалуйста, напишите об этом в комментарии, я постараюсь выложить его в ближайшее время.
Сегодня жизнь подкинула другую задачу: как вообще избавить пользователя, от необходимости самостоятельно выбирать язык? Все дело в том, что базовый язык у нас русский, так что коллегам из других стран будет не сладко искать родной "инглишь" в дебрях зловещей кириллицы.
Решение нашлось достаточно простое и элегантное. Создадим и добавим на форму объекта Пользователь (systemuser) новое поле:
Тип - целое число. Формат - Язык. Система будет автоматически отражать в этом поле только те языки, которые включены в параметрах системы:
... и базовый язык, разумеется.
На форме поле будет вести себя так:
Значением этого поля будет числовой код языка. В данном случае 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); } } }
Так как процедура создания пользователя - это одна из самых дорогостоящих операций в системе, я рекомендую регистрировать плагин как асинхронный.
Если кому из вас нужно готовое решение - пожалуйста, напишите об этом в комментарии, я постараюсь выложить его в ближайшее время.
Всего комментариев 0