Здравствуйте! Подскажите как создать ссылку в email-шаблоне(базовом функционале) на конкретную запись.
Дело в том, я нашел только html-элементы, где можно вставлять ссылки, наподобии /0/Nui/ViewModule.aspx#CardModuleV2/ITCardGenerationRequest1Page/edit/{Здесь должен быть Id записи}, но там недоступны максросы, чтобы вставить Id, также пробовал вручную - не работает.
Что-то подобное есть в тексте, но в ссылки опять-таки нельзя вставить макросы.
Нравится
Егор, в стандартном справочнике шаблонов email-сообщений есть один «Шаблон уведомления о новой визе счета» с гиперссылкой на запись в разделе. Этот шаблон указан в системной настройке InvoiceVisaEmailTemplate. Но в нём, если открыть в дизайнере шаблонов, ссылка сделана просто как цифра в фигурных скобках:
<div>
<a href="{0}" style="color: rgb(8, 87, 166);" target="_blank">Invoice No.[#Invoice.Number#]</a> from [#Invoice.Date#] with total amount of [#Invoice.Currency.Short Name#][#Invoice.Amount#] requires approval by user or role "[#Approver.Name#]".</div>
<div>Его заполнение делается в коде отдельно, во встроенном БП BaseVisa в функции ProcessEmailBody:
public virtual string GetVisaLink() {
var schemaColumns = Entity.Schema.Columns;
var referenceSchemaName = string.Empty;
var referenceSchemaUId = Guid.Empty;
EntitySchemaColumnCollection referenceSchemaColumns = null;
foreach (var column in schemaColumns) {
if (!column.IsInherited && column.DataValueType.IsLookup) {
referenceSchemaName = column.ReferenceSchema.Name;
referenceSchemaUId = column.ReferenceSchema.UId;
referenceSchemaColumns = column.ReferenceSchema.Columns;
}
}
var mainEntityId = Entity.GetTypedColumnValue<Guid>(referenceSchemaName + "Id");
var typeColumnUId = GetSchemaTypeColumnUId(referenceSchemaUId);
var cardSchemaName = string.Concat(referenceSchemaName, "Page");
var cardSchemaUId = Guid.Empty;
if (!typeColumnUId.Equals(Guid.Empty)) {
var typeColumnName = referenceSchemaColumns.GetByUId(typeColumnUId).Name + ".Id";
var typeColumnValue = GetSchemaTypeColumnValue(referenceSchemaName, typeColumnName, mainEntityId);
cardSchemaUId = GetCardSchemaUId(typeColumnValue, SysModuleEntityId);
cardSchemaName = GetCardSchemaName(cardSchemaUId);
} else {
cardSchemaUId = GetCardSchemaUId(Guid.Empty, SysModuleEntityId);
cardSchemaName = GetCardSchemaName(cardSchemaUId);
}
var sectionNameUId = GetSectionName(SysModuleEntityId);
var sectionName = GetCardSchemaName(sectionNameUId);
var template = string.Empty;
var formatStr = string.Empty;
string baseUrl = Terrasoft.Web.Common.WebUtilities
.GetBaseApplicationUrl(Terrasoft.Web.Http.Abstractions.HttpContext.Current.Request);
if (sectionName.Contains("V2")) {
template = "{3}/Nui/ViewModule.aspx#SectionModuleV2/{2}/{0}/edit/{1}";
formatStr = string.Format(template, cardSchemaName, mainEntityId, sectionName, baseUrl);
} else {
template = "{2}/Nui/ViewModule.aspx#CardModule/{0}/view/{1}";
formatStr = string.Format(template, cardSchemaName, mainEntityId, baseUrl);
};
return formatStr;
}
...
public virtual string ProcessEmailBody(string body, Guid contactId, byte[] macrosBytes) {
var url = GetVisaLink();
body = string.Format(body, url);
...Как видим, для получения URL в общем случае нужно довольно много вычислений.
Ещё пример, в маркете есть БП, который для задач формирует письма-уведомления с гиперссылкой на их карточку.