Thursday 31 December 2015

MS CRM 2016 Web API Operations - Basic Update



Basic Update:

In the last post I have created an Account using Web API call. Here we will update the created Account. Update operations use the HTTP PATCH verb. Pass a JSON object containing the properties you want to update to the URI that represents the entity. A response with a status of 204 will be returned if the update is successful.

Note: 

When updating an entity, only include the properties you are changing in the request body. Simply updating the properties of an entity that you previously retrieved, and including that JSON in your request, will update each property even though the value is the same. This can cause properties to appear to have been updated in auditing data when in fact they haven’t actually changed.


function UpdatAccount(AccountId,clientURL,AccountTobeUpdated)
{
 
var req = new XMLHttpRequest();
req.open('PATCH', clientURL + "/api/data/v8.0/accounts(" + AccountId + ")", true);
req.setRequestHeader("Content-type","application/json");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");

req.onreadystatechange = function () {
 if (this.readyState == 4 /* complete */) {
  req.onreadystatechange = null;
  if (this.status == 204) {   
   console.log("Updated account with ID: "+ AccountId)
  }
  else {
   var error = JSON.parse(this.response).error;
   console.log(error.message);
  }
 }
};
req.send(JSON.stringify(AccountTobeUpdated));
 

}

//This method will update an existing record.
function UpdateAccountUsingWebAPI() {

debugger;
var clientURL = Xrm.Page.context.getClientUrl();
var AccountId =  "B3A2B300-A8AF-E511-80DD-6C3BE5A878BC";

var AccountTobeUpdated ={};
AccountTobeUpdated["name"] ="My first Update On Account by API";
AccountTobeUpdated["accountnumber"] = "841843";
AccountTobeUpdated["fax"] ="9738310781";


UpdatAccount(AccountId,clientURL,AccountTobeUpdated)


}

MS CRM 2016 Web API Introduction


Introduction :

Microsoft CRM 2016 introduced a new Web API concept. This will make it easier to create applications across a wide variety of platforms, devices, and programming languages.
You can perform all operations using HTTP requests with the Web API located at 
[organization uri]/api/data/v8.0/. The Web API implements OData version 4.0, an open standard for data access.

We can perform following operations using web API

            ·        Create
·         Update
·         Delete
·         Retrieve
·         Retrieve multiple( using odata query and fetch)
·         Execute Web API functions
·         Execute Web API Actions
·         Execute Web API Query Functions

Let’s check where the web API is located. I am using online ms crm 2016


 It showed me some JSON object like below
 {
  "@odata.context":"https://bareillly.crm.dynamics.com/api/data/v8.0/$metadata","value":[
    {
      "name":"accountleadscollection","kind":"EntitySet","url":"accountleadscollection"
    },{
      "name":"accounts","kind":"EntitySet","url":"accounts"
    }




 Explanation :

  name : This is the name of the entity set.
  kind :  For the web API only Entity sets are listed.
  url :  It represents the part of the resource path to retrieve data for the entity.


How to use Web API:

We can use XMLHttpRequest object to perform all the above operation with Web API.


Example:   Create an Account using Web API:
function CreateRecord(clientURL,entityType,entityData)
{
var req = new XMLHttpRequest()

req.open("POST",encodeURI(clientURL + "/api/data/v8.0/" +entityType), true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
 if (this.readyState == 4 /* complete */) {
  req.onreadystatechange = null;
  if (this.status == 204) {
   var accountUri = this.getResponseHeader("OData-EntityId");
   console.log("Created account with URI: "+ accountUri)
  }
  else {
   var error = JSON.parse(this.response).error;
   console.log(error.message);
  }
 }
};
req.send(JSON.stringify(entityData));

}
// This function Creates an Account
function CreateAccountUsingWebAPI() {

debugger;
var entityType ="accounts"
var clientURL = Xrm.Page.context.getClientUrl();
var Account ={};
Account["name"] ="My first Account by API";
Account["accountnumber"] = "9211";
Account["fax"] ="0581-231383";

CreateRecord(clientURL,entityType,Account)


}