Using ScriptRunner, I'd like to be able to add a new menu item to a Jira ticket, that when clicked will do the following
1) Display a flag acknowledging that the menu item has been pressed
2) Launch a custom URI - in a new window or tab
Right now, I am hard-coding the custom URI, but ultimately it will read in a value that is stored in a field value within the Jira ticket.
So far, I have created the RESTendpoint, like this, based on the example from https://scriptrunner.adaptavist.com/4.3.9/jira/fragments/WebItem.html#_acting_on_the_current_page_issue
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.json.JsonOutput
import groovy.transform.BaseScript
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response
@BaseScript CustomEndpointDelegate delegate
testtool(httpMethod: "GET") { MultivaluedMap queryParams ->
def customURI = 'http://server/?test_suite=test_suite_name&run'
def flag = [
type : 'success',
title: "Test Tool Launched",
close: 'auto',
body : "The test suite has been launched in a new window/tab "+customURI
]
Response.ok(JsonOutput.toJson(flag)).build()
}
When I test the end point, it works. I created a Web Item, that adds the button to the operations-top-level, and is set to "Run code and show a flag". The link is set to /rest/scriptrunner/latest/custom/testtool?issueID=${issue.id}.
When I click the button, the flag is shown, with the correct customURI. So far, everything is going to plan.
Now, I change the RESTEndPoint to open the customURI instead:
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.json.JsonOutput
import groovy.transform.BaseScript
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response
@BaseScript CustomEndpointDelegate delegate
testtool(httpMethod: "GET") { MultivaluedMap queryParams ->
def customURI = 'http://server/?test_suite=hris_prod_compare_demo_tables&run'
def flag = [
type : 'success',
title: "Test Tool Launched",
close: 'auto',
body : "The test suite has been launched in a new window/tab "+customURI
]
Response.temporaryRedirect(URI.create(customURI)).build()
// Response.ok(JsonOutput.toJson(flag)).build()
}
And when I call the RESTEndPoint manually, it correctly redirects me to the customURI location.
And this is now where i get stuck - when I press the web-item button now, nothing happens. I would have expected it to have opened up the customURI that i entered, but that does not seem to be happening.
Second, even if I enable the
Response.ok(JsonOutput.toJson(flag)).build()
no flag is now shown, but I'm not sure if that is because the link to opening up the customURI is not working.
Third, I have not yet found any syntax that would actually open up the customURI link (once I get it working) in a new tab/window, so that it does not interfere with the operation of Jira.
Can someone point me in the right direction for figuring this out?
Update: By changing the web-item from "Run code and display a flag" to "Navigate to this link", the code now works to open up the customURI. I would still like it to open the link in a new window/tab, and for a flag to be displayed to show that an action has occurred.
For now, I have created a work-around by creating a new Script field and adding it to the correct scrren. The code is as follows, and is of type HTML template.
import com.atlassian.jira.component.ComponentAccessor
def customURI='http://server?test_suite=';
def customField = ComponentAccessor.getCustomFieldManager().getCustomFieldObject("customfield_10206");
def value = (String)issue.getCustomFieldValue(customField);
customURI = customURI + value + '&run'
return "<a href='"+customURI+"' target='_blank'>Launch Test Suite for "+value+"</a>";
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.