Вопрос

Ссылки в email шаблонах

Здравствуйте! Подскажите как создать ссылку в email-шаблоне(базовом функционале) на конкретную запись.
Дело в том, я нашел только html-элементы, где можно вставлять ссылки, наподобии /0/Nui/ViewModule.aspx#CardModuleV2/ITCardGenerationRequest1Page/edit/{Здесь должен быть Id записи}, но там недоступны максросы, чтобы вставить Id, также пробовал вручную - не работает.

Что-то подобное есть в тексте, но в ссылки опять-таки нельзя вставить макросы.

Нравится

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

Егор, в стандартном справочнике шаблонов 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 в общем случае нужно довольно много вычислений.

 

Ещё пример, в маркете есть БП, который для задач формирует письма-уведомления с гиперссылкой на их карточку.

Зверев Александр, Спасибо, посмотрю!

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