How to attach a file using scripted rest api in incident

Meghant Rai
Kilo Guru

I have a requirement where I have designed post scripted rest API which will handle Impact, Urgency, Short Description, Description sent from 3rd party.

Now I would also like to handle attachment . Third party system is also servicenow. They can attach any file in Incident record and my API should be capable enough the attach the same file in target servicenow instance.

Could someone please help me with the set of code .

4 REPLIES 4

yad_achyut
Giga Guru

Hello @Meghant Rai ,

 

There is a solution shared  here; try to enhance it further

Scripted Rest API to update incident with attachment

Regards
Achyut

 

Meghant Rai
Kilo Guru

It didn't worked, below is the code but the file getting attached is undefined

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

    var requestBody = request.body.dataString;
    var parser = new global.JSON();
    var parsedData = parser.decode(requestBody);
    //var number = parsedData.incidentNumber;
    var fileName = parsedData.fileName;
    gs.log('File name',+ fileName);
    var fileContentType = parsedData.contentType;
    var fileData = parsedData.fileData;
    var scc= parsedData.scc_Incident_Number;
    var urgency= parsedData.urgency;
    var impact=parsedData.impact;
    var short_description = parsedData.shortDescription;
    var description = parsedData.description;

    var rec = new GlideRecord('incident');
    rec.initialize();
    rec.short_description=short_description;
    rec.description=description;
    rec.impact=impact;
    rec.urgency=urgency;
    rec.u_vendor_reference_number=scc;
    rec.caller_id = '0130c7e31b62d1100dcbb165464bcb4a'; // Caller Sys ID
    rec.insert();
   
    var sa = new GlideSysAttachment();
        sa.write(rec, fileName, fileContentType, fileData);
        var responseBody = {};
        responseBody.incNumber = rec.number;
        responseBody.status = "Success";
        response.setBody(responseBody);
   

})(request, response);
------------------------------------------------------
JSON Payload:
{
  "data": {
    "scc_Incident_Number": "INC001234",
    "shortDescription": "Issue with server hardware",
    "description": "The server is experiencing hardware issues and needs immediate attention.",
    "impact": "1",
    "urgency": "2",
    "file_name": "demo.pdf",
    "contentType": "application/pdf",
    "fileData": "JVBERi0xLjMKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNjQvTGVuZ3RoIDU0L04gMjgvVHJpb"
  }
}

Meghant Rai
Kilo Guru

@Ankur Bawiskar : Can you please help here

Meghant Rai
Kilo Guru

The Pdf content is showing as blank
This is code I modified

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

    var requestBody = request.body.dataString;
    var parser = new global.JSON();
    var parsedData = parser.decode(requestBody);
    //var number = parsedData.incidentNumber;
    var fileName = parsedData.fileName;
    gs.log('File name',+ fileName);
    var fileContentType = parsedData.contentType;
    var fileData = parsedData.fileData;
    var scc= parsedData.scc_Incident_Number;
    var urgency= parsedData.urgency;
    var impact=parsedData.impact;
    var short_description = parsedData.shortDescription;
    var description = parsedData.description;

    var rec = new GlideRecord('incident');
    rec.initialize();
    rec.short_description=short_description;
    rec.description=description;
    rec.impact=impact;
    rec.urgency=urgency;
    rec.u_vendor_reference_number=scc;
    rec.caller_id = '0130c7e31b62d1100dcbb165464bcb4a'; // Caller Sys ID
    rec.insert();
   
    var sa = new GlideSysAttachment();
    var decodedString = GlideStringUtil.base64Decode(fileData);
        sa.write(rec, fileName, fileContentType, decodedString);
        var responseBody = {};
        responseBody.incNumber = rec.number;
        responseBody.status = "Success";
        response.setBody(responseBody);
   

})(request, response);