Invoking Web Service/Rest API from D365 FOE
In this blog article, we will see how we can invoke web service call for a third-party application in Dynamics 365 for Finance and Operations, Enterprise Edition using X++.
In this blog we will Consider Service Order Entity as source passing Service Order values to a third party application on Service Order creation using web service endpoint url.
- Create a SMAServiceOrderTable Table post Insert event.
/// <summary> /// Post insert passing Service Order values and URL to invoke Web service /// </summary> /// <param name="sender"></param> /// <param name="e"></param> [DataEventHandler(tableStr(SMAServiceOrderTable), DataEventType::Inserted)] public static void SMAServiceOrderTable_onInserted(Common sender, DataEventArgs e) { SMAServiceOrderTable serviceOrderTable; serviceOrdertable = sender as SMAServiceOrderTable; String15 SOstatus = enum2Str(serviceOrderTable.Progress); //parmvalue stores Service Order values in container container parmvalue = ["'CustAccount':'"+serviceOrderTable.CustAccount+"'","'ServiceOrderId':'"+serviceOrderTable.ServiceOrderId+"'","'CurrencyCode':'US Dollar'","'SOStatus':'"+SOstatus+"'","'ProjId':'"+serviceOrderTable.ProjId+"'","'CFSCRMWorkOrderNo':'"+serviceOrderTable.CFSCRMWorkOrderNo+"'"]; new WebService().sendrecord("<<webservice url>>",parmvalue); }
- Create a class which calls the web service.
Class WebService { public void sendrecord(String255 endpointurl,container arryI) { str url; str postData; str returnValue; System.Net.HttpWebRequest request; System.Net.HttpWebResponse response; System.Byte[] byteArray; System.IO.Stream dataStream; System.IO.StreamReader streamReader; System.Net.ServicePoint servicePoint; System.Net.ServicePointManager servicePointManager; CLRObject clrObj; System.Text.Encoding utf8; Counter countCounter; ; //generate postdata in json format postData = "{"; for(countCounter= 1;countCounter<= conlen(arryI);countCounter++) { postData = postData+conpeek(arryI,countCounter)+","; info(strFmt("%1",postData)); } postData = postData+"}"; new InteropPermission(InteropKind::ClrInterop).assert(); url = endpointurl; clrObj = System.Net.WebRequest::Create(url); System.Net.ServicePointManager::set_Expect100Continue(false); request = clrObj; request.set_Method("POST"); utf8 = System.Text.Encoding::get_UTF8(); byteArray = utf8.GetBytes(postData); request.set_ContentType("application/json"); request.set_ContentLength(byteArray.get_Length()); dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.get_Length()); dataStream.Close(); } }
Let me know your reviews. I will soon come up with more articles, as I further explore D365 Operations.
Related posts:
How to review and accept changes to confirmed Purchase Orders in D365 F&O
How to run an SSRS report on a selected record in the CRM using FetchXml
Project Operations as source of truth for Professional Services Organizations
Streamlining Build Pipelines with YAML Template Extension: A Practical Guide