If you're building a polling integration that has response payloads larger than 5MB then you'll need to save them as attachments and adapt your response processing.
Sometimes a polling integration that is fetching data from another system is required to handle response payloads larger than the 5MB limit imposed by ServiceNow. The normal setup for a Poll Processor includes the response payload being returned as a string in the Request script. Here we look at an alternative approach which avoids handling the response payload as a string and so avoids the 5MB string limit.
Alternative approach for response payloads > 5MB:
Make the request (using RESTMessageV2()).
Save the response as an attachment on a record (using saveResponseBodyAsAttachment()).
Pass the attachment sys_id through (using getResponseAttachmentSysid()).
Fetch it and do something with the newly generated attachment - passing the stream of the attachment on to be processed however required, e.g. text/xml processing.
Don't pass the response body from the request script to the response script. Use saveResponseBodyAsAttachment() and getResponseAttachmentSysid() instead.
The following example is taken from our .
In our example we've taken the inbound attachment, built a payload and passed it to Unifi to process. More detail on how Unifi processes inbound attachments can be read in our section on .
request.execute(): The response object returned by request.execute() provides a method called getResponseAttachmentSysid().
getResponseAttachmentSysid(): This method returns the sys_id of the attachment generated by the REST call.
// Process the request e.g. by executing a web service and returning the response
(function (poll_request, poller, connection, params) {
var request, response;
request = new sn_ws.RESTMessageV2();
request.setHttpMethod('GET');
request.setEndpoint(poll_request.endpoint_url);
request.setRequestHeader('Content-Type','application/json');
request.setBasicAuth(connection.getBasicAuthUser(), connection.getBasicAuthPassword());
// Save the response as a new attachment (on the poll request)
request.saveResponseBodyAsAttachment(
poll_request.getTableName(), poll_request.sys_id, params.attachment.file_name
);
response = request.execute();
poll_request.response_code = response.getStatusCode();
poll_request.response_status = response.getErrorMessage();
if (response.haveError()) {
throw '\nResponse Code: ' + response.getErrorCode() + '\nResponse error: ' + response.getErrorMessage();
}
// Return the sys_id of the saved attachment
answer = response.getResponseAttachmentSysid() + '';
})(poll_request, poller, connection, params);// Process the response returned by the request script
// The 'answer' variable from the request script is passed in here as the 'response' parameter
(function (poll_request, poller, response, params) {
// Establish the environment
var poll_helper = new x_snd_eb.PollHelper(poll_request);
var info = [
'Incident : ' + params.int_ref,
'- Attachment file name: ' + params.attachment.file_name,
'- Attachment id: ' + response
];
// The response should be the sys_id of the created attachment
params.attachment.data = '<x-attachment-data sys_id="' + response + '" />';
// Build the payload for Unifi
var payload = {
sys_id : params.ext_ref,
correlation_id : params.int_ref,
attachment : params.attachment
};
// Submit the message into Unifi
poll_helper.processInbound({
message_name : 'AddAttachmentInbound',
payload : JSON.stringify(payload)
});
poll_request.response_status = info.join('\n');
})(poll_request, poller, response, params);