Project

General

Profile

How To Update Issue via REST?

Added by Anonymous almost 14 years ago

HI guys,

I'm currently developing on an Integration of Redmine to our Release-System. Can anyone tell me how I can update the status of an issue with JavaScript and REST? I tried it with jQuery, but always getting a 405 Method not allowed error. I know Rails is using the paramater _method to identify which method actually to use. But how can I integrate this parameter in the xml document I will sent to the server?

Thanks a lot!

Regards,
Martin


Replies (4)

RE: How To Update Issue via REST? - Added by Felix Schäfer almost 14 years ago

I think _method identifies the HTTP Verb used for the request.

RE: How To Update Issue via REST? - Added by Anonymous almost 14 years ago

Hi,

yes I already know, but how can I put this variable in the request? My jQuery-call looks like this:

$.ajax({
  url: repositoryURL + "/issues/" + issueID + ".xml",
  async: false,
  type: 'POST',
  contentType: "text/xml",
  username: redmineUser,
  password: redminePass,
  data: issueXml,
  success: function(msg) {
    alert(msg);
  },
  error: function(request, msg, error) {
    alert(error);
  }
});

I put the data containing the updated fields as XML in data. So, where should I place _method now?

Thanks a lot!

Regards,
Martin

RE: How To Update Issue via REST? - Added by Anonymous almost 14 years ago

I found the solution. I wanted to update the status, so my data looked like this:

"<issue><id>123</id><status id="3" /></issue>"

But this is not correct! To update the status Redmine expects a field "status_id" containing the new status. So my new XML looks like this:

"<issue><id>123</id><status_id>3</status_id></issue>".

You're right that "_method" identifies the HTTP verb used, but when I try to POST the data including the parameter "_method" I always get the 405 HTTP error. So I tried to change "type: 'POST'" to "type: 'PUT'" in my jQuery ajax call and now it works!

My final ajax call looks like this:

    jQuery.ajax({
        type: "PUT",
        url: redmineURL,
        username: redmineUser,
        password: redminePass,
        async: false,
        contentType: "text/xml",
        data: "xml",
        data: '<?xml version="1.0" encoding="UTF-8"?><issue><id>' + ticketId + '</id><status_id> + newStatus + '</status_id></issue>',
        success: function(msg) {
            alert("success");
        },
        error: function(xhr, msg, error) {
        alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status);
        alert("responseText: "+xhr.responseText);
        }
    });

The funny thing is, jQuery gets an error, but the error says that the request was complete and the given HTTP Status is 200 ;) I don't know why jQuery gets an error and does not call the success function although it gets an 200 HTTP return code and an xhr status of 4 (complete).

Regards,
Martin

RE: How To Update Issue via REST? ADD X-Redmine-API-Key - Added by Gökhan Karaca about 12 years ago

Update your function.
"beforeSend" method is implemented to jQuery > 1.5

Add code to you ajax call:


    ticketData = '<?xml version="1.0" encoding="UTF-8"?>';
    ticketData += '<issue>';
    ticketData += '<id>' + ticketId + '</id>';
    ticketData += '<status_id>' + Settings.redmineStatus + '</status_id>';
    ticketData += '</issue>';
    jQuery.ajax({
        type: "PUT",
        url: redmineURL,
        crossDomain: true,
        username: redmineUser,
        password: redminePass,
        async: false,
        contentType: "application/xml",
        data: ticketData,
        beforeSend: function(xhr) {
            xhr.setRequestHeader('X-Redmine-API-Key', 'ADD_YOUR_API_KEY_HERE');
        },
        success: function(msg) {},
        error: function(xhr, msg, error) {}
     });

Do not forget the right workflow!!!

https://YOUR_URL/workflows/edit

    (1-4/4)