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: ' + 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