- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-23-2023 12:32 PM
Hello, I am having issues with a Scripted REST API retrieving external data via REST Message, which has the endpoint, basic auth, and default GET set up. Testing the REST message, it retrieves the XML data I expect. I also set the HTTP Log Level to “All” and everything looks good in the Outbound HTTP Logs.
Coming back to the scripted REST API, when I use the Explore REST API to test my code, I get a 200 response, but no data. I entered in some logging to try to debug the issue, and in my logs the REST Message Endpoint is correct, however by HTTP method is “undefined”. I am attempting to populate a table with the data. Any thoughts? Thank you!
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
try {
gs.log('Starting script execution...');
var restMessage = new sn_ws.RESTMessageV2('Workday HR', 'Default GET');
gs.log('REST Message Endpoint: ' + restMessage.getEndpoint());
var restResponse = restMessage.execute();
gs.log('REST Message HTTP Method: ' + restMessage.getHttpMethod());
gs.log('REST Message Headers: ' + JSON.stringify(restMessage.getHeaders()));
if (restResponse.getStatusCode() !== 200) {
gs.error('Error ' + restResponse.getStatusCode() + ': ' + restResponse.getErrorMessage());
}
var responseBody = restResponse.getBody();
gs.log('responseBody = ', responseBody);
var xmlDoc = new GlideXMLDocument(responseBody);
var reportEntries = xmlDoc.getNodeList('//wd:Report_Entry');
for (var i = 0; i < reportEntries.getLength(); i++) {
var positionName = reportEntries.item(i).getChildText('wd:Position_Name');
var positionID = reportEntries.item(i).getChildText('wd:Position_ID');
var gr = new GlideRecord('u_workday_hr_inbound');
gr.u_position_name = positionName;
gr.u_position_id = positionID;
gs.log("positionName = ", positionName);
gs.log("positionID = ", positionID);
gr.insert();
}
gs.log('Script execution completed.');
} catch (e) {
gs.error('Error occurred: ' + e);
}
restResponse.setStatus(200);
restResponse.setBody('Data inserted successfully.');
})(request, response);
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-24-2023 01:39 PM
Hello, for anyone interested, I was able to get it working. My issues were:
1) var xmlDoc = new GlideXMLDocument(responseBody); should be var xmlDoc = new XMLDocument2();
2) I needed to parse the document via xmlDoc.parseXML(responseBody);
3) getChildText should be getTextContent
Fully re-worked code below. Still needs some refining, but it did the job and populated by table with the data.
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
try {
gs.log('Starting script execution...');
var restMessage = new sn_ws.RESTMessageV2('Workday HR', 'Default GET');
var restResponse = restMessage.execute();
if (restResponse.getStatusCode() !== 200) {
gs.error('Error ' + restResponse.getStatusCode() + ': ' + restResponse.getErrorMessage());
}
var responseBody = restResponse.getBody();
var xmlDoc = new XMLDocument2();
xmlDoc.parseXML(responseBody);
var reportList = xmlDoc.getFirstNode("//wd:Report_Data");
var reportEntries = reportList.getChildNodeIterator();
while (reportEntries.hasNext()) {
//for (var i = 0; i < reportEntries.getLength(); i++) {
var reportEntry = reportEntries.next();
var positionNode = reportEntry.getFirstChild('wd:Positions');
var positionNameNode = positionNode.getFirstChild('wd:Position_Name');
var positionIDNode = positionNode.getLastChild('wd:Position_ID');
var positionName = positionNameNode.getTextContent();
var positionID = positionIDNode.getTextContent();
var gr = new GlideRecord('u_workday_hr_inbound');
gr.u_position_name = positionName;
gr.u_position_id = positionID;
gr.insert();
}
gs.log('Script execution completed.');
} catch (e) {
gs.error('Error occurred: ' + e);
}
restResponse.setStatus(200);
restResponse.setBody('Data inserted successfully.');
})(request, response);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-24-2023 01:44 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-24-2023 01:39 PM
Hello, for anyone interested, I was able to get it working. My issues were:
1) var xmlDoc = new GlideXMLDocument(responseBody); should be var xmlDoc = new XMLDocument2();
2) I needed to parse the document via xmlDoc.parseXML(responseBody);
3) getChildText should be getTextContent
Fully re-worked code below. Still needs some refining, but it did the job and populated by table with the data.
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
try {
gs.log('Starting script execution...');
var restMessage = new sn_ws.RESTMessageV2('Workday HR', 'Default GET');
var restResponse = restMessage.execute();
if (restResponse.getStatusCode() !== 200) {
gs.error('Error ' + restResponse.getStatusCode() + ': ' + restResponse.getErrorMessage());
}
var responseBody = restResponse.getBody();
var xmlDoc = new XMLDocument2();
xmlDoc.parseXML(responseBody);
var reportList = xmlDoc.getFirstNode("//wd:Report_Data");
var reportEntries = reportList.getChildNodeIterator();
while (reportEntries.hasNext()) {
//for (var i = 0; i < reportEntries.getLength(); i++) {
var reportEntry = reportEntries.next();
var positionNode = reportEntry.getFirstChild('wd:Positions');
var positionNameNode = positionNode.getFirstChild('wd:Position_Name');
var positionIDNode = positionNode.getLastChild('wd:Position_ID');
var positionName = positionNameNode.getTextContent();
var positionID = positionIDNode.getTextContent();
var gr = new GlideRecord('u_workday_hr_inbound');
gr.u_position_name = positionName;
gr.u_position_id = positionID;
gr.insert();
}
gs.log('Script execution completed.');
} catch (e) {
gs.error('Error occurred: ' + e);
}
restResponse.setStatus(200);
restResponse.setBody('Data inserted successfully.');
})(request, response);