Invoking Web Service/Rest API from D365 FOE | CloudFronts

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.


Share Story :

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close