Introduction and
...
prerequisites
JEMH can replicate the Customer Visible Status by taking advantage of the following existing functionalities:
Customizing Email Templates
Velocity Scripting: https://thepluginpeople.atlassian.net/wiki/spaces/JEMH/pages/2850876/Customize+Email+Templates#Macros
Template Sets: /wiki/spaces/JEMH/pages/2850840
JSM Customer Notifications: https://thepluginpeople.atlassian.net/wiki/spaces/JEMH/pages/1210449949/Use+JEMH+For+JSD+Notifications#How-To-Set-Up-Customer-Notifications?
Inhibiting Email NotiicationsNotifications: Prevent /inhibit sending of a notification (Issue Event or Postfunction)
We will not go into detail with the aforementioned functionalities and it suggested . It is recommended that you read the documentation regarding these functionalities before attempting the following sections.
...
We suggest that you create these scripts as a Macros for more info on Macros here: https://thepluginpeople.atlassian.net/wiki/spaces/JEMH/pages/2850876/Customize+Email+Templates#Macros
Setting
...
status variables
To able to replicate the Customer Visible Status functionality you will first need to know what the new updated status typically used for the Generic and Updated Issue Events.
Example Script:
Code Block |
---|
#set($oldStatus = "") #set($newStatus = "") #if ($!changelog) #set ($changeList = $changelog.getRelated("ChildChangeItem")) #foreach($changeListItem in $changeList) #if($item.getString("field") == "status") #set($newStatus = $item.getString("newString")) #set($oldStatus = $item.getString("oldString")) #end #end #end |
...
Prevent/Inhibit status from the customer
These options will inhibit the notification if the Status is updated regardless of any other changes to the Issue for example comments or custom field updates.
You may want to masquerade the status instead or check if the only item in the is the status change see Examples section.
Note |
---|
Make sure you review which change-list items are triggered before inhibition. For example if you want to inhibit a Resolved Status there may be more change-list items than expected. |
As test show the change-list items during a status change by running in a test notification:
Code Block |
---|
#set ($changeList = $changelog.getRelated("ChildChangeItem"))
#foreach($changeListItem in $changeList)
$changeListItem
#end |
Output in test notification email:
Code Block |
---|
[GenericEntity:ChangeItem][newvalue,10000][field,resolution][oldstring,null][newstring,Done][id,10119][fieldtype,jira][oldvalue,null][group,10112]
[GenericEntity:ChangeItem][newvalue,5][field,status][oldstring,In Progress][newstring,Resolved][id,10118][fieldtype,jira][oldvalue,3][group,10112] |
Notice there are two change log items with fields: resolution and status. Therefore if you want to inhibit if the only change was a resolved status type you will need to take into consideration the field “resolution”.
If you want to prevent customers from receiving updates to particular statuses then you will need to set an inhibition more information here: Prevent /inhibit sending of a notification (Issue Event or Postfunction).
...
Code Block |
---|
#set($inhibitThisStatus = "In Progress") |
Inhibit
...
if update is the same
Code Block |
---|
#if($newStatus == $inhibitThisStatus) #if($oldStatus == $newStatus) $jemhUtils.setInhibitSending(true) $jemhUtils.setInhibitSendingReason("Status Notification is inhibited") #end #end |
...
Set a list of Statuses to be treated as another Status.
Masquerade New Status
Code Block |
---|
#set($displayStatus = "") #set($masqueradeAsInProgress = ["Todo", "In Progress"]) #if($masqueradeAsInProgress.contains($newStatus)) #set($displayStatus = "In Progress") #end |
Then you will need to Afterwards find references to the $status variable in your Template and replace it set the status as $displayStatus as the example for example in the Generic Issue Event Notification:
...
Examples
This Macro Script does this the following (Note this is for Issue events with a changelog e.g. Updated Issue Event or Generic Issue Event):
Masquerade “To Do” and “Waiting for support” as “In Progress”
If the issue was already in progress then inhibit the notification and the only notification was a status update then inhibit the notification.
When the issue first transitions to “In Progress” or changes from “In Progress” to different status not listed in the list
$masqueradeAsInProgress
then continue with notification
Code Block |
---|
#macro(customerVisibleStatus $displayStatus)
#set($displayStatus = "")
#set($oldStatus = "")
#set($newStatus = "")
#set($masqueradeAsInProgress = ["Todo", "Waiting for support"])
#if ($!changelog)
#set ($changeList = $changelog.getRelated("ChildChangeItem"))
#foreach($changeListItem in $changeList)
#if($item.getString("field") == "status")
#set($newStatus = $item.getString("newString"))
#set($oldStatus = $item.getString("oldString"))
#end
#end
#if ($masqueradeAsInProgress.contains($newStatus))
#if($masqueradeAsInProgress.contains($oldStatus) && (changelog.size() == 1))
$jemhUtils.setInhibitSending(true)
#else
#set($displayStatus = "In Progress")
#end
#end
#end |