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

The response on log I am getting is as attached in the screenshot. Same, no attachment passed to Jira but the status code is showing 200.

find_real_file.png

Hi,

your business rule is on which table?

share your latest script?

are you sure the BR triggered?

regards
Ankur

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

Business rule is on sys_attachment table. The script is

(function executeRule(current, previous /*null when async*/ ) {
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('sys_id', current.table_sys_id);
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);
    })(current, previous);

Hi,

not sure why your BR is on sys_attachment

but here is your updated script

(function executeRule(current, previous /*null when async*/ ) {
    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', current.table_sys_id);
    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);
})(current, previous);

Regards
Ankur

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

Hi Ankur,

It is still not working