Есть процесс в котором идет обработка писем и автоматическая рассылка. Если отправлять письма через элемент отправить Email, то все отлично форматирует. пустые данные просто пропускает. Но отправленные письма должны прикрепляться к обращению. Поэтому при отправке письма используются скрипты, а не элемент БП Отправить Email. Остается вопрос как в письме убрать желтизну от макросов на те данные, которых еще нет в обращении
Нравится
Алексей, а какие именно скрипты используете для отправки и замены макросов? Откуда вообще взялся жёлтый цвет, он был в сохранённом в справочнике шаблоне письма?
Александр, желтым цветом система сама выделяет поля макросов, которые не найдены значения. Вот скрипт отправки письма
var contactEmail = Get<string>("ContactMail"); var senderEmail = Get<string>("SenderEmail"); var caseId = Get<Guid>("CaseId"); var templateId = Get<Guid>("TemplateEmail"); var userConnection = UserConnection.AppConnection.SystemUserConnection; var emailTemplateMacrosManager = new EmailWithMacrosManager(userConnection); if (UserConnection.GetIsFeatureEnabled("EmailMessageMultiLanguageV2")) { _log.Debug("EmailMessageMultiLanguageV2=true"); emailTemplateMacrosManager.SendEmailFromTo(caseId, templateId, senderEmail, contactEmail); } else { var emailTemplateStore = new EmailTemplateStore(userConnection); var emailTemplateLanguageHelper = new EmailTemplateLanguageHelper(caseId, userConnection); var languageId = emailTemplateLanguageHelper.GetLanguageId(templateId); var templateEntity = emailTemplateStore.GetTemplate(templateId, languageId); emailTemplateMacrosManager.SendEmailFromTo(caseId, templateEntity.PrimaryColumnValue, senderEmail, contactEmail); } return true;
Эта функциональность была добавлена специально, чтобы пользователь наглядно видел, что в данных полях нет значений и ему необходимо вручную отредактировать подобное письмо перед отправкой.
Сама логика с жёлтым цветом реализована в MacrosHelperV2:
private const string MacrosHighlightsTemplate = "<span class=\"unhandled-macro\" style=\"background-color:#fff94f;\">[#{0}#]</span>"; ... /// <summary> /// Returns the DOM markup to highlight value. /// </summary> /// <param name="value">Text that needs to be highlighted.</param> /// <returns>DOM markup.</returns> private string GetHighlights(string value) { string highlight = string.Format(MacrosHighlightsTemplate, value); return highlight; } ... /// <summary> /// Highlights macroses in template text. /// </summary> /// <param name="template">Template text.</param> /// <param name="macrosInfo">Macroses list.</param> /// <returns>Template text with highlights.</returns> protected virtual string ReplaceMacros(string template, List<MacrosInfo> macrosInfo) { string result = template; foreach (MacrosInfo item in macrosInfo) { string macrosDisplayValue = string.Format(MacrosTemplate, item.Alias); string highlights = GetHighlights(item.Alias); result = result.Replace(macrosDisplayValue, highlights); } return result; }
Судя по тому, что последняя функция виртуальная, переопределять можно её без вызова функции, использующей строку.
У Вас используются функции из схем EmailWithMacrosManager (SendEmailFromTo и GetTemplateBody), BaseEmailWithMacrosManager (GetTemplateBody), GlobalMacrosHelper(GetTextTemplate) и MacrosHelperV2 (GetTextTemplate, GetHighlightedTemplate, ReplaceMacros и GetHighlights).
Поскольку в них не видно никаких логических параметров для выключения подсветки, вероятно, нужно будет делать свои аналоги этих схем путём переопределения базовых, чтобы в итоге заменить логику ReplaceMacros, чтобы заменяла не на жёлтое, а пустое.