Name

x_snc_codesanity.HtmlRenderCodingGuideline

Description

Renders detailed descriptions of all checks contained in the CodeSanity suite so that they can be integrated into a Coding Guideline document.

Script

function HtmlRenderCodingGuideline()
{
  var GetStringValue = x_snc_devtools.GetStringValue;
  var IsValidRecord = x_snc_devtools.IsValidRecord;
  var HtmlRenderLink = x_snc_devtools.HtmlRenderLink;
  var GetRecord = x_snc_devtools.GetRecord;
  var GetKeys = x_snc_devtools.GetKeys;
  var GetValue = x_snc_devtools.GetValue;
  var GetArrayValue = x_snc_devtools.GetArrayValue;
  var Clone = x_snc_devtools.Clone;
  var GetBoolValue = x_snc_devtools.GetBoolValue;
  var GetAppRecord = x_snc_devtools.GetAppRecord;

  
  var grSuite = GetScanSuiteRecord();
  if (IsValidRecord(grSuite) == false)
  {
  	return 'Suite not found!';
  }
  var strSuiteSysId = GetStringValue(grSuite.sys_id);
  
  var rules = GetExecutionRules();
  
  
  
  function HtmlRenderCodingGuidelineCheck(grCheck)
  {
  	var IsValidRecord = x_snc_devtools.IsValidRecord;
  	var GetStringValue = x_snc_devtools.GetStringValue;
  	var HtmlRenderLink = x_snc_devtools.HtmlRenderLink;
  	var HtmlEncode = x_snc_devtools.HtmlEncode;

  	if (IsValidRecord(grCheck) == false)
  	{
  		return false;
  	}
  	var strHtml = '';

  	var rulesForCheck = GetExecutionRulesForCheckByRules(grCheck,rules);
  	if (GetBoolValue(GetValue(rulesForCheck,'all')) == true)
  	{
  		// if a check is blacklisted for all, we don't show it.
  		return '';
  	}	
  	
  	strHtml += '<h3>' + grCheck.short_description + '</h3>';
  	var aBlacklistScopes = GetArrayValue(GetValue(rulesForCheck,'blacklist','scopes'));
  	if (aBlacklistScopes.length > 0)
  	{
  		strHtml += '<p>This does NOT apply to the following application(s): ';
  		for (var nScope = 0; nScope < aBlacklistScopes.length; nScope++)
  		{
  			if (nScope > 0)
  			{
  				strHtml += ', ';
  			}
  			var strApp = aBlacklistScopes[nScope];
  			var grApp = GetAppRecord(strApp);
  			if (IsValidRecord(grApp) == true)
  			{
  				strApp = GetStringValue(grApp.name);
  			}
  			strHtml += strApp;
  		}
  	}
  	
  	var aWhitelistScopes = GetArrayValue(GetValue(rulesForCheck,'whitelist','scopes'));
  	if (aWhitelistScopes.length > 0)
  	{
  		strHtml += '<p>This ONLY applies to the following application(s): ';
  		for (var nScope = 0; nScope < aWhitelistScopes.length; nScope++)
  		{
  			if (nScope > 0)
  			{
  				strHtml += ', ';
  			}
  			var strApp = aWhitelistScopes[nScope];
  			var grApp = GetAppRecord(strApp);
  			if (IsValidRecord(grApp) == true)
  			{
  				strApp = GetStringValue(grApp.name);
  			}
  			strHtml += strApp;
  		}
  	}
  		
  
  	strHtml += '<p>' + HtmlEncode(grCheck.description) + '</p>';
  	strHtml += '<p>' + HtmlEncode(grCheck.resolution_details) + '</p>';
  	
  	var strDocUrl = GetStringValue(grCheck.documentation_url);
  	if (strDocUrl != '')
  	{
  		strHtml += '<p>Further reading:<br/>' + HtmlRenderLink(strDocUrl,strDocUrl,true) + '</p>'; 
  	}
  	strHtml += '<p>Instance Scan check:&#160;' + HtmlRenderLink('/scan_check.do?sys_id='+grCheck.sys_id, grCheck.name,true) + '</p>'; 
  	return strHtml;
  }
  
  

  var strHtml = '';
  
  // General rules
  var grSSC = new GlideRecord('scan_check_suite_check');
  grSSC.addQuery('suite','=',strSuiteSysId);
  grSSC.addQuery('check.sys_class_name','=','scan_linter_check');
  grSSC.addQuery('check.active','=','true');
  grSSC.orderBy('check.short_description');
  grSSC.query();
  if (grSSC.getRowCount() > 0)
  {
  	strHtml += '<h2>General rules</h2>';
  	while (grSSC.next())
  	{
  		var grCheck = GetRecord('scan_check',grSSC.check);
  		strHtml += HtmlRenderCodingGuidelineCheck(grCheck);
  	}
  }
  
  
  // Specific rules for tables
  var grSSC = new GlideRecord('scan_check_suite_check');
  grSSC.addQuery('suite','=',strSuiteSysId);
  grSSC.addQuery('check.sys_class_name','=','scan_table_check');
  grSSC.addQuery('check.active','=','true');
  grSSC.orderBy('check.table'); // doesn't work
  grSSC.query();
  
  var table_checks = {};
  
  if (grSSC.getRowCount() > 0)
  {
  	while (grSSC.next())
  	{
  		var strTable = GetStringValue(grSSC.check.table);
  		var aChecks = GetArrayValue(GetValue(table_checks,strTable));
  		aChecks.push(GetRecord('scan_table_check',grSSC.check));
  		table_checks[strTable] = aChecks;
  	}
  }
  
  var aTables = GetKeys(table_checks);
  aTables = aTables.sort();
  for (var nTable = 0; nTable < aTables.length; nTable++)
  {
  	var strTable = aTables[nTable];
  	strHtml += '<h2>Specific rules for records in '+strTable+'</h2>';
  	var aChecks = GetArrayValue(GetValue(table_checks,strTable));
  	for (var nCheck = 0; nCheck < aChecks.length; nCheck++)
  	{
  		var grCheck = aChecks[nCheck];
  		//strHtml += x_snc_devtools.RenderValue(grCheck);
  		strHtml += HtmlRenderCodingGuidelineCheck(grCheck);
  	}
  }

  // Specific rules for columns
  var grSSC = new GlideRecord('scan_check_suite_check');
  grSSC.addQuery('suite','=',strSuiteSysId);
  grSSC.addQuery('check.sys_class_name','=','scan_column_type_check');
  grSSC.addQuery('check.active','=','true');
  grSSC.query();
  
  var column_type_checks = {};
  
  if (grSSC.getRowCount() > 0)
  {
  	while (grSSC.next())
  	{
  		var strColumnType = GetStringValue(grSSC.check.column_type);
  		var aChecks = GetArrayValue(GetValue(column_type_checks,strColumnType));
  		aChecks.push(GetRecord('scan_column_type_check',grSSC.check));
  		column_type_checks[strColumnType] = aChecks;
  	}
  }
  
  var aColumnTypes = GetKeys(column_type_checks);
  aColumnTypes = aColumnTypes.sort();
  for (var nColumnType = 0; nColumnType < aColumnTypes.length; nColumnType++)
  {
  	var strColumnType = aColumnTypes[nColumnType];
  	strHtml += '<h2>Specific rules for '+strColumnType+' fields</h2>';
  	var aChecks = GetArrayValue(GetValue(column_type_checks,strColumnType));
  	for (var nCheck = 0; nCheck < aChecks.length; nCheck++)
  	{
  		var grCheck = aChecks[nCheck];
  		strHtml += HtmlRenderCodingGuidelineCheck(grCheck);
  	}
  }
  
  
  
  return strHtml;
}

Sys ID

76dcff12dbf411109232dad1f3961902

Offical Documentation

Official Docs: