Name

sn_risk.RiskGeneratorStrategyBase

Description

NOTE This script include is deprecated, please use RiskGeneratorV2StrategyBase instead Generates risks when relationships between profiles, profile types, risk frameworks, and risk statements are made

Script

var RiskGeneratorStrategyBase = Class.create();
RiskGeneratorStrategyBase.prototype = Object.extend(new sn_grc.GRCAbstractGeneratorStrategy(),{
  itemTable: 'sn_risk_risk',

  getContentTable: function() {
  	return "sn_risk_definition";
  },

  getDocToProfileTypeTable: function() {
  	return "sn_risk_m2m_framework_profile_type";
  },

  getContentToProfileTypeTable: function() {
  	return "sn_risk_m2m_risk_definition_profile_type";
  },

  linksDocToProfileType: function(m2mDocumentToProfileType, operation) {
  	var processingRecords = false;
  	var content = new GlideRecord('sn_risk_definition');
  	content.addQuery("document", m2mDocumentToProfileType.sn_grc_document);
  	content.addActiveQuery();
  	content.query();
  	while(content.next()) {
  		if(operation == 'generate')
  			this.generateLinksContentToProfileType(m2mDocumentToProfileType.sn_grc_document, content.sys_id, m2mDocumentToProfileType.sn_grc_profile_type);		
  		else if(operation == 'delete')
  			if(this.deleteLinksContentToProfileType(m2mDocumentToProfileType.sn_grc_document, content.sys_id, m2mDocumentToProfileType.sn_grc_profile_type))
  				processingRecords = true;
  	}
  	if(operation == 'delete')
  		return processingRecords;
  	return true;
  },
  												
  generateLinksContentToProfileType: function(documentId, statementId, profileTypeId, useWorkflow) {
  	useWorkflow = useWorkflow === undefined ? true : false;
  	
      var contentToProfileType = new GlideRecord("sn_risk_m2m_risk_definition_profile_type");
      contentToProfileType.addQuery("statement", statementId);
      contentToProfileType.addQuery("sn_grc_profile_type", profileTypeId);
      contentToProfileType.query();
      
  	if(contentToProfileType.next()) {
  		contentToProfileType.created_one_off = false;
  		contentToProfileType.update();
  	}
  	else {
  		contentToProfileType.statement = statementId;
  		contentToProfileType.sn_grc_profile_type = profileTypeId;
  		contentToProfileType.created_one_off = false;
  		contentToProfileType.insert();
  	}
  },
  
  deleteLinksContentToProfileType: function(documentId, statementId, profileTypeId, useWorkflow) {
  	useWorkflow = useWorkflow === undefined ? true : false;
  	
      var contentToProfileType = new GlideRecord("sn_risk_m2m_risk_definition_profile_type");
      contentToProfileType.addQuery("statement", statementId);
      contentToProfileType.addQuery("sn_grc_profile_type", profileTypeId);
      contentToProfileType.query();

  	contentToProfileType.next();            
  	var statement = new GlideRecord("sn_risk_definition");
  	statement.get(statementId);

  	// If statement is inactive delete all links
  	if(contentToProfileType.created_one_off == false || statement.active == false) {
  		contentToProfileType.setWorkflow(useWorkflow);
  		contentToProfileType.deleteRecord();
  		return true;
  	}

  	return false;
  },

  getStatementIds: function(frameworkId) {
  	var statementIds = [];
  	
  	var statements = new GlideRecord('sn_risk_definition');
  	statements.addQuery('document', frameworkId);
  	statements.addActiveQuery();
  	statements.query();
  	
  	while(statements.next())
  		statementIds.push(statements.getUniqueValue());
  	return statementIds;
  },
  
  getItemsForDoc: function(frameworkId) {
  	var risk = new GlideRecord('sn_risk_risk');
  	risk.addQuery('content.document', frameworkId);
  	risk.addActiveQuery();
  	risk.query();
  	
  	return risk;
  },
  
  deleteRecords: function(gr, useWorkflow) {
  	useWorkflow = useWorkflow === undefined ? true : false;
  	gr.setWorkflow(useWorkflow);
      gr.deleteMultiple();
  },
  
  updateContents: function(frameworkId, active) {
  	var statement = new GlideRecord('sn_risk_definition');
  	statement.addQuery('document', frameworkId);
  	statement.query();

  	while(statement.next()) {
  		statement.active = active;
  		statement.update();
  	}				
  },
  
  getDocumentsIds: function(content) {
  	var documentIds = [];
  	documentIds.push(content.document + '');
  	return documentIds;
  },
  
  _setSpecificContentFields: function (content, grItem) {
  	if(grItem.description == '')
  		grItem.description = content.description;
  },

  _setSpecificDocumentFields: function (document, grItem) {
  	grItem.state = 'draft';
  },
  
  _canCreateItems: function(statementId) {
  	return true;
  },
  
  _recordCanCreateItems: function(statement) {
  	return true;
  },

  type: 'RiskGeneratorStrategyBase'
});

Sys ID

40c939532f3202007eaf77cfb18c9571

Offical Documentation

Official Docs: