Приоритет при отправке мультиязычных e-mail сообщений

Коллеги, подскажите какой приоритет определяется при отправке мультиязычных e-mail сообщений?

1. Заполнен ли на странице контакта язык общения

2.Указан ли язык почтового ящика, с которого отправляется email-сообщение (проверка выполняется только продуктах линейки Service).

3.Заполнена ли системная настройка “Язык сообщений по умолчанию”.

Нравится

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

И еще вопрос: через элемент [отправитьe e-mail] при выборе нескольких контактов с разными языками общения можно настроить отправку одного письма с разными языками? Либо же придется использоваться для каждой группы лиц свой элемент?

По приоритету, см. в статье. Очевидно, как раз по порядку.

По поводу элемента в БП, за раз отправляют одному, при использовании группы обычно в БП идёт цикл.

Александр, спасибо!
Правильно ли я понимаю, что если в строке "Адресаты" указать больше одного лица и один говорит на русском языке, а второй на английском, то bpm отправит всем письма на том языке, кого первого прочитала? 
И получится ли сделать так, что одним письмом уйдет группе лиц кому-то на русском, а кому-то на английском?

В элементе «Отправить e-mail» (SendEmailUserTask) я вообще не вижу указания шаблона, там более низкоуровнево: тема и текст. С шаблонами работает блок «Отправить email» (EmailTemplateUserTask). Там логика намного сложнее. Насколько понял, действительно первого в списке получателей. См. в EmailTemplateUserTaskMessageProvider:

protected override (string Body, string Subject) GetEmailContent() {
		Entity entity = null;
		if (UserConnection.GetIsFeatureEnabled("EmailTemplateUserTaskMultiLanguageV2")) { 
			entity = GetMultiLanguageTemplate(EmailUserTask.EmailTemplateId, GetTemplateRecipientId(),
				_emailTemplateUserTaskLanguageIteratorTag);
			if (UserConnection.GetIsFeatureEnabled("UseMacrosAdditionalParameters")) {
				EmailUserTask.MacrosExtendedProperties.LanguageId = entity.GetTypedColumnValue<Guid>("LanguageId");
			}
		} else {
			var templateEsq = GetEmailTemplateContentEsq(EmailUserTask.EmailTemplateId);
			entity = templateEsq.GetEntityCollection(UserConnection).SingleOrDefault();
		}
		var tempalteSubject = string.Empty;
		var body = string.Empty;
		if (entity != null) {
			body = entity.GetTypedColumnValue<string>("Body");
			tempalteSubject = entity.GetTypedColumnValue<string>("Subject");
		}
		string userTaskSubject = GetEmailSubject();
		var subject = string.IsNullOrEmpty(userTaskSubject) ? tempalteSubject : userTaskSubject;
		return (body, subject);
}
 
/// <summary>
/// Returns recipient identifier from email template user task.
/// </summary>
/// <returns>Recipient identifier from email template user task.</returns>
protected virtual Guid GetTemplateRecipientId() {
		var regex = new Regex(@"^Recipient\d+$");
		BaseProcessSchemaElement userTaskSchema = EmailUserTask.GetSchemaElement();
		var processParametersMetaInfo = userTaskSchema as IProcessParametersMetaInfo;
		if (processParametersMetaInfo == null) {
			return Guid.Empty;
		}
		ProcessSchemaParameterCollection parameters = processParametersMetaInfo.ForceGetParameters();
		if (parameters == null || parameters.Count == 0) {
			return Guid.Empty;
		}
		foreach (ProcessSchemaParameter parameter in parameters) {
			if (regex.IsMatch(parameter.Name) && parameter.DataValueType.IsLookup &&
				parameter.ReferenceSchema != null && parameter.ReferenceSchema.Name == _contactSchemaName) {
				object propertyValue = EmailUserTask.GetParameterValue(parameter);
				return (Guid)propertyValue;
			}
		}
		return Guid.Empty;
}

 

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