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