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

Offical Documentation

Official Docs: