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>