Opportunity Close Request
Using 2011 endpoint in CRM 2011 to CRM 2016 we can call request to close opportunity like given below
//--***********************************************************************************************// //-- Opportunity Close Request by Using 2011 End Point //--***********************************************************************************************// function formatDate(date) { var d = new Date(date), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear(); if (month.length < 2) month = '0' + month; if (day.length < 2) day = '0' + day; return [year, month, day].join('-'); } function getClientUrl() { if (typeof Xrm.Page.context == "object") { clientUrl = Xrm.Page.context.getClientUrl(); } var ServicePath = "/XRMServices/2011/Organization.svc/web"; console.log(clientUrl + ServicePath); return clientUrl + ServicePath; } function OpportunityCloseRequestBy2011() { var closeDate = new Date(); var description = 'Lorum ipsum'; var actualRevenue = '2000'; var oppId = Xrm.Page.data.entity.getId(); var requestMain2 = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"; requestMain2 += " <s:Body>"; requestMain2 += " <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"; requestMain2 += " <request i:type=\"b:WinOpportunityRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">"; requestMain2 += " <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">"; requestMain2 += " <a:KeyValuePairOfstringanyType>"; requestMain2 += " <c:key>OpportunityClose</c:key>"; requestMain2 += " <c:value i:type=\"a:Entity\">"; requestMain2 += " <a:Attributes>"; requestMain2 += " <a:KeyValuePairOfstringanyType>"; requestMain2 += " <c:key>opportunityid</c:key>"; requestMain2 += " <c:value i:type=\"a:EntityReference\">"; requestMain2 += " <a:Id>" + oppId + "</a:Id>"; requestMain2 += " <a:LogicalName>opportunity</a:LogicalName>"; requestMain2 += " <a:Name i:nil=\"true\" />"; requestMain2 += " </c:value>"; requestMain2 += " </a:KeyValuePairOfstringanyType>"; requestMain2 += " <a:KeyValuePairOfstringanyType>"; requestMain2 += " <c:key>subject</c:key>"; requestMain2 += " <c:value i:type=\"d:string\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">Won the Opportunity!</c:value>"; requestMain2 += " </a:KeyValuePairOfstringanyType>"; requestMain2 += " <a:KeyValuePairOfstringanyType>"; requestMain2 += " <c:key>actualend</c:key>"; requestMain2 += " <c:value i:type=\"d:dateTime\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">" + formatDate(closeDate) + "</c:value>"; requestMain2 += " </a:KeyValuePairOfstringanyType>"; requestMain2 += " <a:KeyValuePairOfstringanyType>"; requestMain2 += " <c:key>description</c:key>"; requestMain2 += " <c:value i:type=\"d:string\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">" + description + "</c:value>"; requestMain2 += " </a:KeyValuePairOfstringanyType>"; requestMain2 += " <a:KeyValuePairOfstringanyType>"; requestMain2 += " <c:key>actualrevenue</c:key>"; requestMain2 += " <c:value i:type=\"a:Money\">"; requestMain2 += " <a:Value>" + actualRevenue + "</a:Value>"; requestMain2 += " </c:value>"; requestMain2 += " </a:KeyValuePairOfstringanyType>"; requestMain2 += " </a:Attributes>"; requestMain2 += " <a:EntityState i:nil=\"true\" />"; requestMain2 += " <a:FormattedValues />"; requestMain2 += " <a:Id>00000000-0000-0000-0000-000000000000</a:Id>"; requestMain2 += " <a:LogicalName>opportunityclose</a:LogicalName>"; requestMain2 += " <a:RelatedEntities />"; requestMain2 += " </c:value>"; requestMain2 += " </a:KeyValuePairOfstringanyType>"; requestMain2 += " <a:KeyValuePairOfstringanyType>"; requestMain2 += " <c:key>Status</c:key>"; requestMain2 += " <c:value i:type=\"a:OptionSetValue\">"; requestMain2 += " <a:Value>3</a:Value>"; requestMain2 += " </c:value>"; requestMain2 += " </a:KeyValuePairOfstringanyType>"; requestMain2 += " </a:Parameters>"; requestMain2 += " <a:RequestId i:nil=\"true\" />"; requestMain2 += " <a:RequestName>WinOpportunity</a:RequestName>"; requestMain2 += " </request>"; requestMain2 += " </Execute>"; requestMain2 += " </s:Body>"; requestMain2 += "</s:Envelope>"; var req = new XMLHttpRequest(); req.open("POST", getClientUrl(), false); req.setRequestHeader("Accept", "application/xml, text/xml, */*"); req.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute"); req.send(requestMain2); }
From 2016 we can use latest web API approach like this
//--***********************************************************************************************// //-- Opportunity Close Request by Using Web API //--***********************************************************************************************// function OpportunityCloseRequestByWebAPI() { var closeDate = new Date(); var description = 'Lorum ipsum'; var actualRevenue = '2000'; var opportunityId = Xrm.Page.data.entity.getId(); var isSuccessful = false; opportunityId = opportunityId.replace(/\{|\}/gi, ''); var opportunityclose = { "opportunityid@odata.bind": "/opportunities(" + opportunityId + ")",//replace with id of opportunity "actualrevenue": actualRevenue, "actualend": formatDate(closeDate), "description": description }; var parameters = { "OpportunityClose": opportunityclose, "Status": -1 }; var context; if (typeof GetGlobalContext === "function") { context = GetGlobalContext(); } else { context = Xrm.Page.context; } var req = new XMLHttpRequest(); req.open("POST", context.getClientUrl() + "/api/data/v8.2/WinOpportunity", false); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.onreadystatechange = function () { if (this.readyState === 4) { req.onreadystatechange = null; if (this.status === 204 || this.status === 200) { //Success - No Return Data - Do Something isSuccessful = true; return isSuccessful; } else { var errorText = this.responseText; //Error and errorText variable contains an error - do something with it } } }; req.send(JSON.stringify(parameters)); return isSuccessful; }