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

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


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

Мультиязычный CRM. Уведомления из рабочих процессов на языке пользователя

Запись от Артем Enot Грунин размещена 04.06.2013 в 17:02
Обновил(-а) Артем Enot Грунин 20.08.2013 в 09:10

UPDATE 20.08.2013: Недавно я обнаружил, что если назначить запись команде "team", то входной параметр этой активности все равно будет инициализирован. При этом, активность будет валиться с ошибкой при попытке прочитать параметры несуществующего пользователя. Пример ниже был обновлен и корректно работает в данной ситуации.

В своем прошлом посте Мультиязычный CRM. Как автоматически назначить пользователю нужный язык я рассказал об одной из проблем, с которой сталкивается разработчик CRM на интернациональных проектах. Однако, назначить пользователю нужный язык - это лишь половина проблемы. В дальнейшем нам придется считаться с этим параметром во всех доработках, которые взаимодействуют с ним в текстовом виде.

Одна из таких задач - стандартные уведомления по электронной почте, которые встречаются в большинстве проектов. Увы, но в текущей версии CRM не предусмотрено способа чтобы получить язык пользователя в рабочем процессе. Технически задача решаема в XAML процессе, но этот способ для сильных духом. Я предпочитаю написать дополнительную активность процесса.

Ниже приведен код активности, которая возвращает числовой код языка пользователя, ссылка на которого была передана активности в качестве параметра:
X++:
    public sealed class GetUserLcidWorkflow : CodeActivity
    {
        [RequiredArgument]
        [Input("Пользователь")]
        [ReferenceTarget("systemuser")]
        public InArgument<EntityReference> SystemUser { get; set; }

        [Output("Код языка пользователя")]
        [Default("1049")]
        public OutArgument<int> LCID { get; set; }

        protected override void Execute(CodeActivityContext executionContext)
        {
            // Create the tracing service
            ITracingService tracingService = executionContext.GetExtension<ITracingService>();

            // Create the context
            IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            EntityReference user = SystemUser.Get<EntityReference>(executionContext);

            if (user.LogicalName == "systemuser")
            {
                Entity userSettings = service.Retrieve("usersettings",
                    user.Id,
                    new ColumnSet("uilanguageid"));

                this.LCID.Set(executionContext, userSettings.GetAttributeValue<int>("uilanguageid"));
            }
            else
            {
                tracingService.Trace("GetUserLcidWorkflow was executed for team reference");
            }
        }
    }
Пример использования такой активности:

Нажмите на изображение для увеличения
Название: Sutup.png
Просмотров: 1268
Размер:	8.2 Кб
ID:	324

На картинке процесс получает язык ответственного за задачу Пользователя, чтобы в дальнейшем обратится к нему на его языке:

Нажмите на изображение для увеличения
Название: branch.png
Просмотров: 1139
Размер:	8.7 Кб
ID:	325
Размещено в CRM
Просмотров 21732 Комментарии 0
Всего комментариев 0

Комментарии

 


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