Help on Script to send attachment through REST as multipart/form data

yad_achyut
Giga Guru

Hello All,

Can anyone tell me step script to send an attachment as multipart/form data via REST ??

10 REPLIES 10

@yad_achyut 

are you not able to reach to that endpoint directly?

The above links should help you in writing the script/logic in both the cases i.e. with & without mid server

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

Shiva41
Tera Contributor

function sendAttachmentAsMultipartFormData(current) {
var grAttachment = new GlideRecord('sys_attachment');
grAttachment.addQuery('table_name', 'sc_req_item');
grAttachment.addQuery('table_sys_id', current.sys_id);
grAttachment.query();

while (grAttachment.next()) {
var url = '<YOUR API ENDPOINT URL>'; // Replace with your API endpoint URL
var body = new GlideHTTPRequest(url);
var multipart = new GlideMultipartFormData();

multipart.addFile('attachment', grAttachment.getValue('file_name'), grAttachment.getValue('file_stream'));

body.setMethod('POST');
body.setMultipartData(multipart);
body.addHeader('Content-Type', 'multipart/form-data');

var response = body.post();

gs.info('Attachment sent with response: ' + response.getBody());
}
}

 

 

In this script, we first query for all attachments that are associated with the RITM using a GlideRecord query. We then iterate over each attachment and create a new instance of the GlideHTTPRequest class to send the attachment in Multi/Part form data.

To create the Multi/Part form data, we create a new instance of the GlideMultipartFormData class and add the attachment file using the addFile method. We then set the Multi/Part form data in the GlideHTTPRequest instance using the setMultipartData method and add a header for the Content-Type using the addHeader method.

Finally, we send the HTTP request using the post method and log the response.

Note that you will need to replace the <YOUR API ENDPOINT URL> placeholder in the script with the URL of your API endpoint that accepts Multi/Part form data.

You can call this function from a Business Rule on the RITM table, for example, in the onAfter script section for the insert or update events. Alternatively, you can create a Script Include and call the function from a Scheduled Job or a Workflow.

@Shiva41  i have to use mid server in between  while sending the attachment so what changes i need to make in the code ?

Mathieu Lepoutr
Mega Guru

Hi 

To send an attachment as multipart/form data via the REST in ServiceNow:

Create an attachment object and set the file name and content, then create a REST message object and set the endpoint to 'rest_attachment', method to 'post', request body to the attachment object, and content type to 'multipart/form-data'. Now send the REST message object using 'execute'.

 

Please consider using Exalate integration software. It synchronizes data between ServiceNow and other systems, including attachments, using a customizable solution. It will make this way easier 🙂 

@Mathieu Lepoutr  Thanks for the response but i cant user exalate integration software. Can you please help me on some sets of line of code  that are been used on the logic you have explained above, so that i can take the reference and then i will be able to execute it