Name

sn_install_base.InstallBaseItemAPIDaoSNC

Description

No description available

Script

var InstallBaseItemAPIDaoSNC = Class.create();
InstallBaseItemAPIDaoSNC.prototype = {
  initialize: function() {
      this.apiHelper = new sn_install_base.InstallBaseItemAPIHelper();
  },
  /*
   * Fetch the install base item by sysId
   *
   * @param id - SysId of the install base item
   * @param ibTableName - SysId of the install base item
   * @param restrictedAttributes - restricted fields.
   *
   *
   * @return response object
   *         Incase of success:
   *         {
   *             "status" : "SUCCESS",
   *             "item" : {install base item obj1},
   *             "hasChildren" : "<BOOLEAN>",
   *         }
   *
   *         Incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getInstallBaseItemByID: function(id, ibTableName, restrictedAttributes, paginationDetails) {
      //get glide record
      var response = {};
      var parent = this._fetchRecord(ibTableName, id, restrictedAttributes);
      response[InstallBaseItemAPIConstants.SYSPARM_DEPTH] = '1';
      response.item = parent.item;
  	response.hasChildren = '' + this.apiHelper.installBaseItemHasChildren(id);
      if (response.hasChildren == "true") {
          response[InstallBaseItemAPIConstants.CHILD_INSTALL_BASE_ITEMS] = this._getInstallBaseChildForHiearchy(id, ibTableName, restrictedAttributes, 2, paginationDetails);
      }
      return response;
  },

  _getInstallBaseChildForHiearchy: function(parentSysId, ibTableName, restrictedAttributes, curDept, paginationDetails) {
      if (curDept - 1 >= paginationDetails.depth)
          return;
      //get glide record

      var installBaseGr = new GlideRecord(ibTableName);
      installBaseGr.addQuery('parent', parentSysId);
      //fetch results
      var resp = {};

      var childRecs = this._fetchMultipleRecords(installBaseGr, restrictedAttributes, null, paginationDetails, InstallBaseItemAPIConstants.CHILD_INSTALL_BASE_ITEMS_ARR);
      for (var cur = 0; !gs.nil(childRecs.items) && cur < childRecs.items.length; cur++) {

          var child = childRecs.items[cur];

          var hasChildren = '' + this.apiHelper.installBaseItemHasChildren(child.sys_id);
          child["hasChildren"] = hasChildren;
          if (hasChildren == "true")
              child[InstallBaseItemAPIConstants.CHILD_INSTALL_BASE_ITEMS_ARR] = this._getInstallBaseChildForHiearchy(child.sys_id, ibTableName, restrictedAttributes, curDept + 1, paginationDetails);
      }
      resp[InstallBaseItemAPIConstants.SYSPARM_DEPTH] = curDept.toString();
      resp.items = childRecs.items;
      return resp;

  },
  /*
   * Fetch all the install base item for the given pagination window.
   *
   * @param queryParams - filter params and its values.
   * @param restrictedAttributes - restricted fields
   * @param paginationDetails - Object that contains {startFrom,pageSize,lastRecord}
   *
   * @return response object
   *         incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{install base item obj1},{nstall base item obj2}]"
   *         }
   *
   *         incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getInstallBaseItems: function(queryParams, restrictedAttributes, paginationDetails, nonQueryingParams) {
      var installBaseGr = new GlideRecord(this._getInstallBaseTableName(queryParams));
      if (!gs.nil(queryParams) && !gs.nil(queryParams[InstallBaseItemAPIConstants.RELATED_PARTY_ID])) {
          var relatedParty = queryParams[InstallBaseItemAPIConstants.RELATED_PARTY_ID][0],
              responsibility = queryParams[InstallBaseItemAPIConstants.RESPONSIBILITY];
          if (!gs.nil(responsibility)) {
              responsibility = responsibility[0];
          }
          var installBaseUtilSnc = new sn_install_base.InstallBaseUtil(),
              params = {};
          params.responsibility = responsibility;
          var resultantSysIds = installBaseUtilSnc.getAllEntities(relatedParty, params);
          installBaseGr.addQuery('sys_id', 'IN', resultantSysIds);
      }
      return this._fetchMultipleRecordsWithLimitParams(installBaseGr, restrictedAttributes, queryParams, paginationDetails, InstallBaseItemAPIConstants.INSTALL_BASE_ITEMS_ARR, nonQueryingParams);
  },
  /*
   * Fetch all the child install base items for the given parent in a pagination window.
   *
   * @param queryParams - filter params and its values.
   * @param restrictedAttributes - restricted fields
   * @param paginationDetails - Object that contains {startFrom,pageSize,lastRecord}
   *
   * @return response object
   *         Incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{install base item obj1},{nstall base item obj2}]"
   *         }
   *
   *         Incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getInstallBaseChildItems: function(parentSysId, queryParams, restrictedAttributes, paginationDetails) {
      //check if the install base id is valid if not then throw resource not found error.
      var parentGr = this.apiHelper.getRecord(global.CSMBaseConstants.INSTALL_BASE_ITEM, parentSysId);
      if (!parentGr)
          return this.apiHelper.resourceNotFound();

      var childGr = new GlideRecord(this._getInstallBaseTableName(queryParams));
      childGr.addQuery((gs.nil(parentGr.root) ? 'root' : 'parent'), parentSysId);
      //fetch results
      return this._fetchMultipleRecords(childGr, restrictedAttributes, queryParams, paginationDetails, InstallBaseItemAPIConstants.CHILD_INSTALL_BASE_ITEMS_ARR);
  },
  /*
   * Fetch all the sold products associated with the given install base item in a pagination window.
   *
   * @param queryParams - filter params and its values.
   * @param restrictedAttributes - restricted fields
   * @param paginationDetails - Object that contains {startFrom,pageSize,lastRecord}
   *
   * @return response object
   *         Incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{sold product obj1},{sold product obj2}]"
   *         }
   *
   *         Incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getInstallBaseSoldProducts: function(ibItemSysId, queryParams, restrictedAttributes, paginationDetails) {
      //check if the install base id is valid if not then throw resource not found error.
      if (!this.apiHelper.isValidSysId(global.CSMBaseConstants.INSTALL_BASE_ITEM, ibItemSysId))
          return this.apiHelper.resourceNotFound();

      var tableName = this._getExtendedTableName(queryParams, global.CSMBaseConstants.SOLD_PRODUCT);
      var productGr = new GlideRecord(tableName);
      productGr.addJoinQuery(global.CSMBaseConstants.M2M_INSTALLED_PRODUCT).addCondition('install_base_item.sys_id', ibItemSysId);
      //fetch results
      return this._fetchMultipleRecords(productGr, restrictedAttributes, queryParams, paginationDetails, InstallBaseItemAPIConstants.SOLD_PRODUCTS_ARR);
  },
  /*
   * Fetch all the entitlement associated with the given install base item in a pagination window.
   *
   * @param ibItemSysId - Install base item sysId.
   * @param queryParams - filter params and its values.
   * @param restrictedAttributes - restricted fields
   * @param paginationDetails - Object that contains {startFrom,pageSize,lastRecord}
   *
   * @return response object
   *         Incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{entitlement obj1},{entitlement obj2}]"
   *         }
   *
   *         Incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getInstallBaseEntitlements: function(ibItemSysId, queryParams, restrictedAttributes, paginationDetails) {
      //check if the install base id is valid if not then throw resource not found error.
      if (!this.apiHelper.isValidSysId(global.CSMBaseConstants.INSTALL_BASE_ITEM, ibItemSysId))
          return this.apiHelper.resourceNotFound();

      var tableName = this._getExtendedTableName(queryParams, global.CSMBaseConstants.ENTITLEMENT_TABLE);
      var entitlementGr = new GlideRecord(tableName);
      entitlementGr.addQuery("install_base_item.sys_id", ibItemSysId);
      //fetch results
      return this._fetchMultipleRecords(entitlementGr, restrictedAttributes, queryParams, paginationDetails, InstallBaseItemAPIConstants.ENTITLEMENTS_ARR);
  },
  /*
   * Fetch all the cases associated with the given install base item in a pagination window.
   *
   * @param ibItemSysId - Install base item sysId.
   * @param queryParams - filter params and its values.
   * @param restrictedAttributes - restricted fields
   * @param paginationDetails - Object that contains {startFrom,pageSize,lastRecord}
   *
   * @return response object
   *         Incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{case object},{case object}]"
   *         }
   *
   *         Incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getInstallBaseCases: function(ibItemSysId, queryParams, restrictedAttributes, paginationDetails) {
      //check if the install base id is valid if not then throw resource not found error.
      if (!this.apiHelper.isValidSysId(global.CSMBaseConstants.INSTALL_BASE_ITEM, ibItemSysId))
          return this.apiHelper.resourceNotFound();

     var tableName = this._getExtendedTableName(queryParams, global.CSMBaseConstants.CASE_TABLE);
      var caseGr = new GlideRecord(tableName);
      caseGr.addJoinQuery(global.CSMBaseConstants.AFFECTED_INSTALL_BASE_TABLE).addCondition('install_base_item.sys_id', ibItemSysId);
      return this._fetchMultipleRecords(caseGr, restrictedAttributes, queryParams, paginationDetails, InstallBaseItemAPIConstants.CASES_ARR);
  },
  /*
   * Fetch all the contracts associated with the given install base item in a pagination window.
   *
   * @param ibItemSysId - Install base item sysId.
   * @param queryParams - filter params and its values.
   * @param restrictedAttributes - restricted fields
   * @param paginationDetails - Object that contains {startFrom,pageSize,lastRecord}
   *
   * @return response object
   *         Incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{contract object},{contract object}]"
   *         }
   *
   *         Incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getInstallBaseContracts: function(ibItemSysId, queryParams, restrictedAttributes, paginationDetails) {
      //check if the install base id is valid if not then throw resource not found error.
      if (!this.apiHelper.isValidSysId(global.CSMBaseConstants.INSTALL_BASE_ITEM, ibItemSysId))
          return this.apiHelper.resourceNotFound();

      var tableName = this._getExtendedTableName(queryParams, global.CSMBaseConstants.CONTRACT_TABLE);
      var contractGr = new GlideRecord(tableName);
      contractGr.addJoinQuery(global.CSMBaseConstants.M2M_CONTRACT_SOLD_PRODUCT).addCondition('install_base.sys_id', ibItemSysId);
      return this._fetchMultipleRecords(contractGr, restrictedAttributes, queryParams, paginationDetails, InstallBaseItemAPIConstants.CONTRACTS_ARR);
  },
  /*
   * Fetch all the related parties associated with the given install base item in a pagination window.
   *
   * @param ibItemSysId - Install base item sysId.
   * @param queryParams - filter params and its values.
   * @param restrictedAttributes - restricted fields
   * @param paginationDetails - Object that contains {startFrom,pageSize,lastRecord}
   *
   * @return response object
   *         Incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{related party object},{related party object}]"
   *         }
   *
   *         Incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getInstallBaseRelatedParties: function(ibItemSysId, queryParams, restrictedAttributes, paginationDetails) {
      //check if the install base id is valid if not then throw resource not found error.
      if (!this.apiHelper.isValidSysId(global.CSMBaseConstants.INSTALL_BASE_ITEM, ibItemSysId))
          return this.apiHelper.resourceNotFound();

      var tableName = this._getExtendedTableName(queryParams, global.CSMBaseConstants.INSTALL_BASE_RELATED_PARTY);
      var relatedPartyGr = new GlideRecord(tableName);
      relatedPartyGr.addQuery('install_base_item.sys_id', ibItemSysId);
      return this._fetchMultipleRecords(relatedPartyGr, restrictedAttributes, queryParams, paginationDetails, InstallBaseItemAPIConstants.RELATED_PARTIES_ARR);
  },
  /*
   * Fetch all the work orders associated with the given install base item in a pagination window.
   *
   * @param ibItemSysId - Install base item sysId.
   * @param queryParams - filter params and its values.
   * @param restrictedAttributes - restricted fields
   * @param paginationDetails - Object that contains {startFrom,pageSize,lastRecord}
   *
   * @return response object
   *         Incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{work order object},{work order object}]"
   *         }
   *
   *         Incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getInstallBaseWorkOrders: function(ibItemSysId, queryParams, restrictedAttributes, paginationDetails) {
      //check if the install base id is valid if not then throw resource not found error.
      if (!this.apiHelper.isValidSysId(global.CSMBaseConstants.INSTALL_BASE_ITEM, ibItemSysId))
          return this.apiHelper.resourceNotFound();

      var tableName = this._getExtendedTableName(queryParams, InstallBaseItemAPIConstants.WO_TABLE);
      var workOrderGr = new GlideRecord(tableName);
      workOrderGr.addQuery('install_base_item.sys_id', ibItemSysId);
      return this._fetchMultipleRecords(workOrderGr, restrictedAttributes, queryParams, paginationDetails, InstallBaseItemAPIConstants.WORK_ORDERS_ARR);
  },

/*
   * Fetch all the maintenance plans associated with the given install base item in a pagination window.
   *
   * @param ibItemSysId - Install base item sysId.
   * @param queryParams - filter params and its values.
   * @param restrictedAttributes - restricted fields
   * @param paginationDetails - Object that contains {startFrom,pageSize,lastRecord}
   *
   * @return response object
   *         Incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{maintenance plan object},{maintenance plan object}]"
   *         }
   *
   *         Incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  getMaintenancePlansForIB: function(ibItemSysId, queryParams, restrictedAttributes, paginationDetails) {
      //check if the install base id is valid if not then throw resource not found error.
      if (!this.apiHelper.isValidSysId(global.CSMBaseConstants.INSTALL_BASE_ITEM, ibItemSysId))
          return this.apiHelper.resourceNotFound();

      var maintenacePlans = this.apiHelper.getMaintenancePlansForIB(ibItemSysId);
      var tableName = this._getExtendedTableName(queryParams, global.CSMBaseConstants.WORK_PLAN_TABLE);
  	var maintenacePlansGR = new GlideRecord(tableName);
      maintenacePlansGR.addQuery('sys_id', "IN", maintenacePlans);
      return this._fetchMultipleRecords(maintenacePlansGR, restrictedAttributes, queryParams, paginationDetails, InstallBaseItemAPIConstants.MAINTENANCE_PLANS_ARR);
  },

  /*
   * If parent is populated, check for the owners existance.
   * If no owner fields exist, copy the parent's owner fields.
   */
  _verifyOwnerFields: function(paramMap) {
      var fields = new sn_install_base.InstallBaseUtil().getInstallBaseItemOwnerFields();
      var exits = false;
      for (var i = 0; i < fields.length; i++) {
          if (!gs.nil(paramMap[fields[i]])) {
              exits = true;
              break;
          }
      }
      if (!exits) {
          var installBaseGr = new GlideRecord(global.CSMBaseConstants.INSTALL_BASE_ITEM);
          installBaseGr.get(paramMap.parent);
          var ownerFields = new sn_install_base.InstallBaseUtil().getInstallBaseItemOwner(installBaseGr);
          for (var idx = 0; idx < ownerFields.length; idx++) {
              paramMap[ownerFields[idx]] = installBaseGr[ownerFields[idx]];
          }
      }
  },
  /*
   * function to create the install base item
   */
  createInstallBaseItem: function(paramMap) {
      gs.info('Create item called->' + JSON.stringify(paramMap));
      var installBaseGr = null;
      if (!gs.nil(paramMap.sys_class_name))
          installBaseGr = new GlideRecord(paramMap.sys_class_name);
      else
          installBaseGr = new GlideRecord(global.CSMBaseConstants.INSTALL_BASE_ITEM);
      if (!this.apiHelper.canCreate(installBaseGr)) {
          return this.apiHelper.forBiddenMessage(InstallBaseItemAPIConstants.CREATE);
      }
      installBaseGr.initialize();
      installBaseGr.newRecord();
      if (!gs.nil(paramMap.parent)) {
          this._verifyOwnerFields(paramMap);
      }
      var fields = Object.keys(paramMap);
      for (curField = 0; curField < fields.length; curField++) {
  		if(InstallBaseItemAPIConstants.IgnoreTableAttributes.PostAttributes.indexOf(fields[curField]) < 0)
              installBaseGr.setValue(fields[curField], paramMap[fields[curField]]);
      }
      var sys_id = installBaseGr.insert();
      var resp = {};
      if (gs.nil(sys_id)) {
          var msg = InstallBaseItemAPIConstants.API_MESSAGES.REQUEST_CANNOT_BE_PROCESSED;
          return InstallBaseItemAPIHelper.getErrorObject(msg, msg);
      }
      /* if (installBaseGr.root)
           resp["root"] = installBaseGr.root;*/
      resp.status = InstallBaseItemAPIConstants.SUCCESS;
      resp.item = this.apiHelper.getJSONFromGR(installBaseGr, InstallBaseItemAPIConstants.ExcludeTableAttributes.GetInstallBaseRestrictedAttributes());
      return resp;
  },
  /*
   * Fetch the record with selected fields for the given table and sysId.
   *
   * @param tableName - table name
   * @param id - sysId of the gliderecord.
   * @param restrictedAttributes - restricted fields.
   *
   * @return response object
   *         incase of success:
   *         {
   *             "status" : "SUCCESS",
   *             "item" : {object},
   *         }
   *
   *         incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  _fetchRecord: function(tableName, id, restrictedAttributes) {
      try {
          var recordObj = {},
              errorObj = null,
              recordGr = new GlideRecord(tableName);
          if (recordGr.get(id)) {
              var internalGr = recordGr;
              if (recordGr.getTableName() != recordGr.getValue('sys_class_name')) {
                  internalGr = new GlideRecord(recordGr.getValue('sys_class_name'));
                  internalGr.get(recordGr.getValue('sys_id'));
              }
              if (this.apiHelper.canRead(internalGr)) {
                  //invoke API
                  recordObj = this.apiHelper.getJSONFromGR(internalGr, restrictedAttributes);
              } else {
                  errorObj = this.apiHelper.forBiddenMessage(InstallBaseItemAPIConstants.READ);
              }
          } else {
              errorObj = this.apiHelper.resourceNotFound();
          }
      } catch (e) {
          gs.error('[InstallBaseItemAPIDaoSNC][Unexpected error] ' + e);
          errorObj = InstallBaseItemAPIHelper.getErrorObject('Unexpected error' + e);
      }
      var resp = {};
      if (!gs.nil(errorObj)) {
          resp = errorObj;
      } else {
          resp.status = InstallBaseItemAPIConstants.SUCCESS;
          resp.item = recordObj;
      }
      return resp;
  },
  /*
   * fetch the records for the given table with query(filter) parameters.getContentType()
   *
   * @param tableName - table name
   * @param queryParams - query parameters used to filter the glide record.
   * @param restrictedAttributes - restricted fields.
   *
   * @return response object
   *         incase of success,
   *         {
   *             "status" : "SUCCESS",
   *             "start_from" : "<INT>",
   *             "page_size" : "<INT>",
   *             "has_more" : "<BOOLEAN>",
   *             "items" : "[{object1},{Object2}]"
   *         }
   *
   *         incase of failure:
   *         {
   *             "status" : "FAILED",
   *             "errorObj" : {
   *                           "errorCode: "<STRING>",
   *                           "errorMessage": <STRING>,
   *                           "errorDetail": "<STRING>"
   *                          }
   *         }
   */
  _fetchMultipleRecords: function(recordGr, restrictedAttributes, queryParams, paginationDetails, arrayName) {
      return this._fetchMultipleRecordsWithLimitParams(recordGr, restrictedAttributes, queryParams, paginationDetails, arrayName, []);
  },
  _fetchMultipleRecordsWithLimitParams: function(recordGr, restrictedAttributes, queryParams, paginationDetails, arrayName, nonQueryingParams) {
      var items = [],
          curRowCount = 0,
          hasMore = false,
          errorObject = null;
      //add query params


      try {
          if (!gs.nil(queryParams)) {
              var params = Object.keys(queryParams);
              if (params.length > 0)
                  params.forEach(function(field) {
                      if (field != InstallBaseItemAPIConstants.SYSPARM_CONTEXT && (gs.nil(nonQueryingParams) || nonQueryingParams.indexOf(field) < 0))
                          recordGr.addQuery(field, queryParams[field]);
                  });
          }
      } catch (e) {
          return {
              "status": InstallBaseItemAPIConstants.ERROR,
              "errorObject": this.apiHelper.operationCannotBePerformed(InstallBaseItemAPIConstants.OPERATION.READ)
          };
      }
      recordGr.chooseWindow(paginationDetails.startFrom, paginationDetails.lastRecord);
      recordGr.query();
      //iterate
      while (recordGr.next()) {
          //check if you have gone beyond page size and set hasMore to true.
          curRowCount++;
          if (curRowCount > paginationDetails.pageSize) {
              hasMore = true;
              break;
          }
          var internalGr = recordGr;
          var class_name = recordGr.getValue('sys_class_name');
          if (!gs.nil(class_name) && (recordGr.getTableName() != class_name)){
              internalGr = new GlideRecord(recordGr.getValue('sys_class_name'));
              internalGr.get(recordGr.getValue('sys_id'));
          }
          if (this.apiHelper.canRead(internalGr)) {

              items.push(this.apiHelper.getJSONFromGR(internalGr, restrictedAttributes));
          } else {
              errorObject = this.apiHelper.forBiddenMessage(InstallBaseItemAPIConstants.READ);
          }
      }
      var resp = {};
      if (gs.nil(errorObject) || items.length > 0) {
          /*Build response*/
          resp[InstallBaseItemAPIConstants.SYSPARM_OFFSET] = paginationDetails.startFrom.toString();
          resp[InstallBaseItemAPIConstants.SYSPARM_LIMIT] = paginationDetails.pageSize.toString();
          resp.has_more = '' + hasMore;
          resp[arrayName] = items;
          resp.status = InstallBaseItemAPIConstants.SUCCESS;
      } else {
          resp = errorObject;
      }
      return resp;
  },
  /*
   * Get the extended table name if passed in the query params.
   */
  _getExtendedTableName: function(queryParams, tableName) {
      //Get the tablename from the queryParams if provided
      if (!gs.nil(queryParams) && queryParams[InstallBaseItemAPIConstants.CLASS_NAME]) {
          tableName = queryParams[InstallBaseItemAPIConstants.CLASS_NAME];
      }
      return tableName;
  },
  /*
   * Get the install base table name if passed in the query params.
   */
  _getInstallBaseTableName: function(queryParams) {
      var tableName = global.CSMBaseConstants.INSTALL_BASE_ITEM;
      //Get the tablename from the queryParams if provided
      if (!gs.nil(queryParams) && queryParams[InstallBaseItemAPIConstants.CLASS_NAME]) {
          tableName = queryParams[InstallBaseItemAPIConstants.CLASS_NAME];
      }
      return tableName;
  },
  /*
   * Update installbase Item for the given id and fields in the payload.
   */
  updateInstallBaseItem: function(installBaseItemId, payload) {
      var resp = {};
      errorObj = null,
          recordGr = new GlideRecord(payload.sys_class_name);
      if (recordGr.get(installBaseItemId)) {
          if (this.apiHelper.canWrite(recordGr)) {
              var keys = Object.keys(payload);
              for (var i = 0; i < keys.length; i++) {
  				if(InstallBaseItemAPIConstants.IgnoreTableAttributes.PatchAttributes.indexOf(keys[i]) < 0)
                      recordGr.setValue(keys[i], payload[keys[i]]);
              }
              //Update
              if (gs.nil(recordGr.update())) {
                  var msg = InstallBaseItemAPIConstants.API_MESSAGES.REQUEST_CANNOT_BE_PROCESSED;
                  resp = InstallBaseItemAPIHelper.getErrorObject(msg, msg);
              } else {
                  //on update
                  resp.status = InstallBaseItemAPIConstants.SUCCESS;
              }
          } else {
              resp = this.apiHelper.forBiddenMessage(InstallBaseItemAPIConstants.WRITE);
          }
      }
      else {
          msg = InstallBaseItemAPIConstants.API_MESSAGES.RESOURCE_NOT_FOUND;
          return InstallBaseItemAPIHelper.getErrorObject(msg, msg, InstallBaseItemAPIConstants.API_STATUS_CODES.NOT_FOUND);
      }
      resp.item = this.apiHelper.getJSONFromGR(recordGr, InstallBaseItemAPIConstants.ExcludeTableAttributes.GetInstallBaseRestrictedAttributes());
      return resp;
  },

  createRelatedParty: function(payload) {

      var relatedPartyGr = null;
      var resp = {};
      errorObj = null;

      if (!gs.nil(payload.sys_class_name))
          relatedPartyGr = new GlideRecord(payload.sys_class_name);
      else
          relatedPartyGr = new GlideRecord(global.CSMBaseConstants.INSTALL_BASE_RELATED_PARTY);
      if (!this.apiHelper.canCreate(relatedPartyGr)) {
          return this.apiHelper.forBiddenMessage(InstallBaseItemAPIConstants.CREATE);
      }
      relatedPartyGr.initialize();
      relatedPartyGr.newRecord();

      var fields = Object.keys(payload);
      for (curField = 0; curField < fields.length; curField++) {
  		if(InstallBaseItemAPIConstants.IgnoreTableAttributes.PostAttributes.indexOf(fields[curField]) < 0)
              relatedPartyGr.setValue(fields[curField], payload[fields[curField]]);
      }
      var sys_id = relatedPartyGr.insert();

  	if (gs.nil(sys_id)) {
  		var msg = InstallBaseItemAPIConstants.API_MESSAGES.REQUEST_CANNOT_BE_PROCESSED;
  		return InstallBaseItemAPIHelper.getErrorObject(msg, msg);
      }
      resp.status = InstallBaseItemAPIConstants.SUCCESS;
      resp.item = this.apiHelper.getJSONFromGR(relatedPartyGr, InstallBaseItemAPIConstants.ExcludeTableAttributes.GetRelatedPartiesRestrictedAttributes());
      return resp;
  },

  /*
   * Uninstall installbase Item for the given id.
   */
  uninstallInstallBaseItem: function(installBaseItemId, payload) {
      if (!this.apiHelper.isValidSysId(global.CSMBaseConstants.INSTALL_BASE_ITEM, installBaseItemId))
          return this.apiHelper.resourceNotFound();

      var resp = {};
      var recordGr = new GlideRecord(global.CSMBaseConstants.INSTALL_BASE_ITEM);
      if (recordGr.get(installBaseItemId)) {
          if (recordGr.getDisplayValue(InstallBaseItemAPIConstants.FIELD_ACTIVE) == 'false')
              return InstallBaseItemAPIHelper.getErrorObject(InstallBaseItemAPIConstants.API_MESSAGES.MALFORMED_REQUEST, InstallBaseItemAPIConstants.API_MESSAGES.INSTALL_BASE_ALREADY_UNINSTALLED, InstallBaseItemAPIConstants.API_STATUS_CODES.ERROR);
          if (this.apiHelper.canWrite(recordGr)) {
              recordGr.setValue(InstallBaseItemAPIConstants.FIELD_ACTIVE, 'false');
              var keys = Object.keys(payload);
              for (var i = 0; i < keys.length; i++) {
                  recordGr.setValue(keys[i], payload[keys[i]]);
              }
              //Update
              if (gs.nil(recordGr.update())) {
                  resp = this.apiHelper.requestCannotProcess(null, InstallBaseItemAPIConstants.API_MESSAGES.REQUEST_FAILED(InstallBaseItemAPIConstants.OPERATION.UNINSTALL), null);
              } else {
                  //on update
                  resp.status = InstallBaseItemAPIConstants.SUCCESS;
                  resp.item = this.apiHelper.getJSONFromGR(recordGr, InstallBaseItemAPIConstants.ExcludeTableAttributes.GetInstallBaseRestrictedAttributes());
              }
          } else {
              resp = this.apiHelper.forBiddenMessage(InstallBaseItemAPIConstants.WRITE);
          }
      }
      else {
          msg = InstallBaseItemAPIConstants.API_MESSAGES.RESOURCE_NOT_FOUND;
          return InstallBaseItemAPIHelper.getErrorObject(msg, msg, InstallBaseItemAPIConstants.API_STATUS_CODES.NOT_FOUND);
      }
      return resp;
  },

  updateRelatedPartyForIB: function(relatedPartyId, payload) {
      var resp = {};
      errorObj = null;
      var recordGr;
      if (!gs.nil(payload.sys_class_name))
          recordGr = new GlideRecord(payload.sys_class_name);
      else
          recordGr = new GlideRecord(global.CSMBaseConstants.INSTALL_BASE_RELATED_PARTY);
      if (recordGr.get(relatedPartyId)) {
          if (this.apiHelper.canWrite(recordGr)) {
              var keys = Object.keys(payload);
              for (var i = 0; i < keys.length; i++) {
  				if(InstallBaseItemAPIConstants.IgnoreTableAttributes.PatchAttributes.indexOf(keys[i]) < 0)
                      recordGr.setValue(keys[i], payload[keys[i]]);
              }
              //Update
              if (gs.nil(recordGr.update())) {
  	    var msg = InstallBaseItemAPIConstants.API_MESSAGES.REQUEST_CANNOT_BE_PROCESSED;
                  resp = InstallBaseItemAPIHelper.getErrorObject(msg, msg);

              } else {
                  //on update
                  resp.status = InstallBaseItemAPIConstants.SUCCESS;
              }
          } else {
              resp = this.apiHelper.forBiddenMessage(InstallBaseItemAPIConstants.WRITE);
          }
      }
      else {
          msg = InstallBaseItemAPIConstants.API_MESSAGES.RESOURCE_NOT_FOUND;
          return InstallBaseItemAPIHelper.getErrorObject(msg, msg, InstallBaseItemAPIConstants.API_STATUS_CODES.NOT_FOUND);
      }
      resp.item = this.apiHelper.getJSONFromGR(recordGr, InstallBaseItemAPIConstants.ExcludeTableAttributes.GetInstallBaseRestrictedAttributes());
      return resp;
  },


  /*
   * delete related party with the given relatedPartyId
   */
  deleteRelatedParty: function(relatedPartyId) {
  	var resp = {};
  	var RPGR = new GlideRecord(global.CSMBaseConstants.INSTALL_BASE_RELATED_PARTY);
  	if(RPGR.get(relatedPartyId)) {
  		if (this.apiHelper.canDelete(RPGR) && RPGR.deleteRecord()) {
  			resp.status = InstallBaseItemAPIConstants.SUCCESS;
  		} else {
  			resp = this.apiHelper.forBiddenMessage(InstallBaseItemAPIConstants.DELETE);
  		}
  	}
  	else {
  		msg = InstallBaseItemAPIConstants.API_MESSAGES.RESOURCE_NOT_FOUND;
  		return InstallBaseItemAPIHelper.getErrorObject(msg, msg, InstallBaseItemAPIConstants.API_STATUS_CODES.NOT_FOUND);
  	}
  	return resp;
  },
  type: 'InstallBaseItemAPIDaoSNC'
};

Sys ID

f3df3ce523d12110e32f13d1d7bf65d7

Offical Documentation

Official Docs: