Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Sending attachment from ServiceNow to Jira using BR and REST message

Shalika
Tera Expert

I want to send attachment from ServiceNow to Jira. For that I have created REST message and BR. I don't know what is wrong with my BR. I am not able to send attachment

(function executeRule(current, previous /*null when async*/ ) {
  var included_tables = ["incident"];
var debug = true;

var arrayUtil = new ArrayUtil();
var requestBody;
var responseBody;
var status;
var sm;

    if (typeof GlideStringUtil != 'undefined')
        var StringUtil = GlideStringUtil;
    else
        var StringUtil = Packages.com.glide.util.StringUtil;
gs.log("initialize");

    var gr = new GlideRecord(current.table_name);
    gr.addQuery('sys_id', current.table_sys_id);
    gr.query();

    if (gr.next()) {
        if (arrayUtil.contains(included_tables,current.table_name)) {
            
            try{
                
        sm = new sn_ws.RESTMessageV2('Neste Siili JIRA', 'Add attachment');
       
                var attachmentsJson = '';
                attachmentsJson += ' { "content_type":"' + current.content_type + '",';
                attachmentsJson += '"file_name":"' + JSUtil.escapeText(current.file_name) + '",';
                attachmentsJson += '"size_bytes":"' + current.size_bytes + '",';
                attachmentsJson += '"sys_id":"' + current.sys_id + '"';
                attachmentsJson += '}';

                sm.setStringParameterNoEscape('attachments', attachmentsJson);

                response = sm.execute();
                status = response.getStatusCode();

            if (debug){
                    gs.log("Payload sent jira: " + sm.getRequestBody());
                    gs.log("Response jira: " + response.getBody());
                    gs.log("Status jira : " + status);
            }
            } catch(ex) {
                responseBody = ex.getMessage();
                status = '500';
            } finally {
                requestBody = sm ? sm.getRequestBody():null;
            }
        }
    }

})(current, previous);

1 ACCEPTED SOLUTION

Hi,

I am sharing a sample code and you can enhance it further

based on BR is on which table sys_attachment or incident enhance the code

var arr = [];

var gsu = (typeof GlideStringUtil != 'undefined') ? (GlideStringUtil) : (Packages.com.glide.util.StringUtil); //few versions support the first one, other supports second
var gsa = (typeof GlideSysAttachment != 'undefined') ? (new GlideSysAttachment()) : (new Packages.com.glide.ui.SysAttachment());

var gr = new GlideRecord("sys_attachment");
gr.addQuery("table_sys_id", incidentSysId);
gr.query();
while (gr.next()) {

	var attachmentData = gsa.getBytes(gr);
	var attachment = String(Packages.java.lang.String(attachmentData));

	var encData = GlideStringUtil.base64Encode(attachmentData);

	var obj = {};
	obj["content_type"] = gr.getValue('content_type');
	obj["file_name"] = JSUtil.escapeText(gr.getValue('file_name'));
	obj["size_bytes"] = gr.getValue("size_bytes ");
	obj["sys_id"] = gr.getUniqueValue();
	obj["Content-Transfer-Encoding"] = "base64" +  encData.toString();

	arr.push(obj);

}

var finalObj = {};
finalObj["attachment"] = arr;

var sm = new sn_ws.RESTMessageV2('Neste Siili JIRA', 'Add attachment');

var response = sm.execute();
var status = response.getStatusCode();

gs.info("Payload sent jira: " + sm.getRequestBody());
gs.info("Response jira: " + response.getBody());
gs.info("Status jira : " + status);

Regards
Ankur

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

View solution in original post

24 REPLIES 24

Hi,

Did you try sending 1 file?

The request body shared doesn't mention about base64 data for the file then how the file data will be transferred?

Regards
Ankur

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

The request body is as follows -

{
      "attachments": [{
          "content_type": "image/png",
          "file_name": "Screenshot (153).png",
                "size_bytes ": "137246 ",
          "sys_id": "f576b5211b091950f7b82fcde54bcbae",
"Content-Transfer-Encoding": "base64${base64EncodedData}"
      }]
  }

 

then are you sending the request body in similar manner?

Regards
Ankur

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

Yes they are sending the request body in similar manner.

What should I do or make changes in my code so that the attachment gets reflected in Jira

Hi,

I am sharing a sample code and you can enhance it further

based on BR is on which table sys_attachment or incident enhance the code

var arr = [];

var gsu = (typeof GlideStringUtil != 'undefined') ? (GlideStringUtil) : (Packages.com.glide.util.StringUtil); //few versions support the first one, other supports second
var gsa = (typeof GlideSysAttachment != 'undefined') ? (new GlideSysAttachment()) : (new Packages.com.glide.ui.SysAttachment());

var gr = new GlideRecord("sys_attachment");
gr.addQuery("table_sys_id", incidentSysId);
gr.query();
while (gr.next()) {

	var attachmentData = gsa.getBytes(gr);
	var attachment = String(Packages.java.lang.String(attachmentData));

	var encData = GlideStringUtil.base64Encode(attachmentData);

	var obj = {};
	obj["content_type"] = gr.getValue('content_type');
	obj["file_name"] = JSUtil.escapeText(gr.getValue('file_name'));
	obj["size_bytes"] = gr.getValue("size_bytes ");
	obj["sys_id"] = gr.getUniqueValue();
	obj["Content-Transfer-Encoding"] = "base64" +  encData.toString();

	arr.push(obj);

}

var finalObj = {};
finalObj["attachment"] = arr;

var sm = new sn_ws.RESTMessageV2('Neste Siili JIRA', 'Add attachment');

var response = sm.execute();
var status = response.getStatusCode();

gs.info("Payload sent jira: " + sm.getRequestBody());
gs.info("Response jira: " + response.getBody());
gs.info("Status jira : " + status);

Regards
Ankur

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