Update jira issue status with nodejs Edited

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?

1 answer

0 vote

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?

Sam Hall Community Champion Apr 12, 2017

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.

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?

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?

Sam Hall Community Champion Apr 12, 2017

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.

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...

 

Sam Hall Community Champion Apr 12, 2017

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.

 

This is interesting.

https://hostname/rest/api/2/issue/{issueIdOrKey}/
transitions?expand=transitions.fields

returns 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"

Sam Hall Community Champion Apr 12, 2017

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?

Clicked About JIRA and it says; 

License Information for JIRA
JIRA v7.2.6

 

 

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.

Suggest an answer

Log in or Sign up to answer
How to earn badges on the Atlassian Community

How to earn badges on the Atlassian Community

Badges are a great way to show off community activity, whether you’re a newbie or a Champion.

Learn more
Community showcase
Published yesterday in Jira

5 ways you can make the most of Jira Software and Bitbucket Cloud

As part of the Bitbucket product team I'm always interested in better understanding what kind of impact the use of our tools have on the way you work. In a recent study we conducted of software devel...

35 views 0 4
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you