Как сделать свои шаблоны для почтовых уведомлений

В TrackStudio вы можете делать и использовать свои шаблоны для рассылки почтовых уведомлений и подписок. Мы поставляем 2 общих шаблона, текстовый и HTML варианты. Кому-то хватает и их, но многим потребуются шаблоны, соответствующие их корпоративным стандартам и требованиям.
Шаблоны в TrackStudio сделаны на языке разметки Freemarker. Чтобы вам не пришлось изучать этот язык, мы покажем вам, как выводить в эти шаблоны основную информацию из TrackStudio.

Как поменять Subject письма

В тему письма удобнее всего вставлять различные служебные отметки. Например, номер задачи и ее название

<#assign Subject="[#${task.number}] ${task.name}"/>

Некоторые полезные переменные:

${task.projectAlias} — код проекта (то, что записано у вышестоящей задачи в поле Код)
${reasonForSubject} — код события. События могут быть такими:
"Добавлена задача", "Обновлена задача", "Загружен файл", "Добавлено сообщение", "Тестирование", "Подписка".
${task.number} — номер задачи
${task.name} — название задачи
${task.category.name} — категория задачи
${task.status.name} — текущее состояние задачи
${task.resolution.name} — резолюция задачи
${task.priority.name} — приоритет задачи
${task.submitter.name} — имя автора задачи
${task.budgetAsString} — бюджет задачи
${task.actualBudgetAsString} — потраченное время
${DateFormatter.parse(task.submitdate)} — время создания задачи
${DateFormatter.parse(task.updatedate)} — время обновления задачи
${DateFormatter.parse(task.closedate)} — время закрытия задачи (у задачи не в финальном состоянии этого значения нет)
${DateFormatter.parse(task.deadline)} — срок, к которому задачу нужно выполнить (дедлайн)

Как заменить поле "От кого (From)"

Вы можете поменять как имя пользователя, от которого прийдет письмо, так и его email. Для этого нужно задать переменные FromEmail и FromUser

<#if fromUserEmail??>
    <#assign FromEmail="${fromUserEmail}"/>
</#if>
<#if fromUserName??>
    <#assign FromUser="${fromUserName}"/>
</#if>

Здесь ${fromUserEmail} и ${fromUserName} берутся из свойст пользователя в TrackStudio, причем e-mail берется первым из списка, если для пользователя их задано несколько.
Вы можете заменить эти параметры. Например,

<#assign FromEmail="callcenter@domain.com"/>
<#assign FromUser="Call Center"/>

В этом случае письмо придет от "Call Center <callcenter@domain.com>"

Таким же способом можно поменять другие поля. Например ReplyTo:

<#assign ReplyTo="Call Center <callcenter@domain.com>"/>

Или CC (carbon copy)

<#assign CC="Sales Department <sales@domain.com>, IT Department <it@domain.com>"/>

Вы также можете менять остальные заголовки письма, помещая из в Headers, например для использования данных из них в специальных почтовых клиентах или обработчиках.

<#assign Headers={"X-Meta":"data"}/>

Как выбрать формат письма

Для писем, отправляемых через систему уведомлений, нужно указывать тип содержимого: простой текст или html:
для html

<#assign ContentType="text/html;\n charset=\"${charset}\""/>,

для простого текста

<#assign ContentType="text/plain;\n charset=\"${charset}\""/>

${charset} - это переменная, значение которой соответствует выбранной пользователем в настройках профиля кодировке.

Как установить кодировку письма

<#assign ContentType="text/plain;\n charset=\"${charset}\""/>

здесь ${charset} передается из настроек TrackStudio (trackstudio.encoding), но вы можете задать нужную вам кодировку. В таком случае текст шаблона также должен быть в этой кодировке.

Как указать ссылку на задачу

Ссылка на ваш экземпляр TrackStudio хранится в переменной ${link}, соответственно ссылка на задачу будет

{link}/task/${task.number}?thisframe=true — для текстового шаблона и
<a href="${link}/task/${task.number}?thisframe">для шаблона HTML</a>

Как вывести описание задачи

Если у вас шаблон в формате HTML, описание выводится просто как ${task.description}. Для текстового формата можно использовать

<#if task.textDescription??>
${task.textDescription}
</#if>

Как вывести значение дополнительного поля

${task.udfValues["Заголовок"]}

Как вывести список сообщений

<#assign taskMessages = Util.getSortedMessages(task)/>
<#if (taskMessages?size>0)>
<#list taskMessages as msg>
   ${DateFormatter.parse(msg.time)}: ${msg.textDescription}
</#list>
</#if>

При отправке оповещений и уведомлений в переменную reason.code помещается код события. Коды существуют такие:

N: Добавлена новая задача
NA: Добавлена новая задача с приложенным файлом
M: Добавлено новое сообщение
MA: Добавлено новое сообщение с приложенным файлом
A: Добавлен новый приложенный файл
U: Изменена задача
S: Рассылка подписки по расписанию
T: Проверка

Как добавить в CC (carbon copy) уведомления пользователей, указанных в дополнительном поле типа "Пользователь" в задаче

<#assign simpleTask = Util.simplify(task)/>

<#if simpleTask.udfValues["Пользователи"]??>
<#assign userlist = simpleTask.udfValues["Пользователи"]/>
<#assign CC>
<#list userlist?split(";") as u>
<#assign us= Util.findUser(u?trim)/>
<#if us??>
${us.email}<#if u_has_next>, </#if>
</#if>
</#list>
</#assign>
</#if>