Introduction:
Microsoft Dynamics 365 July Update, formally known as V9.0 has come up with lots of new and exciting features. No doubt these features have been applauded by end users and developers.
One of the important enhancement that will be boon for developer is Xrm.WebApi. Earlier to v9.0, to perform CRUD operation in Dynamics CRM we need to create our own library or used other third party libraries or used XmlHttpRequest and ajax request. So Xrm.WebApi is a cool enhancement added in Dynamics 365 v9.0 which will help to make developers life simple.
In this blog, we will discuss about how we can perform CRUD operations and work with all data types using newly added WebApi in Xrm namespace.
Using Xrm.WebApi:
Below is the example where we can used Xrm.WebApi.
1. Create:
To create the record, first we need to create the object of entity and then set the required fields and its value and then call Xrm.WebApi.createRecord function to create record in CRM. The parameters of this function are shown below;
1. Entity logical name
2. Entity object
/// This function is used to create a contact record
function createContact() {
var contactObj = null;
try {
// create the contact object
contactObj = new Object();
contactObj.firstname = "Mike";
contactObj.lastname = "Morgan";
contactObj.creditonhold = false;
//set optionsetvalue
contactObj.accountrolecode = 2;
//set the lookup value
contactObj["parentcustomerid_account@odata.bind"] = "/accounts(A8A19CDD-88DF-E311-B8E5-6C3BE5A8B200)"
Xrm.WebApi.createRecord("contact", contactObj).then(function (result) {
//get the guid of created record
var recordId = result.id;
//below code is used to open the created record
var windowOptions = {
openInNewWindow: true
};
//check if XRM.Utility is not null
if (Xrm.Utility != null) {
//open the entity record
Xrm.Utility.openEntityForm("contact", recordId, null, windowOptions);
}
},
function (error) {
Xrm.Utility.alertDialog(error.message);
});
} catch (e) {
Xrm.Utility.alertDialog(e.message);
}
}
2. Update:
To update the record, first we need to create the object of the entity and then set the fields and its value that we need to update and then call Xrm.WebApi.updateRecord function to create the record in CRM. The parameters of this function are as shown below;
1. Entity logical name
2. Entity guid
3. Entity object
//this function is used to update contact
function updateContact() {
var ownerId = null;
var contactObj = null;
try {
// create the contact object
contactObj = new Object();
//set the properties
contactObj.creditonhold = true;
//set optionsetvalue
contactObj.accountrolecode = 3;
//set the lookup value
ownerId = "1809D364-F311-4B0A-98D2-198B721B2061";
contactObj["ownerid@odata.bind"] = "/systemusers(" + ownerId + ")"
// pass entity logical name , entity guid, entity object
Xrm.WebApi.updateRecord("contact", "49A0E5B9-88DF-E311-B8E5-6C3BE5A8B200", contactObj).then(function (result) {
Xrm.Utility.alertDialog("Record updated successfully.");
},
function (error) {
Xrm.Utility.alertDialog(error.message);
});
} catch (e) {
Xrm.Utility.alertDialog(e.message);
}
}
3. Delete:
To delete record from CRM use Xrm.WebApi.deleteRecord.
The parameters of this function are shown below;
1. Entity logical name
2. Entity guid
/// This function is used to retrieve the Delete record
function deleteRecord() {
try {
Xrm.WebApi.deleteRecord("contact", "8DA6E5B9-88DF-E311-B8E5-6C3BE5A8B200")
.then(function (result) {
Xrm.Utility.alertDialog("Record deleted successfully.");
},
function (error) {
Xrm.Utility.alertDialog(e.message);
});
} catch (e) {
Xrm.Utility.alertDialog(e.message);
}
}
4. Retrieve Record:
In order to retrieve record we can use Xrm.WebApi.retrieveRecord. The parameters of this function are as shown below;
1. Entity logical name
2. Entity guid
3. In last parameter pass following [select cause, filter cause etc.]
Note: If you want to get the value of lookup field you have use _ as prefix and _value as suffix. For example for parentcustomerid use _parentcustomerid_value
/// This function is used to retrieve the contact record
function retrieveContact() {
try {
Xrm.WebApi.retrieveRecord("contact", "465B158C-541C-E511-80D3-3863BB347BA8", "$select=fullname,telephone1,preferredcontactmethodcode,createdon,_parentcustomerid_value,creditlimit")
.then(function (data) {
retrieveContactSuccess(data);
},
function (error) {
Xrm.Utility.alertDialog(error.message);
});
} catch (e) {
Xrm.Utility.alertDialog (e.message);
}
}
///retrieve success
function retrieveContactSuccess(data) {
try {
//get the values
//string
var fullname = data["fullname"];
//optionset
var typeCode = data["customertypecode"];
//lookup
var customerGuid = data["_parentcustomerid_value"];
var customerName = data["_parentcustomerid_value@OData.Community.Display.V1.FormattedValue"];
var customerEntityLogicalName = data["_parentcustomerid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
//money
var creditLimit = data["creditlimit@OData.Community.Display.V1.FormattedValue"];
//date
var createdonFormattedValue = data["createdon@OData.Community.Display.V1.FormattedValue"]; // gives date in following format 2017-09-30T21:10:19Z
var createdon = data["createdon"]; // gives date in following format 10/1/2017 2:40 AM
//optionset
var preferredConMethod = data["preferredcontactmethodcode@OData.Community.Display.V1.FormattedValue"];
} catch (e) {
Xrm.Utility.alertDialog(e.message);
}
}
1. Retrieve Multiple:
Retrieve multiple is used to retrieve more than one record from MS CRM. Suppose we want to retrieve all active contact from CRM then we will use the Retrieve multiple.
If we want to retrieve multiple records then use Xrm.WebApi.retrieveMultipleRecords
The parameters of this function are shown below.
- Entity logical name
- Odata Query (i.e. select and filter)
//this function is used to retrieve Account function retrieveMultipleAccounts() { var queryOption = ""; try { //create the query queryOption = "?$select=fullname,telephone1,preferredcontactmethodcode,createdon,_parentcustomerid_value,creditlimit&$filter=(statecode eq 0)"; //execute the query and get the results Xrm.WebApi.retrieveMultipleRecords("contact", queryOption) .then(function (data) { retrieveContactSuccess(data.entities); }, function (error) { Xrm.Utility.alertDialog(error.message); }; } catch (e) { Xrm.Utility.alertDialog(e.message); } }
In retrieveContactSucess function loop through the records and get the values as shown below.
///retrieve success function retrieveContactSuccess(results) { try { //get the values $.each(results, function (index, data) { //string var fullname = data["fullname"]; //lookup var customerGuid = data["_parentcustomerid_value"]; var customerName = data["_parentcustomerid_value@OData.Community.Display.V1.FormattedValue"]; var customerEntityLogicalName = data["_parentcustomerid_value@Microsoft.Dynamics.CRM.lookuplogicalname"]; //money var creditLimit = data["creditlimit@OData.Community.Display.V1.FormattedValue"]; //date var createdonFormattedValue = data["createdon@OData.Community.Display.V1.FormattedValue"]; // gives date in following format 2017-09-30T21:10:19Z var createdon = data["createdon"]; // gives date in following format 10/1/2017 2:40 AM //optionset var preferredConMethod = data["preferredcontactmethodcode@OData.Community.Display.V1.FormattedValue"]; }); } catch (e) { Xrm.Utility.alertDialog(e.message); } }
If you have more than 5000 records than used data.nextLink. And if the response has value data.nextLink then used it to retrieve next set of records.
2. Execute Action:
There are predefined Actions defined in Dynamics CRM 2016 that can be executed using Web API. On the following link will find the list of Web API actions. https://msdn.microsoft.com/en-in/library/mt607829.aspx
There are three types of Action as listed below.
Unbound actions: It is not bound to any specific entity. i.e the first parameter to such actions does not include the entity. E.g. WinOpportunity, CancelContract etc
Bound actions: It is bound to a specific entity. i.e the first parameter to such actions does not include the entity. e.g. – AddToQueue Action
Custom action: It is custom actions developed by developers using Processes.
Now we will discuss about Qualify request. Suppose you want to qualify request programmatically then we will use Qualify request. Web API provides QualifyLead Action.
In our blog, we have explained QualifyLead using WebApi. Now we will see how we can do the same using inbuilt Xrm.WebApi.
To execute action use Xrm.WebApi.execute.
//This function is used to qualify lead function qualifyLead() { var saleOrderID = null; var columnsSet = null; var salesOrderToInvoiceReq = null; var leadId = "E5975EA3-531C-E511-80D8-3863BB3CE2C8"; var qualifyLeadReq = ""; try { qualifyLeadReq = { entity: { id: leadId, entityType: "lead" }, CreateAccount: true, CreateContact: true, CreateOpportunity: true, Status: 3, getMetadata: function () { var metadata = { boundParameter: "entity", parameterTypes: { "entity": { "typeName": "Microsoft.Dynamics.CRM.lead", "structuralProperty": 5 }, "CreateAccount": { "typeName": "Edm.Int32", "structuralProperty": 1 }, "CreateContact": { "typeName": "Edm.Int32", "structuralProperty": 1 }, "CreateOpportunity": { "typeName": "Edm.Int32", "structuralProperty": 1 }, "Status": { "typeName": "Edm.Int32", "structuralProperty": 1 } }, operationName: "QualifyLead", operationType: 0 }; return metadata; } }; Xrm.WebApi.execute(qualifyLeadReq) .then(function (result) { Xrm.Utility.alertDialog("Success"); }, function (error) { var message = error.message; //Add handling of error that occurred }); } catch (e) { Xrm.Utility.alertDialog(e.message); } }
No comments:
Post a Comment