As we know, JSON is not supported by AX 2012, and calling REST API is challenging. The alternate way is to use XML webRequest below is the code, which calls the API and gets the response as a string. The code also reads the response and displays it in the info log.
Here is the code to call REST API from AX 2012
static void Send_RestAPI(Args _args)
{
System.IO.Stream streamstr,responsestr;
System.IO.StreamWriter streamWriter;
System.Net.HttpWebRequest request;
System.Net.WebHeaderCollection headers;
System.Net.HttpWebResponse response;
System.IO.StreamReader reader;
str wsResponse;
str xml;
str xmlOut;
//
XmlDocument xmlDocument;
XmlNodeList xmlScriptList;
XmlNodeList xmlResponseList;
XmlElement nodeScript;
XmlElement nodeResponse;
XMLParseError xmlError;
// Define temporary variables
str _xmlMsg;
int i, j;
;
new InteropPermission(InteropKind::ClrInterop).assert();
try
{
// request url
request = System.Net.WebRequest::Create('https://api.xxxxxx.net/1.0/Tokenxxx') as System.Net.HttpWebRequest;
// http method
request.set_Method('Post');
// headers
request.set_ContentType("application/xml; charset=utf-8");
// request body
xml =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<RequestToken xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<grant_type>asaasass</grant_type>" +
"<username>asasadsdsdd</username>" +
"<password>******</password>" +
"</RequestToken>";
streamstr = request.GetRequestStream();
streamWriter = new System.IO.StreamWriter(streamstr);
streamWriter.Write(xml);
streamWriter.Flush();
streamWriter.Close();
streamWriter.Dispose();
// response
response = request.GetResponse();
reader = new System.IO.StreamReader(response.GetResponseStream());
wsResponse = reader.ReadToEnd();
// --------------------- READ FROM XML-----------------
xmlDocument = XmlDocument::newXml(wsResponse);
// Get the root element and its child nodes
nodeScript = xmlDocument.getNamedElement("Tokenxx");
xmlScriptList = nodeScript.childNodes();
for(i=0; i < xmlScriptList.length(); i++)
{
nodeResponse = xmlScriptList.item(i);
if (nodeResponse.nodeName() == 'rexxxToken')
{
info(strFmt("rToken: %1", nodeResponse.text()));
}
if (nodeResponse.nodeName() == 'axxxtoken')
{
info(strFmt("axxxtoken: %1", nodeResponse.text()));
}
if (nodeResponse.nodeName() == 'expiresIn')
{
info(strFmt("exxxIn: %1", nodeResponse.text()));
}
//xmlResponseList = nodeResponse.childNodes();
//if(nodeResponse.selectSingleNode('refreshToken'))
/* if (i == 0)
info(strFmt("refreshToken: %1", nodeResponse.text()));//innerText()));//text()));
if (i == 1)
info(strFmt("access_token: %1", nodeResponse.text()));
if (i == 2)
info(strFmt("expiresIn: %1", nodeResponse.text()));*/
}
// --------------------- READ FROM XML-----------------
//
reader.Close();
//info(wsResponse);
}
catch (Exception::CLRError)
{
throw error(AifUtil::getClrErrorMessage());
}
CodeAccessPermission::revertAssert();
}