How to call a Web Service from Plugin in Dynamics CRM
In today’s world of more informed and aware customers, the most effective way of meeting the ever-increasing demands of the customers is to go for Microsoft Dynamics CRM Sales Process. The process not only gives you a crystal clear understanding of the customer needs but also gives you insights to engage more effectively with them to meet up their expectations.
CloudFront has recently built up a Sales Methodology App for Dynamics 365 Sales for our Partner, Technical Sales Development (TSD). The App bolsters a perceived Sales Methodology which can assist you with expanding income and win-rate by appropriately qualifying and overseeing bargains, creating serious and partner techniques, making a monetarily stable offer, and arranging activities to settle the negotiation.
Introduction:
In this blog, we will have a look on how a web service can be call from Plugin in Dynamics CRM.
Steps to be followed:
1) Create an entity “Product Configuration” which consists of 2 fields
- Key – Name of the Web Service
- Value – Web Service URL
The basic purpose of this entity is to store the Web Service URL so that we don’t hard code the values in the code.
Web Service URL-
![]()
Where WorkOrder -> Controller Name and CreateWorkOrder -> Function Name
2) Call the below function to call the Web Service. Retrieve Product Configuration function basically retrieves the record from CRM.
private void CallWebService(IPluginExecutionContext context, ITracingService tracer, IOrganizationService service)
{
string licenseResposeJSON = string.Empty;
////// Retrieve Product Configuration details: URL
tracer.Trace("Retrieve Product Configuration details: URL");
string value = string.Empty;
value = this.RetrieveProductConfiguration(service);
tracer.Trace("Downloading the target URI from Product Configuration: " + value);
if (value != string.Empty)
{
try
{
using (WebClientEx client = new WebClientEx())
{
tracer.Trace("Call Web Service");
client.Timeout = 60000;
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
licenseResposeJSON = client.UploadString(value.ToString(), "1");
}
tracer.Trace(licenseResposeJSON);
context.OutputParameters["WebServieCall"] = licenseResposeJSON;
tracer.Trace("Output Parameter is set: " + licenseResposeJSON);
}
catch (WebException exception)
{
string str = string.Empty;
if (exception.Response != null)
{
using (StreamReader reader =
new StreamReader(exception.Response.GetResponseStream()))
{
str = reader.ReadToEnd();
}
exception.Response.Close();
}
if (exception.Status == WebExceptionStatus.Timeout)
{
throw new InvalidPluginExecutionException(
"The timeout elapsed while attempting to issue the request.", exception);
}
throw new InvalidPluginExecutionException(string.Format(CultureInfo.InvariantCulture, "A Web exception occurred while attempting to issue the request. {0}: {1}", exception.Message, str), exception);
}
}
}
public class WebClientEx : WebClient
{
public int Timeout { get; set; }
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
request.Timeout = Timeout;
return request;
}
}
3) Web Service which calls Create WorkOrder function is given below:
[HttpPost]
public async Task CreateWorkOrder([FromBody]string value)
{
CRM_DataOperations operations = new CRM_DataOperations();
OperationResult result = await Task.Run(() => operations.CreateWorkOrder_Daily());
return Request.CreateResponse(HttpStatusCode.Created, "Message: " + Enum.GetName(result.GetType(), result));
}
Hope you find this helpful! Thank you.
Related posts:
How a Multi-Country Infrastructure Group Evaluated One vs Two Production Environments in Dynamics 36...

How an Australian Linen Company Made Quote Approvals Secure with One Time Links in Dynamics 365

Recovering Lost Approval History After a Purchase Order Deletion in Business Central

