Reputation: 187
I am currently doing it using the 2011 endpoint SOAP call, but I want to upgrade it to a newer version of Web Api. I am able to 'resolve' a case, but not able to 'cancel' it from JavaScript.
My current 2011 soap call code is :
// create the SetState request
var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
request += "<s:Body>";
request += "<Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
request += "<request i:type=\"b:SetStateRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
request += "<a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>EntityMoniker</c:key>";
request += "<c:value i:type=\"a:EntityReference\">";
request += "<a:Id>" + formContext.data.entity.getId() + "</a:Id>";
request += "<a:LogicalName>incident</a:LogicalName>";
request += "<a:Name i:nil=\"true\" />";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>State</c:key>";
request += "<c:value i:type=\"a:OptionSetValue\">";
request += "<a:Value>" + selectedStatus + "</a:Value>";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>Status</c:key>";
request += "<c:value i:type=\"a:OptionSetValue\">";
request += "<a:Value>" + selectedStatusReason + "</a:Value>";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "</a:Parameters>";
request += "<a:RequestId i:nil=\"true\" />";
request += "<a:RequestName>SetState</a:RequestName>";
request += "</request>";
request += "</Execute>";
request += "</s:Body>";
request += "</s:Envelope>";
//send set state request
$.ajax({
type: "POST",
async: false,
contentType: "text/xml; charset=utf-8",
datatype: "xml",
url: Xrm.Utility.getGlobalContext().getClientUrl() + "/XRMServices/2011/Organization.svc/web",
data: request,
beforeSend: function (xmlHttpRequest) {
xmlHttpRequest.setRequestHeader("Accept", "application/xml, text/xml, */*");
xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
},
success: function () {
Alert.hide();
formContext.ui.close();
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
Alert.hide();
Xrm.Navigation.openErrorDialog({ errorCode: "Error in Cancel Ticket request", details: errorThrown }).then(
function () {},
function (error) {
console.log(error);
});
console.log(errorThrown);
}
});
Upvotes: 1
Views: 1237
Reputation: 22846
You can use this snippet to cancel the incident
using web api.
var entity = {};
entity.statecode = 2; //Cancelled
entity.statuscode = 6; //Cancelled
Xrm.WebApi.online.updateRecord("incident", "1041db2d-196e-ea11-a811-000d3a5a1bf8", entity).then(
function success(result) {
//do something when request succeed
},
function(error) {
//do something when request failed
}
);
Upvotes: 4