Update jira issue status with nodejs

zeuyanik April 12, 2017

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 votes
Sam Hall
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
April 12, 2017

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?

zeuyanik April 12, 2017

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
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
April 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.

zeuyanik April 12, 2017

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?

zeuyanik April 12, 2017

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
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
April 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.

zeuyanik April 12, 2017
Sam Hall
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
April 12, 2017

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
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
April 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.

 

zeuyanik April 12, 2017

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
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
April 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?

zeuyanik April 12, 2017

Clicked About JIRA and it says; 

License Information for JIRA
JIRA v7.2.6

 

 

Sam Hall
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
April 12, 2017

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