Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

Attach an Excel to a record

SwarnadeepNandy
Mega Sage

I have an URL, which gives me an Excel (assume a downloadable link). I want that excel to get attached to a record in ServiceNow. We can get the such kind of link from ServiceNow's Excel web services as well. How can we achieve that. I tried something like below.

var request = new sn_ws.RESTMessageV2();
var instanceUrl = 'https://<tesinstance>.service-now.com/';
request.setEndpoint(instanceUrl + 'incident_list.do?CSV');
request.setHttpMethod('GET');

//Eg. UserName="admin", Password="admin" for this code sample.
var user = 'userName';
var password = 'password';

request.setBasicAuth(user, password);
request.setRequestHeader("Accept", "application/json");//Tried changing the Accept encoding also

var response = request.execute();
var binaryFile = response.getBody();//Receiving excel file, binary data.

var attachment = new GlideSysAttachment();

//Tried both the below lines

// attachment.writeBase64(customerImpactedGr, "Incident list.xls", "application/vnd.ms-excel", gs.base64Encode(binaryFile));
attachment.writeBase64(customerImpactedGr, "Incident list.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", gs.base64Encode(binaryFile));

Some file is getting attached, but when i tried opening the file, it seems that it is a corrupt file. Whereas this works fine with CSV file.

I tried one more thing. I converted an excel file using window.btoa() api using client side javascript and the base64 encoded file which i receive, works perfectly fine. So what i am suspecting is that gs.base64Encode() api not working correctly with binary data. Or i maynot be handling the binary data correctly.

If any one did something similar, your help will be highly appreciated.

Thanks & Regards,

Swarnadeep Nandy

1 ACCEPTED SOLUTION

SwarnadeepNandy
Mega Sage

I found a solution to the issue.

There is an API saveResponseBodyAsAttachment() OOTB. Which directly attaches the file in a record in ServiceNow.

Irrespective of file type being received, this API will take care of everything.

Regards,

Swarnadeep Nandy

View solution in original post

5 REPLIES 5

Hi SwarnadeepNandy,

 

I tried your solution but whenever i call the api i get this response

Security restricted:  is not an authorized file extension

 

Just to clarify a bit, i'm using the same method as you did which is by calling a url to download the attachment and used saveResponseBodyAsAttachment tto try and attach it to a record

 

Do you have any ideas on how to fix this?