Как убрать желтизну в письме

Есть процесс в котором идет обработка писем и автоматическая рассылка. Если отправлять письма через элемент отправить Email, то все отлично форматирует. пустые данные просто пропускает. Но отправленные письма должны прикрепляться к обращению. Поэтому при отправке письма используются скрипты, а не элемент БП Отправить Email. Остается вопрос как в письме убрать желтизну от макросов на те данные, которых еще нет в обращении

Нравится

3 комментария

Алексей, а какие именно скрипты используете для отправки и замены макросов? Откуда вообще взялся жёлтый цвет, он был в сохранённом в справочнике шаблоне письма?

Александр, желтым цветом система сама выделяет поля макросов, которые не найдены значения. Вот скрипт отправки письма

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, чтобы заменяла не на жёлтое, а пустое.

Показать все комментарии