![]() |
#1 |
Участник
|
axforum blogs: Мультиязычный CRM. Как автоматически назначить пользователю нужный язык
Источник: http://axforum.info/forums/blog.php?b=402
============== В одном из своих прошлых постов, я писал о том, как проще локализовать систему, чтобы не убиться в поисках нужной строки в огромном файле трансляций: Локализация выпадающих списков и других элементов интерфейса. Сегодня жизнь подкинула другую задачу: как вообще избавить пользователя, от необходимости самостоятельно выбирать язык? Все дело в том, что базовый язык у нас русский, так что коллегам из других стран будет не сладко искать родной "инглишь" в дебрях зловещей кириллицы. Решение нашлось достаточно простое и элегантное. Создадим и добавим на форму объекта Пользователь (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<span style="color: blue"int/span>("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) с выбором единственного атрибута - Язык по умолчанию. Так как процедура создания пользователя - это одна из самых дорогостоящих операций в системе, я рекомендую регистрировать плагин как асинхронный. Если кому из вас нужно готовое решение - пожалуйста, напишите об этом в комментарии, я постараюсь выложить его в ближайшее время. Источник: http://axforum.info/forums/blog.php?b=402
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
|
|