Здравствуйте! Подскажите как создать ссылку в 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>&nbsp;from [#Invoice.Date#] with total amount of [#Invoice.Currency.Short Name#][#Invoice.Amount#]&nbsp;requires approval by user or role&nbsp;&quot;[#Approver.Name#]&quot;.</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 в общем случае нужно довольно много вычислений.
Ещё пример, в маркете есть БП, который для задач формирует письма-уведомления с гиперссылкой на их карточку.