Name

sn_grc.ItemInheritanceAPI

Description

No description available

Script

var ItemInheritanceAPI = Class.create();
ItemInheritanceAPI.prototype = {
  initialize: function() {},
  validateRequestForGetItem: function(inputParams) {
      var requestDetails = {
          isValidRequest: true,
          reason: ""
      };

      // Validate the mandatory fields
      var validationResults = this._hasMandatoryFieldsForGetItem(inputParams);
      if (!validationResults.isValid) {
          requestDetails["isValidRequest"] = validationResults.isValid;
          requestDetails["reason"] = validationResults.reason;
          return requestDetails;
      }
      //Validate if the entityId exists
      var grEntity = new GlideRecord("sn_grc_profile");
      if (!grEntity.get(inputParams.entityId)) {
          requestDetails["isValidRequest"] = false;
          requestDetails["reason"] = gs.getMessage("The entity record does not exist");
          return requestDetails;
      }

      //Validate if the contentId exists
      var grContent = new GlideRecord("sn_grc_content");
      if (!grContent.get(inputParams.contentId)) {
          requestDetails["isValidRequest"] = false;
          requestDetails["reason"] = gs.getMessage("The content record does not exist");
          return requestDetails;
      }
      return requestDetails;

  },

  validateRequestForGetItems: function(inputParams) {
      var requestDetails = {
          isValidRequest: true,
          reason: ""
      };

      // Validate the mandatory fields
      var validationResults = this._hasMandatoryFieldsForGetItems(inputParams);
      if (!validationResults.isValid) {
          requestDetails["isValidRequest"] = validationResults.isValid;
          requestDetails["reason"] = validationResults.reason;
          return requestDetails;
      }
      //Validate if the entityId exists
      var grEntity = new GlideRecord("sn_grc_profile");
      if (!grEntity.get(inputParams.entityId)) {
          requestDetails["isValidRequest"] = false;
          requestDetails["reason"] = gs.getMessage("The entity record does not exist");
          return requestDetails;
      }

      //Validate if item type is allowed
      var allowedItemTypes = ["Control", "Risk", "Control/Risk"];
      if (!allowedItemTypes.join(',').contains(inputParams.itemType)) {
          requestDetails["isValidRequest"] = false;
          requestDetails["reason"] = gs.getMessage("The item type is not allowed. Allowed item types are {0}", allowedItemTypes.join(', '));
          return requestDetails;
      }
      //Validate if records for the item type exist
      if (inputParams.itemType === 'Control') {
          if (!gs.tableExists('sn_compliance_control')) {
              requestDetails["isValidRequest"] = false;
              requestDetails["reason"] = gs.getMessage("Control records do not exist");
              return requestDetails;
          }
      } else if (inputParams.itemType === 'Risk') {
          if (!gs.tableExists('sn_risk_risk')) {
              requestDetails["isValidRequest"] = false;
              requestDetails["reason"] = gs.getMessage("Risk records do not exist");
              return requestDetails;
          }
      }

      return requestDetails;

  },

  _hasMandatoryFieldsForGetItem: function(inputParams) {
      var results = {
          isValid: true,
          reason: ""
      };

      if (inputParams && (!inputParams.entityId || !inputParams.contentId)) {
          results["isValid"] = false;
          results["reason"] = gs.getMessage("To fetch control/risk associated to an entity, both entity and content fields are required.");
      }

      return results;
  },

  _hasMandatoryFieldsForGetItems: function(inputParams) {
      var results = {
          isValid: true,
          reason: ""
      };

      if (inputParams && (!inputParams.entityId || !inputParams.itemType)) {
          results["isValid"] = false;
          results["reason"] = gs.getMessage("To fetch controls/risks associated to an entity, both entity and item type fields are required.");
      }

      return results;
  },

  getItemForReliantEntity: function(inputParams) {
      var response = {
          statusCode: 400,
          status: "error",
          message: ""
      };
      var requestDetails = this.validateRequestForGetItem(inputParams);
      if (!requestDetails.isValidRequest) {
          response["message"] = requestDetails.reason;
          return response;
      }

      var entityId = inputParams.entityId;
      var contentId = inputParams.contentId;

      var itemId = new sn_grc.ItemInheritance().getItemForReliantEntity(entityId, contentId);
      if (gs.nil(itemId)) {
          response["statusCode"] = 204;
          response["status"] = "success";
          response["message"] = gs.getMessage("No item was found associated to the entity");
          return response;
      }
      response["statusCode"] = 200;
      response["status"] = "success";
      response["message"] = gs.getMessage("Successfully returned item ID");
      response["itemId"] = itemId;
      return response;

  },

  getItemsForReliantEntity: function(inputParams) {
      var response = {
          statusCode: 400,
          status: "error",
          message: ""
      };
      var requestDetails = this.validateRequestForGetItems(inputParams);
      if (!requestDetails.isValidRequest) {
          response["message"] = requestDetails.reason;
          return response;
      }

      var entityId = inputParams.entityId;
      var itemType = inputParams.itemType;
      var itemIds = new sn_grc.ItemInheritance().getItemsForReliantEntity(entityId, itemType);
      if (itemIds.length == 0) {
          response["statusCode"] = 204;
          response["status"] = "success";
          response["message"] = gs.getMessage("No items are associated to the reliant entity");
          return response;
      }
      response["statusCode"] = 200;
      response["status"] = "success";
      response["message"] = gs.getMessage("Successfully returned item IDs");
      response["itemIds"] = itemIds.join(',');
      return response;
  },

  type: 'ItemInheritanceAPI'
};

Sys ID

0b22b7ec775e111063533b53fe5a9929

Offical Documentation

Official Docs: