Показать сообщение отдельно
Старый 04.06.2013, 17:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,643 / 848 (80) +++++++
Регистрация: 28.10.2006
axforum blogs: Мультиязычный CRM. Уведомления из рабочих процессов на языке пользователя
Источник: http://axforum.info/forums/blog.php?b=404
==============

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

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

Ниже приведен код активности, которая возвращает числовой код языка пользователя, ссылка на которого была передана активности в качестве параметра:
X++:
public sealed class GetUserLcidWorkflow : CodeActivity { [RequiredArgument] [Input("Пользователь")] [ReferenceTarget("systemuser")] public InArgument SystemUser { get; set; } [Output("Код языка пользователя")] [Default("1049")] public OutArgument<span style="color: blue"int/span> LCID { get; set; } protected override void Execute(CodeActivityContext executionContext) { // Create the tracing service ITracingService tracingService = executionContext.GetExtension(); // Create the context IWorkflowContext context = executionContext.GetExtension(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); Entity userSettings = service.Retrieve("usersettings", SystemUser.Get(executionContext).Id, new ColumnSet("uilanguageid")); this.LCID.Set(executionContext, userSettings.GetAttributeValue<span style="color: blue"int/span>("uilanguageid")); } }
Пример использования такой активности:



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




Источник: http://axforum.info/forums/blog.php?b=404
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.