Jazz Forum Welcome to the Jazz Community Forum Connect and collaborate with IBM Engineering experts and users

Change WorkItem State via REST

Hi,

I'm using RTC 2.0.0.2 Standard Edition and I'm trying to change the state of a WorkItem via REST.

REST URL:

https://lap-ibm-853.psad.de:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/28

JSON:

{"dc:identifier":28,
"rtc_cm:state":{
"rdf:resource":
"https:\/\/LAP-IBM-853.PSAD.de:9443\
/jazz\/oslc\/workflows\/_Wp0-gCeREd-nSqqeCWspMA\
/states\/bugzillaWorkflow\/5"
},
...


I'm using a org.apache.http.client.methods.HttpPut against the URL with the JSON as org.apache.http.entity.StringEntity.

The response is a 400: Bad Request.

All I want to do is change the state from
resolved

https://LAP-IBM-853.PSAD.de:9443/jazz/oslc/workflows/
_Wp0-gCeREd-nSqqeCWspMA/states/bugzillaWorkflow/3

to closed

https://LAP-IBM-853.PSAD.de:9443/jazz/oslc/workflows/
_Wp0-gCeREd-nSqqeCWspMA/states/bugzillaWorkflow/5

1

0 votes


Accepted answer

Permanent link
The general solution is as follows:
 
Accept: application/xml   (NOT rdf+xml)
Do NOT set OSLC-Core-Version to 2.0

Call /ccm/oslc/workflows/$projectAreaId/actions/$workflowTypeName
e.g. /ccm/oslc/workflows/_acueADcNEeGeMZwN8UaGqw/actions/com.ibm.team.workitem.taskWorkflow

This will give you an oslc_cm:Collection of all Action items for that workflow typename, e.g.
<rtc_cm:Action rdf:resource="https://rtc.jpmchase.net:9443/ccm/oslc/workflows/_acueADcNEeGeMZwN8UaGqw/actions/com.ibm.team.workitem.taskWorkflow/com.ibm.team.workitem.taskWorkflow.action.a1">
<dc:identifier>com.ibm.team.workitem.taskWorkflow.action.a1</dc:identifier>
<rtc_cm:resultState rdf:resource="https://rtc.jpmchase.net:9443/ccm/oslc/workflows/_acueADcNEeGeMZwN8UaGqw/states/com.ibm.team.workitem.taskWorkflow/2"/>
<dc:title>Reopen</dc:title>
<rtc_cm:iconUrl>https://rtc.jpmchase.net:9443/ccm/service/com.ibm.team.workitem.common.internal.model.IImageContentService/processattachment/_acueADcNEeGeMZwN8UaGqw/workflow/reopen.gif</rtc_cm:iconUrl>
</rtc_cm:Action>

Each Action item has an rdf:resource, e.g.:
https://rtc.jpmchase.net:9443/ccm/oslc/workflows/_acueADcNEeGeMZwN8UaGqw/actions/com.ibm.team.workitem.taskWorkflow/com.ibm.team.workitem.taskWorkflow.action.a1

The "tail" of that resource becomes the argument to the ?_action call, e.g.
    $url .= '?_action=com.ibm.team.workitem.taskWorkflow.action.a1'

Because each Action item also has a dc:title  (Reopen in the example above), you can create a user-friendly mapping.

Note that once you call _action with an action that puts the item in a terminal state (like Invalid), you cannot go back to New.   No surprise here, and it's same behavior as in the GUI.

Other combinations of setting OSLC-Core-Version to 2.0 and setting Accept to application/rdf+xml do not work in that you cannot get to the dc:title to get the friendly name.   If you do NOT need the friendly name, feel free to set
OSLC-Core-Version to 2.0 and use rdf.




Ralph Schoon selected this answer as the correct answer

1 vote

Comments

Each Action item ALSO has the "tail" explicitly set in the dc:identifier tag, e.g.
<dc:identifier>com.ibm.team.workitem.taskWorkflow.action.a1</dc:identifier>
That's probably a better way to get at it....


19 other answers

Permanent link
You can do a regular PUT of the resource as you would for changing any
attribute, but include the workflow action as a URL parameter:

....com.ibm.team.workitem.WorkItem/247?_action=com.ibm.team.workitem.defectWorkflow.action.startWorking

Here's an example curl script which changes the work item's state:

COOKIES=./cookies.txt

URL=https://localhost:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/247?_action=com.ibm.team.workitem.defectWorkflow.action.startWorking

curl -D - -k -b $COOKIES -H &quot;If-Match: $1&quot; -H &quot;Content-Type:
application/x-oslc-cm-change-request+xml&quot; -H &quot;Accept:
application/x-oslc-cm-change-request+xml&quot; -X PUT --data-binary @247.xml $URL


--
Regards,
Patrick
Jazz Work Item Team

2 votes

Comments

How do I determine the list of available '_actions' I could set? That is the set of values similar to: 'com.ibm.team.workitem.defectWorkflow.action.startWorking'

Where is this discoverable for a project? The objects pointed at by existing states looking like 'https://...:9443/ccm/oslc/workflows/.../states/bugzillaWorkflow/' only get me named gifs. How do I get the list of java-like names?

Looking at many questions asked about changing workitem state (and lack of answers!) this topic should be included in: https://jazz.net/wiki/bin/view/Main/WorkItemAPIsForOSLCCM20

I'm having the same "fun" as Tony. I want to advance a workitem status through the REST api. Following your suggestion works for advancing a "Defect" work item from "New" to "In Progress". I can't do anything else.

Sadly this doesnt help a lot. Since I do not know the "NEXT possible state".
Is there a way to get to the proper/whole workflow logic?

See Buzz Moschetti's answer. Otherwise open a new post titled "how to find out the valid action for a certain state".


Permanent link
I found this wiki side https://jazz.net/wiki/bin/view/Main/ResourceOrientedWorkItemAPIv2#Attributes. It seems that the state is not modifiable via REST call.

0 votes


Permanent link
On 11/03/10 10:54, Patrick Streule wrote:
You can do a regular PUT of the resource as you would for changing any
attribute, but include the workflow action as a URL parameter:

...com.ibm.team.workitem.WorkItem/247?_action=com.ibm.team.workitem.defectWorkflow.action.startWorking


Patrick, I've been doing similar calls via curl in our build scripts to
automatically resolve defects once they appear in a clean build.

Currently there doesn't appear to be a REST-like way to automatically
add Verification reviews in a similar way.

I had previously noticed work item 40864 http://goo.gl/nzPz which
extended WorkItemClient.js to allow approvals to be created.

Is there currently any way to achieve this via curl ?

Cheers,
Dom

0 votes


Permanent link
Hi Patrick,

Thanks for the above tip. I had a go as I am also looking to change a work item state over HTTP. I pasted the below into my browser for work item with id 220. I just wanted to move the item from a NEW state to the In PROGRESS state.

https://dptlfccm01:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/220?_action=com.ibm.team.workitem.bugzillaWorkflow.action.startWorking

However, it didn't work. The work item loaded and displayed all the field, but the state had not changed and remained in the NEW state.

What am I doing wrong?

Thanks,
Darren

You can do a regular PUT of the resource as you would for changing any
attribute, but include the workflow action as a URL parameter:

....com.ibm.team.workitem.WorkItem/247?_action=com.ibm.team.workitem.defectWorkflow.action.startWorking

Here's an example curl script which changes the work item's state:

COOKIES=./cookies.txt

URL=https://localhost:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/247?_action=com.ibm.team.workitem.defectWorkflow.action.startWorking

curl -D - -k -b $COOKIES -H &quot;If-Match: $1&quot; -H &quot;Content-Type:
application/x-oslc-cm-change-request+xml&quot; -H &quot;Accept:
application/x-oslc-cm-change-request+xml&quot; -X PUT --data-binary @247.xml $URL


--
Regards,
Patrick
Jazz Work Item Team

0 votes


Permanent link
Thanks for the above tip. I had a go as I am also looking to change a
work item state over HTTP. I pasted the below into my browser for
work item with id 220. I just wanted to move the item from a NEW
state to the In PROGRESS state.

https://dptlfccm01:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/220?_action=com.ibm.team.workitem.bugzillaWorkflow.action.startWorking

However, it didn't work. The work item loaded and displayed all the
field, but the state had not changed and remained in the NEW state.

What am I doing wrong?

When you paste this URL into the browser, it will send a GET request to
the server. A GET must not change a resource, however. You need a PUT or
PATCH request to modify the work item, including its state.

You can try that e.g. using
https://addons.mozilla.org/en-US/firefox/addon/2691


--
Regards,
Patrick
Jazz Work Item Team

0 votes


Permanent link
Hi Patrick,

Thanks for answering my (newbie) question earlier. I've played around a bit more to get an understanding of how it works but still can't seem to get the state to change. Can I ask for your help once again? Here's what I did:

I first got the JSON representation of the work item by running a Windows script:

=====================================================================================
set COOKIES=cookies.txt

set USER=administrator
set PASSWORD=administrator
set HOST=&quot;https://dptlfccm01:9443/jazz&quot;

curl -k -c %COOKIES% &quot;%HOST%/authenticated/identity&quot;

curl -k -L -b %COOKIES% -c %COOKIES% -d j_username=%USER% -d j_password=%PASSWORD% &quot;%HOST%/authenticated/j_security_check&quot;

curl -D - -k -b %COOKIES% -o 220.json -H &quot;Accept: application/x-oslc-cm-changerequest+json&quot; &quot;%HOST%/oslc/workitems/220.json&quot;

=====================================================================================

The ETag returned was _b9dv4DDoEd-YpvOcpbHK1w.

This successfully creates 220.json. The data inside specifies that the state is in state 3 (resolved):

=====================================================================================
&quot;rtc_cm:state&quot;:{&quot;rdf:resource&quot;:&quot;https:\/\/dptlfccm01:9443\/jazz\/oslc\/workflows\/_s1JUcC0TEd-bnbOLrZ2Idw\/states\/bugzillaWorkflow\/3&quot;}
=====================================================================================

I wanted to progress this state to state 5 (closed). So I changed the line in the JSON file to the below and saved it(all other data was left unchanged):

=====================================================================================
&quot;rtc_cm:state&quot;:{&quot;rdf:resource&quot;:&quot;https:\/\/dptlfccm01:9443\/jazz\/oslc\/workflows\/_s1JUcC0TEd-bnbOLrZ2Idw\/states\/bugzillaWorkflow\/5&quot;}
=====================================================================================

Then, I ran a second script with the following URL and Curl command to put the file back into RTC:

=====================================================================================
set COOKIES=cookies.txt

set URL=&quot;https://dptlfccm01:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/220?_action=com.ibm.team.workitem.bugzillaWorkflow.action.close&quot;

curl -D - -k -b %COOKIES% -H &quot;If-Match: _b9dv4DDoEd-YpvOcpbHK1w&quot; -H &quot;Content-Type: application/x-oslc-cm-change-request+json&quot; -H &quot;Accept: application/x-oslc-cm-change-request+json&quot; -X PUT --data-binary @220.json %URL%

=====================================================================================

The script executes successfully with no errors reported in the terminal window but a new ETag is supplied and when I re-run the first script to see the changes, the state is still in state 3. Really strange!

I apologise for the rather long question, but I've been totally stuck for a while now. Your help would be much appreciated! :-)

Many Thanks,
Darren

0 votes


Permanent link
Ah, I forgot to add, if I change the data of another property e.g. dc:title, the property is updated perfectly. It just doesn't work for rtc_cm:state

0 votes


Permanent link
Hi,

I just found the solution to the problem. In the action parameter at the end of the URL, the action should not have contained com.ibm.team.workitem and should just have been bugzillaWorkflow.action.close. This allowed the state to be changed from resolved to closed.

The final URL is:

https://dptlfccm01:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/220?_action=bugzillaWorkflow.action.close

0 votes


Permanent link
I just found the solution to the problem. In the action parameter at
the end of the URL, the action should not have contained
com.ibm.team.workitem and should just
have been bugzillaWorkflow.action.close.
This allowed the state to be changed from resolved to closed.

The final URL is:

https://dptlfccm01:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/220?_action=bugzillaWorkflow.action.close

Good to hear that you got it to work. Please note that the action IDs
are specific to a workflow, so the action ID for resolving a work item
can vary with the work item type. This may not be an issue in your case,
but should be considered in a general-purpose solution.

--
Regards,
Patrick
Jazz Work Item Team

0 votes

1–15 items
page 1of 1 pagesof 2 pages

Your answer

Register or log in to post your answer.

Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.

Search context
Follow this question

By Email: 

Once you sign in you will be able to subscribe for any updates here.

By RSS:

Answers
Answers and Comments
Question details
× 10,937

Question asked: Mar 10 '10, 6:01 a.m.

Question was seen: 25,120 times

Last updated: Aug 14 '16, 8:06 p.m.

Confirmation Cancel Confirm