Name
sn_cai.ResultReader
Description
Helps for reading the results received by common layer API invocation.
Script
/**
* @namespace sn_cloud_access_la
* @description
* <h3>Scope: All classes in this namespace represents ServiceNow Instance side classes/script includes</h3>
* This provides ability to read the response.
* There are two approaches to reading response
* 1. Synchronous response reading
* 2. Asynchronous response reading
* Read through the tutorial for more details.
*
* @example
* //shows reading in synchronous way. go over tutorials to know more details and async response reading
* var requestId = '245e310d-cf2b-4e4d-aee8-d7b8fe0b1c45'; //this was generated and passed while making call.
*
* var itr = ResultReader.getIterator(requestId);
* while(itr.hasNext()) {
* var page = itr.next();
* if(page) {
* //process the response here.
* gs.info('pageNumber:'+ page.getPageNumber());
* gs.info('response:'+ page.getResponse());
* }
* }
*
* @tutorial 03-readingResponse
*
*/
/**
* <h3>Scope: This is ServiceNow Instance side class</h3>
* Helps to read the results in sync and async way
* @class
* @memberof sn_cloud_access_la
* @alias ResultReader
*/
var ResultReader = Class.create();
ResultReader.getIterator = function(requestId) {
return new sn_cloud_access_la.PageResultIterator(requestId);
};
/**
* Result Reader factory method
* @param {GUID} requestId
*/
ResultReader.newReader = function(requestId) {
return new ResultReader(requestId);
};
ResultReader.prototype = {
//we assume that all results are available before calling it.
initialize: function(requestId) {
gs.info('ResultReader initialized with:' + requestId);
this._requestId = requestId;
},
/**
* Get the number of pages in the result/response
* @returns {number} number of pages
*/
getPageCount: function() {
var totalPages = 0;
var gr = new GlideRecord('sn_cloud_access_la_api_response');
gr.addQuery('u_request_id', this._requestId);
gr.query();
totalPages = gr.getRowCount();
return totalPages;
},
/**
* get the page response for a given page number
* @param {number} pageNumber
* @returns {ResultPage} resultPage or null when such page doesnt exists
*/
getPageResponse: function(pageNumber) {
var page;
var gr = new GlideRecord('sn_cloud_access_la_api_response');
gr.addQuery('u_request_id', this._requestId);
gr.addQuery('u_page_number', pageNumber);
gr.query();
if (gr.next()) {
page = new sn_cloud_access_la.ResultPage(gr);
}
return page;
},
/**
* Register the callback to be invoked when the page response is available for given request
* @param {string} callback - fully qualified name of the callback handler class implementing CallBackHandler (abstract) class.
* @param {string} contextStr - context to be passed when calling the method
*/
registerPageCallback: function(callback, contextStr) {
gs.info('ResultReader registerPageCallback will be using requestId:' + this._requestId);
var gr = new GlideRecord('sn_cloud_access_la_response_callback_handler');
gr.initialize();
gr.setValue('u_request_id', String(this._requestId));
gr.setValue('u_callback_handler', this._decorate(callback));
gr.setValue('u_context', contextStr);
return gr.insert();
},
/**
* decorates with the instance creation code
* @ignore
*/
_decorate: function(callback) {
return 'new ' + callback + '();';
},
type: 'ResultReader'
};
Sys ID
6a4f617153931010d53bddeeff7b1229