Using an external reference key to identify a ticket instead of using Ticket Number generated by Jira



Often the ticket number generated by Jira is used within the mail which prevents duplication and comment driven behaviour. However, there might be some clients that use another reference key which is often generated by another application/plugin and the following script can be used to aid this sort of functionality...

 

Since JEMH 3.3.21 we lock down access to arbitrary classes in the script context, they cannot be accessed using historic methods:

var filter = PagerFilter.static.getUnlimitedFilter(); var builder = JqlQueryBuilder.static.newBuilder();

but need to be gained through fully specified class names:

var filter = Java.type("com.atlassian.jira.web.bean.PagerFilter").getUnlimitedFilter(); var builder = Java.type("com.atlassian.jira.jql.builder.JqlQueryBuilder").newBuilder();

These specific classes were not initially added, are available since JEMH 3.3.38

 

var pattern = Java.type("java.util.regex.Pattern").compile("#IR-([0-9]+)"); var matcher = pattern.matcher(subject); var itsmReference = ""; if (matcher.find()) { var group = matcher.group(1); if (group) { itsmReference = group; var issueKey = ""; if (itsmReference.length()>0) { var user = userManager.getUserByKey("admin"); var filter = Java.type("com.atlassian.jira.web.bean.PagerFilter").getUnlimitedFilter(); var builder = Java.type("com.atlassian.jira.jql.builder.JqlQueryBuilder").newBuilder(); var query = builder.where().field("ITSM Reference").like(itsmReference).buildQuery(); var results = searchService.search(user, query, filter).getResults(); if (results.size()>0) { //Issue found var issue = results[0]; issueKey = issue.getKey(); resultMap.put("issueKey", issueKey); if (subject.toLowerCase().indexOf("resolved") > 0) { resultMap.put("workflow", "done"); }else { resultMap.put("comment", body); } } else { //Issue not found print("No issues match using JQL: "+query); resultMap.put("ITSM Reference", itsmReference); } } } }

This script was designed to identify the ITSM reference number which is stored in a custom field on a ticket. If the ITSM number is located within existing tickets, issueKey (ticket number) will be obtained and additional manipulation can be done with the ticket. The key functionality within the script is to create a new ticket if the ITSM reference number cannot be found. If found and the subject has the keyword "resolved", it will change the workflow of the ticket to done; otherwise, it will treat the mail as a comment.