Настроил свой БП на обращения. В нем есть отправка письма.
Для отправки письма используется мультиязычный шаблон. Для формирования письча делаю читать данные схемы Case, потом Действие процесса Обработать шаблон письма с макросами (где указан мой шаблон), затем добавляю данные в раздел Активности и далее отправляю письмо скриптом:
var activityId = Get<Guid>("AddDataID"); if (UserConnection.GetIsFeatureEnabled("UseAsyncEmailSender")) { AsyncEmailSender emailSender = new AsyncEmailSender(UserConnection); emailSender.SendAsync(activityId); } else { var emailClientFactory = ClassFactory.Get<EmailClientFactory>(new ConstructorArgument("userConnection", UserConnection)); var activityEmailSender = new ActivityEmailSender(emailClientFactory, UserConnection); activityEmailSender.Send(activityId); } return true;
Все работает за исключение того, что всегда отправляется только английский вариант письма.
Пример такой настройки взят и стандартного БП Отправка письма при смене статуса обращения.
Вопрос как мне заставить отправлять письмо по настройкам языка получателя?
Нравится
EmailSender скорее всего берет тело сообщения из активности, а там уже лежит текст сообщения на каком то языке.
Почему бы не воспользоваться стандартным блоком "Отправить Email"?
Письмо должно быть привязано в хронологию обращения. К тому делал через отправку стандартным блоком Отправить Email и постоянно какие то ошибки. Не дружу я с ним )
К тому же все стандартные процессы по отправке писем не используют блок Отправить Email, а отправляют скриптами
Попробуй поигратся со сменой языковой культуры перед отправкой
Как то так
cultureId = UserConnection.CurrentUser.SysCultureId;
//cultureId бери из настроек пользователя те тот язык на котором хочешь чтобы было письмо пользователя
esq.SetLocalizationCultureId(cultureId);
Ну или более глобально как то так
userConnection.CurrentUser.SysCultureName = "en-US";
В итоге выяснилось путем тестов. Элемент БП Выполнить действие - - Обработать шаблон письма с макросами не учитывает мультиязычные шаблоны. Делал подмену шаблона из таблицы EmailTemplate на EmailTemplateLang.
var mailTemplateID = Get<Guid>("MailTemplateID"); var usrLangId = Get<Guid>("UserLanguageID")==Guid.Empty ? new Guid("6EBC31FA-EE6C-48E9-81BF-8003AC03B019") : Get<Guid>("UserLanguageID"); var newMailTemplate = new EmailTemplateStore(UserConnection); Set<Guid>("MailTemplateID", newMailTemplate.GetTemplate(mailTemplateID, usrLangId).PrimaryColumnValue); return true;
И подавал на вход Элементу Обработать шаблон письма с макросами - результате пустое письмо. Поэтому перешел на другую отправку писем:
var contactEmail = Get<string>("ContactEmail"); var senderEmail = Get<string>("SenderEmail"); var caseId = Get<Guid>("RecordId"); var templateId = Get<Guid>("MailTemplateID"); var emailTemplateMacrosManager = new EmailWithMacrosManager(UserConnection); emailTemplateMacrosManager.SendEmailFromTo(caseId, templateId, senderEmail, contactEmail); return true;
Хорошо что раздел обращения. Полагаю в другом разделе такая отправка не заработает (