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.

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

@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  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

7 REPLIES 7

ersureshbe
Giga Sage

Hi, I'm seeing you are parsing the attachment data in scripted API. I recommend to use ECC queue table. When you are parsing the attachment data from scripted API add a code to send it to ecc _queue table. But you should follow the syntax which field should have require value. I.e Attachment Creator is used , table name: sys_id of the record and send the base64 value in payload.

 

You can check the syntax in the Google or ServiceNow article.

Regards,
Suresh.

Hi @ersureshbe 

Can you please provide any example, it will be helpful.

Thanks,

Vinuth

 

Hi, Use the below link and follow the same syntax to achieve it

https://docs.servicenow.com/bundle/rome-application-development/page/integrate/inbound-soap/referenc...

 

Regards,
Suresh.

Hi @ersureshbe 

 

I am using Scripted REST API, can you please provide example using Scripted REST API.

 

Thanks,

Vinuth