
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-27-2023 12:40 PM
1. I created a Rest Message.
2. I created a Business Rule on the attachment Table.
3. I created one incident to add an attachment and trigger the business rule but the attachment pass in base 64 format only.
Business Rule-----------------------
var a = current.sys_id;
var gr = new GlideRecord('sys_attachment');
gr.addQuery('sys_id', a);
gr.query();
if (gr.next()) {
var StringUtil = new GlideStringUtil();
var sa = new GlideSysAttachment();
var binData = sa.getBytes(gr);
encData = StringUtil.base64Encode(binData);
}
try {
attachmentRec = new GlideRecord("incident");
attachmentRec.addQuery("sys_id", current.table_sys_id);
attachmentRec.query();
while (attachmentRec.next()) {
ZendeskNumber = attachmentRec.u_zendesk_external_inc_number;
}
body.content_type = current.content_type + "";
body.u_zendesk_external_inc_number = ZendeskNumber + "";
body.number = attachmentRec.number + "";
body.file_name = current.file_name + "";
// body.base_64_bytes = binData + "";
body = JSON.stringify(body);
var r = new sn_ws.RESTMessageV2('', '');
r.setStringParameterNoEscape('file_name', current.file_name);
r.setRequestBody(body);
response = r.execute();
responseBody = response.getBody();
requestBody = r.getRequestBody();
httpStatus = response.getStatusCode();
jsonObject = JSON.parse(responseBody);
sysID = jsonObject.result.sys_id;
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-29-2023 01:58 AM
If you want to sent file as binary as a request body then you can use below code. It basically convert the file into binary and set the request body. But you wont be able to sent json or any other parameter in requested body. You might need to use query parameter or header to sent other details depending on the API document.
var r = new sn_ws.RESTMessageV2('Rest Message', 'Upload');
r.setRequestBodyFromAttachment(current.sys_id); //sys_id of attachment

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-04-2023 12:49 AM
Try this Code:
var StringUtil = new GlideStringUtil();
var attachments = new GlideSysAttachment();
var gR = new GlideRecord('sys_attachment');
gR.addEncodedQuery('table_name=incident^table_sys_id='+current.sys_id);
gR.query();
while(gR.next())
{
var binData = attachments.getBytes(gR);
var encData = StringUtil.base64Encode(binData);
gs.print(binData);
gs.print(encData);
gs.print('**************');
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-04-2023 01:15 AM - edited ‎04-04-2023 01:17 AM
(function executeRule(current, previous /*null when async*/ ) {
var response;
var responseBody;
var requestBody;
var httpStatus;
var jsonObject;
var attachmentRec;
var attachmentRec1;
var body = {};
var a = current.sys_id;
var ZendeskNumber;
var StringUtil = new GlideStringUtil();
var attachments = new GlideSysAttachment();
var gR = new GlideRecord('sys_attachment');
gR.addEncodedQuery('table_name=incident^table_sys_id=' + current.sys_id);
gR.query();
while (gR.next()) {
var binData = attachments.getBytes(gR);
var encData = StringUtil.base64Encode(binData);
gs.log('ZendeskNumber file is binData' + binData);
gs.log('ZendeskNumber file is encData' + encData);
}
try {
attachmentRec = new GlideRecord("incident");
attachmentRec.addQuery("sys_id", current.table_sys_id);
attachmentRec.query();
while (attachmentRec.next()) {
ZendeskNumber = attachmentRec.u_zendesk_external_inc_number;
}
// body.content_type = current.content_type + "";
// body.u_zendesk_external_inc_number = ZendeskNumber + "";
// body.number = attachmentRec.number + "";
// body.file_name = current.file_name + "";
// body.base_64_bytes = binData + "";
// gs.log('base 64 is1' + binData);
// body = JSON.stringify(body);
// gs.log('request body' + body);
// gs.log('body content_type' + current.content_type);
// gs.log('body number' + ZendeskNumber);
// gs.log('body file_name' + current.file_name);
var r = new sn_ws.RESTMessageV2('', '');
r.setAuthentication('basic', '6c78e0a9879da55029ebc8809bbb355c');
r.setRequestHeader('Content-Type', current.content_type);
r.setStringParameterNoEscape('file_name', current.file_name);
r.setRequestBodyFromAttachment(current.sys_id);
gs.log('file type ' + current.content_type);
gs.log('filename ' + current.file_name);
gs.log('fileid ' + current.sys_id);
// body = JSON.stringify(body);
// r.setRequestBody(body);
// gs.log('request body' + body);
response = r.execute();
responseBody = response.getBody();
requestBody = r.getRequestBody();
httpStatus = response.getStatusCode();
// jsonObject = JSON.parse(responseBody);
// gs.log("Zendesk Attachment Incident jsonObject: " + jsonObject);
// sysID = jsonObject.result.sys_id;
gs.log("Zendesk Attachment Incident Response: " + responseBody);
gs.log("Zendesk Attachment Incident HTTP Status: " + httpStatus);
gs.log("Zendesk Attachment Incident Request: " + requestBody);
var str = responseBody;
var n = str.includes("token");
if (n == true) {
var a1 = str.split('"token":"');
b = a1[1];
var c = b.split('",');
var d = c[0];
d = d.trim();
current.u_zendesk_token = d;
current.update();
}
} catch (ex) {
var message = ex.message;
}
})(current, previous);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-13-2023 07:53 AM
It seems that the issue you're facing is that the attachment passed in base64 format only, and you want to send it as an attachment in the REST message. In that case, you can modify your business rule to include the base64-encoded attachment in the request body as a string, then decode it on the receiving end.
Please have a look at Exalate when you have a chance, it is build for use-cases like this.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-26-2023 02:55 AM
hi Ahmer
By directly passing the binary data to the RESTMessageV2 using the setRequestBodyFromAttachment() method, you should be able to send the attachment in binary form to Zendesk.
Please change business rule to this:
var a = current.sys_id;
var gr = new GlideRecord('sys_attachment');
gr.addQuery('sys_id', a);
gr.query();
if (gr.next()) {
var sa = new GlideSysAttachment();
var binData = sa.getBytes(gr);
}
try {
attachmentRec = new GlideRecord("incident");
attachmentRec.addQuery("sys_id", current.table_sys_id);
attachmentRec.query();
while (attachmentRec.next()) {
ZendeskNumber = attachmentRec.u_zendesk_external_inc_number;
}
body.content_type = current.content_type + "";
body.u_zendesk_external_inc_number = ZendeskNumber + "";
body.number = attachmentRec.number + "";
body.file_name = current.file_name + "";
var r = new sn_ws.RESTMessageV2('', '');
r.setStringParameterNoEscape('file_name', current.file_name);
r.setRequestBodyFromAttachment(current.file_name, binData); // Pass the binary data directly
response = r.execute();
response.getBody();
response.getStatusCode();
} catch (ex) {
// Handle any exceptions here
}
You might also consider exploring Exalate, which could potentially simplify and enhance the integration process between ServiceNow and Zendesk. Its my understanding this would be a way faster approach