I want to update JIRA issue status. What have I done so far?
Firstly I get the transition ids with;
https://hostname/rest/api/2/issue/{issueKey}/trans itions
This returned me(shorten form);
{
"expand":"transitions",
"transitions":[
{
"id":"11",
"name":"To Do"
},
{
"id":"21",
"name":"In Progress"
},
{
"id":"31",
"name":"In Review"
},
{
"id":"41",
"name":"Done"
}
]
}
To be able to do the transition;
var url = "https://hostname/rest/api/2/issue/{issueKey}/transitions";
var message = [{
"update": {
"comment": [{
"add": {
"body": "comment"
}
}],
"worklog" : [{
"add": {
"timeSpent" : "timeSpent"
}
}]
},
"fields": {
"resolution": {
"name": "To Do"
}
},
"transition": {
"id": "11"
}
}];
request({
url: url,
method: "POST",
json: true,
body: message
}, function (error, result){
if(error){
nresponse.error(res, error);
}else{
console.log(result);
}
});
This code snippet doesn't throw an error. Actually it returns successfully. But when I check the status, comment section of the issue, I see that nothing has changed. What am I missing? How can I update the JIRA issue status with `node.js`?
console.log(result);
returns as;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Connect Error</title> </head> <body> <div id="pagecontainer"> <h1>Could not connect to server</h1> <div class="row"> <p class="label">Overview:</p> <p class="item">Could not connect to hostname.</p> </div> <div class="row"> <p class="label">Details:</p> <p class="item">The remote side uses a protocol version that is not enabled</p> </div> <div id="options"> <p class="label">Options:</p> <form action=""><input type="button" class="button" onclick="history.back();" value=" Go Back "></form><p class="item">Pressing the button allows you to go to the previous page.</p> <p class="last-item">You can try to reload the page or check if the URL is correct.</p> </div> <div style="clear: both; overflow: hidden; height:1px;"></div> </div> </div> </body> </html>
What is the meaning of this result? What am I missing?
Hey Zeynep,
I was about to give an answer because I have a working example, but you have edited your post to remove the content.
Do you still need help or did you find the problem?
Hey Sam,
I realize that I didn't include my JIRA username and password. When I add them to POST, it solved problem. And I couldn't delete my post. But now, I realize that I can't add a comment while changing the issue status by api.
How can I resuscitate my post?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I've edited your post to put back the details of your original question.
I think the comment will only work if the transition you are doing has a screen where the user could actually add comments if using the JIRA GUI.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thank you for editing the question:)
I couldn't understand what you have said, is it not possible to add a comment while changing the status of an issue?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
In document I've seen; https://docs.atlassian.com/jira/REST/cloud/#api/2/issue-doTransition
It includes comment section in update object, I also follow it, but couldn't get a result. Why?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You can add a comment, but I think it depends on the details/set-up of the transition you are executing. If that transition allows a comment, you can add one.
I'll check my test set up and get back to you.
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.
This simplified version of your code works OK for me:
var request = require('request');
var url = "https://hostname/rest/api/2/issue/{issueIdOrKey}/transitions";
var message = {
"update": {
"comment": [{"add": {"body": "Test comment."}}]
},
"transition": {"id": "21"}
};
request({
url: url,
method: "POST",
json: true,
body: message,
auth: {user: "username", pass: "password"}
}, function (error, response, body) {
if (!error && response.statusCode === 204) {
console.log("OK");
} else if (error) {
console.log(error);
} else {
console.log(response.statusCode);
}
});I find that the test comment only works if the JIRA workflow is set up to show a screen during the transition I am excecuting.
In other words the API respects the settings that apply to the JIRA UI. If you can't add a comment during the transition via the UI, then you can't do it via REST either. I found some info in this old question to back that up.
You can check which transitions ids have a screen, and which fields are available, by making a GET request, with the 'expand' parameter, like this:
https://hostname/rest/api/2/issue/{issueIdOrKey}/transitions?expand=transitions.fields
Look for those where 'hasScreen' = true.
So in this example, I can add a comment when doing transition id 21, but cannot add a comment when doing transition id 11:
{
expand: "transitions",
transitions: [
{
id: "11",
name: "To Do",
to: {...},
hasScreen: false,
fields: {... }
},
{
id: "21",
name: "In Progress",
to: {...},
hasScreen: true,
fields: {...}
...etc...
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
p.s. I guess the example in the Atlassian REST documentation (https://docs.atlassian.com/jira/REST/cloud/#api/2/issue-doTransition) includes examples of stuff in the update and fields parameters to show how it can be done if your transition does have a screen where fields/comments can be set.
It does imply that not all fields can be set, since it mentions how those than can be set can be determined:
"The fields that can be set on transtion, in either the fields parameter or the update parameter can be determined using the /rest/api/2/issue/{issueIdOrKey}/transitions?expand=transitions.fields resource. "
But it could be clearer about the comments.
Where you can't add a comment in a particular transition, I suppose you can always do it a second call to /rest/api/2/issue/{issueIdOrKey}/comment.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
This is interesting.
https://hostname/rest/api/2/issue/{issueIdOrKey}/
transitions?expand=transitions.fieldsreturns me as;
{
"expand":"transitions",
"transitions":[
{
"id":"11",
"name":"To Do",
"to":{
"self":"https://hostname/rest/api/2/status/10000",
"description":"",
"iconUrl":"",
"name":"To Do",
"id":"10000",
"statusCategory":{
"self":"https://hostname/rest/api/2/statuscategory/2",
"id":2,
"key":"new",
"colorName":"blue-gray",
"name":"To Do"
}
},
"fields":{
}
},
{
"id":"21",
"name":"In Progress",
"to":{
"self":"https://hostname/rest/api/2/status/3",
"description":"This issue is being actively worked on at the moment by the assignee.",
"iconUrl":"https://hostname/images/icons/statuses/inprogress.png",
"name":"In Progress",
"id":"3",
"statusCategory":{
"self":"https://hostname/rest/api/2/statuscategory/4",
"id":4,
"key":"indeterminate",
"colorName":"yellow",
"name":"In Progress"
}
},
"fields":{
}
},
{
"id":"31",
"name":"In Review",
"to":{
"self":"https://hostname/rest/api/2/status/10100",
"description":"",
"iconUrl":"https://hostname/",
"name":"In Review",
"id":"10100",
"statusCategory":{
"self":"https://hostname/rest/api/2/statuscategory/4",
"id":4,
"key":"indeterminate",
"colorName":"yellow",
"name":"In Progress"
}
},
"fields":{
}
},
{
"id":"41",
"name":"Done",
"to":{
"self":"https://hostname/rest/api/2/status/10001",
"description":"",
"iconUrl":"https://hostname/",
"name":"Done",
"id":"10001",
"statusCategory":{
"self":"https://hostname/rest/api/2/statuscategory/3",
"id":3,
"key":"done",
"colorName":"green",
"name":"Done"
}
},
"fields":{
}
}
]
}
There is no field as "hasScreen"
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
It's probably a version difference. What version of JIRA do you have?
I assumed JIRA Cloud as you linked to the Cloud REST API docs, but maybe you have JIRA Server?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
That's JIRA Server, then. There are some subtle differences between the APIs.
Here are the relevant docs:
For JIRA Server, which doesn't include the 'hasScreen' field:
https://docs.atlassian.com/jira/REST/server/#api/2/issue-getTransitions
For JIRA Cloud, which does include the 'hasScreen' field:
https://docs.atlassian.com/jira/REST/cloud/#api/2/issue-getTransitions
Not sure why the difference. Confusing.
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.