Send API Multipart attachment to thirdparty
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-12-2024 03:34 AM
Hello,
I'am trying to send a API multipart attachment by business rule. I would like to do that without MID server but I have no idea how to do that.
Any idea ?
Thanks for your help
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-12-2024 08:00 PM
Hi @BenG
there is a article explaining it and providing the code: Script to send multipart (including text and binary) RestAPI
And also there is a ready-to-use-solution in the Share: MultiPart Upload Helper
Maik
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-12-2024 10:05 PM
Sure, you can send a multipart attachment via a business rule in ServiceNow without using a MID server. Here's a step-by-step guide:
1. Create a new Business Rule.
2. Set the 'When to run' section according to your requirements.
3. In the 'Advanced' section, write a script to send the API multipart attachment.
Here's a sample script:
javascript
(function executeRule(current, previous /*null when async*/) {
try {
var request = new sn_ws.RESTMessageV2();
request.setHttpMethod('post');
request.setEndpoint('your_endpoint_url');
request.setRequestHeader('Content-Type', 'multipart/form-data');
request.setRequestHeader('Accept', 'application/json');
request.setAuthenticationProfile('oauth2', 'your_oauth_profile_id'); //set your OAuth2 profile
var attachment = new GlideSysAttachment();
var attachmentGR = attachment.getAttachmentRecord('sys_attachment', 'your_attachment_sys_id'); //set your attachment sys_id
var inputStream = attachmentGR.getContentStream();
request.setRequestBodyFromStream(inputStream);
var response = request.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
}
catch(ex) {
var message = ex.getMessage();
}
})(current, previous);
Please replace 'your_endpoint_url', 'your_oauth_profile_id', and 'your_attachment_sys_id' with your actual values.
Remember:
- This script uses the RESTMessageV2 API, which is available starting with the Eureka release.
- The 'setRequestBodyFromStream' method is used to set the request body from an InputStream object.
- The 'getContentStream' method is used to get an InputStream object for the attachment content.
- The 'execute' method is used to send the REST message to the endpoint.
- The 'getBody' and 'getStatusCode' methods are used to get the response body and status code, respectively.
Please test this in a sub-production instance first before implementing it in a production environment.
nowKB.com
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-13-2024 12:59 AM
Sure, you can send a multipart attachment by a business rule in ServiceNow without using a MID server. Here's a step-by-step guide:
1. Create a new Business Rule.
2. Set the 'When to run' section according to your requirements.
3. In the 'Advanced' section, write a script to send the API multipart attachment.
Here's a sample script:
javascript
(function executeRule(current, previous /*null when async*/) {
try {
var request = new sn_ws.RESTMessageV2();
request.setHttpMethod('post');
request.setEndpoint('your_endpoint_url');
request.setRequestHeader('Content-Type', 'multipart/form-data');
request.setRequestHeader('Accept', 'application/json');
request.setAuthenticationProfile('oauth2', 'your_oauth2_profile_id'); //set your OAuth2 profile
var attachment = new GlideSysAttachment();
var attachmentGR = attachment.getAttachmentRecord('sys_attachment', 'your_attachment_sys_id'); //set your attachment sys_id
var inputStream = attachmentGR.getBytes('body');
var fileName = attachmentGR.getValue('file_name');
var contentType = attachmentGR.getValue('content_type');
request.setRequestBodyFromStream(inputStream, fileName, contentType);
var response = request.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
} catch (ex) {
var message = ex.getMessage();
}
})(current, previous);
Please replace 'your_endpoint_url', 'your_oauth2_profile_id', and 'your_attachment_sys_id' with your actual values.
Remember:
- This script uses the RESTMessageV2 API, which is available starting with the Eureka release.
- The 'setRequestBodyFromStream' method is used to set the request body from a Java InputStream, which is suitable for sending large amounts of data in a multipart request.
- The 'setAuthenticationProfile' method is used to set the authentication profile for the request. In this example, OAuth2 is used.
- The 'execute' method sends the request and returns the response.
- The 'getBody' and 'getStatusCode' methods are used to get the response body and HTTP status code, respectively.
Please note that this is a basic example and you may need to adjust it according to your specific requirements.
nowKB.com
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-13-2024 01:16 AM
Sure, you can send a multipart attachment via a business rule in ServiceNow without using a MID server. Here's a step-by-step guide:
1. Create a new Business Rule in ServiceNow.
2. Set the 'When to run' section according to your requirements.
3. In the 'Advanced' section, write a script to send the API multipart attachment.
Here's a sample script:
javascript
(function executeRule(current, previous /*null when async*/) {
try {
var request = new sn_ws.RESTMessageV2();
request.setHttpMethod('post');
request.setEndpoint('your_endpoint_url');
request.setRequestHeader('Content-Type', 'multipart/form-data');
var attachment = current.getAttachment('sys_id_of_attachment');
request.setRequestBodyFromAttachment(attachment);
var response = request.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
}
catch(ex) {
var message = ex.getMessage();
}
})(current, previous);
Please replace 'your_endpoint_url' and 'sys_id_of_attachment' with your actual endpoint URL and the sys_id of the attachment you want to send.
Please note:
- This script uses the RESTMessageV2 API, which is available starting with the Eureka release.
- The 'setRequestBodyFromAttachment' method is used to add the attachment to the request body.
- The 'execute' method is used to send the request.
- The 'getBody' and 'getStatusCode' methods are used to get the response body and status code, respectively.
- The 'catch' block is used to handle any exceptions that may occur during the execution of the script.
Remember to test your business rule thoroughly before deploying it to a production environment.
nowKB.com