Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

Attached file is not opening on the incident and service request table.

vinuth v
Tera Expert

Hi All,

I have created the Scripted REST API and provide the API and payload to the 3rd party. But when I try to open the file from the Incident table I am getting 

vinuthv_0-1677943322107.png

vinuthv_1-1677943354485.png

I am not able to open the file but file is attached to sys_attachment table

vinuthv_2-1677943420968.png

 

vinuthv_4-1677943483360.png

Tried with the different content types. I am facing this issue for Docs, Excl and Images.

 

Script is:

(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

var requestBody = request.body.dataString;
var requestBody1 = request.body.data;
var parser = new global.JSON();
var parsedData = parser.decode(requestBody);
var number = parsedData.incidentNumber;

var fileName = parsedData.fileName;

var fileContentType = parsedData.contentType;

var fileData = parsedData.fileData;

var rec = new GlideRecord('incident');
rec.addQuery('number', number);
rec.query();
if (rec.next()) {
var sa = new GlideSysAttachment();
// sa.write(rec, fileName, fileContentType, fileData);
sa.write(rec, fileName, fileContentType, GlideStringUtil.base64Decode(fileData));
var responseBody = {};
responseBody.incNumber = number;
responseBody.status = "Success";
response.setBody(responseBody);
} else {
var responseBodyFailure = {};
responseBodyFailure.status = "Failure";
response.setBody(responseBodyFailure);
}

})(request, response);

 

 

And Payload

{   
"incidentNumber": "INC4969852",   
"fileName": "test_6.doc",   
"contentType": "application/octet-stream",   
"fileData":  ""

}

 

Please anyone provide me the inputs.

Thanks in advance,

Vinuth

 

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

@vinuth v 

is 3rd party sending proper base64 encoded data?

If yes then try this

(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

var requestBody = request.body.dataString;
var requestBody1 = request.body.data;
var parser = new global.JSON();
var parsedData = parser.decode(requestBody);
var number = parsedData.incidentNumber;

var fileName = parsedData.fileName;

var fileContentType = parsedData.contentType;

var fileData = parsedData.fileData;

var rec = new GlideRecord('incident');
rec.addQuery('number', number);
rec.query();
if (rec.next()) {

var ecc = new GlideRecord('ecc_queue');
ecc.initialize();
ecc.agent = "AttachmentCreator";
ecc.topic = "AttachmentCreator";
ecc.name = fileName + ":" + fileContentType;
ecc.source = rec.getTableName() + ":" + rec.sys_id;
ecc.payload = fileData;
ecc.insert();

var responseBody = {};
responseBody.incNumber = number;
responseBody.status = "Success";
response.setBody(responseBody);
} else {
var responseBodyFailure = {};
responseBodyFailure.status = "Failure";
response.setBody(responseBodyFailure);
}

})(request, response);

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

7 REPLIES 7

Ankur Bawiskar
Tera Patron
Tera Patron

@vinuth v 

is 3rd party sending proper base64 encoded data?

If yes then try this

(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

var requestBody = request.body.dataString;
var requestBody1 = request.body.data;
var parser = new global.JSON();
var parsedData = parser.decode(requestBody);
var number = parsedData.incidentNumber;

var fileName = parsedData.fileName;

var fileContentType = parsedData.contentType;

var fileData = parsedData.fileData;

var rec = new GlideRecord('incident');
rec.addQuery('number', number);
rec.query();
if (rec.next()) {

var ecc = new GlideRecord('ecc_queue');
ecc.initialize();
ecc.agent = "AttachmentCreator";
ecc.topic = "AttachmentCreator";
ecc.name = fileName + ":" + fileContentType;
ecc.source = rec.getTableName() + ":" + rec.sys_id;
ecc.payload = fileData;
ecc.insert();

var responseBody = {};
responseBody.incNumber = number;
responseBody.status = "Success";
response.setBody(responseBody);
} else {
var responseBodyFailure = {};
responseBodyFailure.status = "Failure";
response.setBody(responseBodyFailure);
}

})(request, response);

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi @Ankur Bawiskar 

Previously We used the base64Decode method and it's not worked for few extension so now we tried with the ecc_queue approach now it is working fine for all the extension.

I have one query why base64Decode method is not working for few extensions.

@vinuth v 

not very sure on that piece.

possibly the base64 decode has some limitations with file types

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader