Email Template Context

This pages lists and describes objects available when rendering email template.

Workflow transition context

Since the email template is rendered during execution of a workflow post-function it has access to values set in this transition. If the workflow transition has a screen it will also see the values set in the form and comment added to the transition.

Context objects

  • ${issue} – [com.atlassian.jira.issue.IssueImpl] Issue object
  • ${description} – [String] Formatted issue description – wiki format already rendered to HTML
  • ${proj} – [com.atlassian.jira.project.ProjectImpl] Project object
  • ${project} – [org.ofbiz.core.entity.GenericValue] Project entity
  • ${pkey} – [String] Project Key
  • ${baseurl} – [String] Base URL of the application (ex. http://localhost:2990/jira)
  • ${userKey} – [String] Current user (user who triggered the transition)
  • ${comment} – [String] Comment submitted in the view
  • ${commentLevel} – [String] Comment submitted in the view
  • ${roleLevel} – [String] Comment submitted in the view
  • ${actionId} – [Integer] The transition ID number
  • ${cfUtils} – [lv.itidea.jira.plugins.workflow.pf.email.CustomFieldHelper] Plugin’s utility class to help fetching the issue’s customfield values
  • ${i18n} – [com.atlassian.jira.web.bean.I18nBean] Bean for accessing the message translations
  • ${currentMillis} – [java.lang.Long] current time in milliseconds
  • ${stringUtils} – [org.apache.commons.lang.StringUtils] Apache Commons utility class
  • ${dateTimes} – [com.atlassian.jira.datetime.DateTimeVelocityUtils] Provides methods for parsing Date
  • ${dates} – [com.atlassian.jira.datetime.DateVelocityUtils] Provides methods for parsing Date
  • ${dateFormatter} – [com.atlassian.jira.datetime.DateTimeFormatter] JIRA date time formatter class
  • ${dateTimeStyle} – [com.atlassian.jira.datetime.DateTimeStyle] JIRA Date Time Style enum
  • ${jirautils} – [com.atlassian.jira.util.JiraUtils] JIRA utility class
  • ${jirakeyutils} – [com.atlassian.jira.util.JiraKeyUtils] JIRA utility class
  • ${userutils} – [com.atlassian.jira.user.UserUtils] Bean for retrieving users
  • ${jiraUserUtils} – [com.atlassian.jira.user.util.UserUtil] Bean for retrieving users and groups
  • ${avatarService} – [com.atlassian.jira.avatar.AvatarService] JIRA Avatar service
  • ${externalLinkUtil} – [com.atlassian.jira.web.util.ExternalLinkUtil] JIRA external link utility class
  • ${cfValueEncoder} – [com.atlassian.jira.render.SwitchingEncoder] JIRA customfield value HTML encoder class
  • ${projectManager} – [com.atlassian.jira.project.ProjectManager] JIRA project manager
  • ${customFieldManager} – [com.atlassian.jira.issue.CustomFieldManager] JIRA custom field manager
  • ${constantsManager} – [com.atlassian.jira.config.ConstantsManager] JIRA constants manager
  • ${issueConstantWebComponent} – [com.atlassian.jira.web.component.IssueConstantWebComponent] JIRA constants image rendering class
  • ${velocityhelper} – [com.atlassian.jira.util.JiraVelocityHelper] JIRA Velocity helper class
  • ${urlcodec} – [com.atlassian.jira.util.JiraUrlCodec] JIRA URL query params encoding helper class
  • ${urlModeAbsolute} – [com.atlassian.plugin.webresource.UrlMode] Instance of UrlMode.ABSOLUTE enum
  • ${webResourceUrlProvider} – [com.atlassian.plugin.webresource.WebResourceUrlProvider] JIRA utility for formatting URLs
  • ${build} – [com.atlassian.jira.util.BuildUtilsInfo] JIRA build information class
  • ${textutils} – [com.opensymphony.util.TextUtils] Text utility class
  • ${xmlutils} – [com.atlassian.core.util.XMLUtils] XML utility class

Use of Context Objects

Listed above objects can be referenced in the template using Velocity expressions.

Accessing issue fields

  • ${issue.summary}
  • ${description} – Rendered version of ${issue.description} field
  • ${issue.description}
  • ${issue.assigneeId}
  • ${issue.assignee.displayName}
  • ${issue.reporterId}
  • ${issue.reporter.emailAddress}
  • ${issue.priority}
  • ${issue.priorityObject}
  • ${issue.created}
  • ${issue.updated}
  • ${issue.dueDate}
  • ${issue.resolutionDate}
  • ${issue.status}
  • ${issue.statusObject}

Accessing issue customfields

  • $!{cfUtils.getValue($issue, “customfield_10000”)} – Retrieving string representation of customfield value or null
  • $!{cfUtils.getRenderedValue($issue, “customfield_10000”)} – Retrieving rendered value of customfield or null
  • $!{cfUtils.getVal($issue, “customfield_10000”)} – Retrieving actual value object of customfield value or null

Accessing Checkbox and Multiselect list values (value of type java.util.ArrayList)

  • $!{cfUtils.getVal($issue, “customfield_10000”).get(0)} – Retrieving first selected option of checkbox or multiselectlist customfield (might be null!)

Accessing Radiobutton and Select list values (value of type com.atlassian.jira.issue.customfields.option.Option)

  • $!{cfUtils.getVal($issue, “customfield_10000”).getValue()} – Retrieving selected option name of radiobutton or (single) select list customfield (might be null!)

Accessing Cascading select list values (value of type java.util.HashMap)

  • $!{cfUtils.getVal($issue, “customfield_10000”).get(null)} – Retrieving selected 1st level option of cascading select list customfield (might be null!)
  • $!{cfUtils.getVal($issue, “customfield_10000”).get(“1”)} – Retrieving selected 2nd level option of cascading select list customfield (might be null!)

Accessing current user username

  • ${userKey}

Accessing comment provided with transition

  • ${comment}

Example

Here is an example of simple email template containing fields from issue.

<p>This is ticket <b>${issue.key}</b> from <b>${issue.project.name}.</b></p>
<p>And you have to do:
$!{issue.summary}
</p>
<p>How to do it:
#if (${issue.description})
${issue.description}
#else
is not defined.
#end
</p>
<p><b>Problem:</b> $!{cfUtils.getValue($issue, "customfield_10000")}</p>
<p><b>Steps to reproduce:</b> $!{cfUtils.getRenderedValue($issue, "customfield_10001")}</p>
<p><b>Remote user:</b> $!{cfUtils.getValue($issue, "customfield_10003")}</p>
<p><b>Tags:</b> $!{cfUtils.getValue($issue, "customfield_10004")}</p>

#if ($comment) 
<p> 
<b>${userKey}</b> commented: $comment 
</p>
#end

<p>Have a nice day!</br>
${issue.reporter.displayName}
</p>