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.

Outbound REST - Multipart/form-data

Rshear
Kilo Expert

Hi,

Currently working on an outbound REST to 3rd party tool (through a mid server). 3rd party requires mutipart to be sent when sending a file to attach/upload.

Test the POST call on postman and all ok. When in servericenow I'm getting no-where quick 🙂

That said I can get some kind of response just not the one I want (i.e. file uploaded). See REST content:

-----WebKitFormBoundaryAAA

Content-Disposition: form-data; name="file"; filename=${filename};

Content-Type:${contenttype}

${file}

-----WebKitFormBoundaryAAA

 

${contenttype} comes from the content type of the attachment on the sys_attachment table and ${file} is created using the below (which is in a script include):

-----------------------------------------------------------------------------------

var grAtt = new GlideRecord('sys_attachment');
grAtt.addQuery('table_sys_id', sys_id of attachment);
grAtt.query();

if(grAtt.next()){
var gsa = GlideSysAttachmentInputStream(grAtt.sys_id.toString());
var bytesContent = new Packages.java.io.ByteArrayOutputStream();

gsa.writeTo(bytesContent);
bytesContent.close();

//Get the file content
var mycontentStr = new Packages.java.lang.String(bytesContent.toByteArray());

i then set mycontentStr as a parameter to pass to the rest call.

 

Any help would be appreciated!...ive scoured the community and read a few things that multipart not supported and to use MId server script include however there seems to be conflicting views on this.

31 REPLIES 31

Kamil26
Giga Contributor

Helpful is not enough word for it 😛

thej tj
Kilo Contributor

@Swetang @Kamil This is great! Thank you.

Couple of clarifications,

1. Business rule you mentioned above, is it on the "sys_attachment" table? Is trigger on Insert?

2. Is this integration using Mid server? If so where is it used?

Thanks

Thejesh

 

Swetang1
Tera Contributor

@thej_tj : You can run it on sys_attachment and insert. In this case MID server is not used. However, you can use restMessage.setMIDServer('MID NAME') or you can specify it in a REST record too.

thej tj
Kilo Contributor

@Swetang Thank you! One last question. How to pass additional form data attributes which are required for 3rd party API. Example: format, Submission ID. They are required in the form data when testing on Post man. 

Thank you

Thej

Swetang1
Tera Contributor

Please refer to the below link:
https://servicenowthink.wordpress.com/2020/04/13/how-to-send-binary-data-with-multipart-from-servicenow-to-third-party-applications-for-free/

It is explained how to include the parameters in the body.