Hello,
I am attempting to use Script Runner to send a Custom Email that includes part of the Issues History.
The part I need to send in the email is the User who made the modification to the Issue. (See Sample image)
I am unable to get the formatting of the Email Template set properly. I keep getting several errors about the Import line and binding when I remove the Import line.
Here is the setup -
JIRA Version 6.4.12
Adaptavist ScriptRunner for JIRA Standard Edition Version: 3.1.4
Script Listeners
- Send Custom Email
-- Email Template
Error
Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): startup failed: GStringTemplateScript68.groovy: 3: Unknown type: IMPORT at line: 3 column: 1. File: GStringTemplateScript68.groovy @ line 3, column 1. import com.atlassian.jira.ComponentManager ^ 1 error
Here is my Email Template -
<%
import com.atlassian.jira.ComponentManager
def componentManager = ComponentManager.getInstance()
def changeHistoryManager = componentManager.getChangeHistoryManager()
%>
<b>There has been an update to an Epic in the Claims project<br><br>
<b>Issue:</b> $issue<br><br>
<b>Summary:</b> $issue.summary<br><br>
<% out << changeHistoryManager.getChangeHistoriesForUser($issue,user)%>
Please help me set the Email Template.
Issue-History-Information.png
Hi Dianne,
Just got some time to write a custom listener for your case. So, create a custom listener, add the project you want to 'listen', for the events field choose Issue Updated and for the inline script:
import com.atlassian.crowd.embedded.api.User import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.Issue import com.atlassian.jira.mail.Email import com.atlassian.mail.server.SMTPMailServer // get the issue that triggers the event (got updated) Issue issue = event.issue // get the user that just updated the issue (in JIRA-7.* will be ApplicationUser) User user = event.user // If the user updated an epic send an email to the user who made the change if (issue.issueTypeObject.name == "Epic") sendEmail(user.emailAddress, "JIRA msg", "You just edited an Epic and you shouldn't") // check if the field that got updated is the Rank def change = event?.getChangeLog()?.getRelated("ChildChangeItem")?.find {it.field == "Rank"} // if the issue is type of Epic and the updated field is the Rank send an email to admin@example.com if (issue.issueTypeObject.name == "Epic" && change) { def emailBody = "User ${user.name} just edited epic ${issue.key} and updated the Rank - ${change.newstring}" sendEmail("admin@example.com", "Rank updated", emailBody) } def sendEmail(String emailAddr, String subject, String body) { SMTPMailServer mailServer = ComponentAccessor.getMailServerManager().getDefaultSMTPMailServer() if (mailServer) { Email email = new Email(emailAddr) email.setSubject(subject) email.setBody(body) mailServer.send(email) log.debug("Mail sent") } else { log.warn("Please make sure that a valid mailServer is configured") } }
Also wrote a couple of comments for what its part of the script does. Hope this will help you.
Kind regards
Thanos
Diane,
If you are using a script listener, what you have available is event. The type of event is whatever you selected to listen to. You can get the user doing the transition from event.user.
You get the issue from event.issue. https://scriptrunner.adaptavist.com/latest/jira/listeners.html#_custom_listeners has much more detail.
If you attach a screenshot of the listener configuration, we could advise more.
> It is extremely difficult to learn how to correctly use these classes, since I am unable to locate any materials that can give a basic reference as what and how they should be used.
All of the material Atlassian provide, javadocs, tutorials etc, is relevant here, but this is not a straightforward thing for someone that is not a developer.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi DIanne,
replace your out with
<% out << com.atlassian.jira.component.ComponentAccessor.getChangeHistoryManager().getChangeHistoriesForUser(issue,user)%>
for the email templates you need to call the full class name.
Kind regards
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I replaced the Out with your version. However, I am still receiving the error about the part about the Import -
Error
Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): startup failed: GStringTemplateScript72.groovy: 3: Unknown type: IMPORT at line: 3 column: 1. File: GStringTemplateScript72.groovy @ line 3, column 1. import com.atlassian.jira.ComponentManager ^ 1 error
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You should also remove the lines:
<%
import com.atlassian.jira.ComponentManager
def componentManager = ComponentManager.getInstance()
def changeHistoryManager = componentManager.getChangeHistoryManager()
%>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I also updated the answer above, I forgot to copy the whole class.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I changed the out part and removed the Import.
The error that I receive now is -
Error
No such property: $issue for class: groovy.lang.Binding
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
try to remove the $ in front of the issue
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Error
No such property: user for class: groovy.lang.Binding
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Ok let's hope that now I don't miss anything else. You can get the user via the event (is the user who triggered the event), so instead of user add event.user.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Sorry,
I am still struggling with the basic construction with how to use these classes to make a complete logical framework in Script Listener.
Is the event item you are referring to - com.atlassian.jira.event.user
Is there some basic reference document on how one would create a working framework?
I don't have any reference material or guidelines to build the basic framework.
The only thing I have are previously created frameworks within Atlassian Answers. From there I try to guess what items should be updated or removed.
It is extremely difficult to learn how to correctly use these classes, since I am unable to locate any materials that can give a basic reference as what and how they should be used.
I have been referencing the following - https://docs.atlassian.com/jira/6.2.1/com/atlassian/jira/event/user/UserEvent.html
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Dianne,
If you tell me what you are want to do, I can come with a script and comments on the steps. I suppose that way you can start understanding how SR works.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Thanos,
I am trying to send a custom email with the person who changed (updated) an issue.
The email needs to send the users name who made any modification to an issue.
We have several epics that should never be modified by anybody other than the Scrum Master, however some of the team members tend to modify the epic and the Scrum Master needs to be notified who made the modification.
The Scrum Master only wants to be notified when the Epic has its Rank changed. This is the only notification that they want.
Thanks.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.