Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
![](http://www.axforum.info/forums/blog_attachment.php?attachmentid=80&stc=1&d=1296211379)
![](http://www.axforum.info/forums/blog_attachment.php?attachmentid=100&stc=1&d=1296211379)
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Мультиязычный CRM. Как автоматически назначить пользователю нужный язык
Запись от Артем Enot Грунин размещена 28.05.2013 в 15:38
Теги customization, systemuser
В одном из своих прошлых постов, я писал о том, как проще локализовать систему, чтобы не убиться в поисках нужной строки в огромном файле трансляций: Локализация выпадающих списков и других элементов интерфейса.
Сегодня жизнь подкинула другую задачу: как вообще избавить пользователя, от необходимости самостоятельно выбирать язык? Все дело в том, что базовый язык у нас русский, так что коллегам из других стран будет не сладко искать родной "инглишь" в дебрях зловещей кириллицы.
Решение нашлось достаточно простое и элегантное. Создадим и добавим на форму объекта Пользователь (systemuser) новое поле:
![Нажмите на изображение для увеличения
Название: Field.png
Просмотров: 180
Размер: 90.5 Кб
ID: 321](//axforum.info/forums/blog_attachment.php?s=b2fac94bdfb74721d21dea4196cb16be&attachmentid=321&thumb=1&d=1369740118)
Тип - целое число. Формат - Язык. Система будет автоматически отражать в этом поле только те языки, которые включены в параметрах системы:
![Нажмите на изображение для увеличения
Название: settings.png
Просмотров: 85
Размер: 46.7 Кб
ID: 322](//axforum.info/forums/blog_attachment.php?s=b2fac94bdfb74721d21dea4196cb16be&attachmentid=322&thumb=1&d=1369740346)
... и базовый язык, разумеется.
На форме поле будет вести себя так:
![Название: langfield.png
Просмотров: 475
Размер: 2.4 Кб](//axforum.info/forums/blog_attachment.php?s=b2fac94bdfb74721d21dea4196cb16be&attachmentid=323&d=1369740456)
Значением этого поля будет числовой код языка. В данном случае 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