Last active
November 26, 2018 16:40
-
-
Save jacebenson/f95536fe8d0da24319bf2e5beadff39d to your computer and use it in GitHub Desktop.
Business rule to create links where other records are typed in
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*Business Rule: Automagically Link*/ | |
/*Table: sys_journal_field*/ | |
/*When: After*/ | |
/*Order: 100*/ | |
/*Insert: true*/ | |
/*Update: true*/ | |
/*jslint sloppy: true, vars: true*/ | |
/*global GlideRecord, current, paddAndLinkRefs*/ | |
function onAfter(current, previous) { | |
//This function will be automatically called when this rule is processed. | |
//if dict.type is journal... rewrite teh notes | |
var dict = new GlideRecord('sys_dictionary'); | |
var dictQuery = 'internal_type=journal^ORinternal_type=journal_input'; | |
dictQuery += '^name=' + current.name + '^element=' + current.element; | |
dict.addEncodedQuery(dictQuery); | |
dict.query(); | |
while (dict.next()) { | |
var newValue = paddAndLinkRefs(current.value); | |
current.value = newValue; //update audit record | |
current.setWorkflow(false); | |
current.autoSysFields(false); | |
current.update(); | |
var audit = new GlideRecord('sys_audit'); | |
var auditQuery = 'documentkey=' + current.element_id; | |
auditQuery += '^fieldname=' + current.element + '^ORDERBYDESCrecord_checkpoint' | |
audit.addEncodedQuery(auditQuery); | |
audit.query(); | |
if (audit.next()) { | |
audit.newvalue = newValue; | |
audit.setWorkflow(false); | |
audit.autoSysFields(false); | |
audit.update(); | |
} | |
} | |
} | |
function paddAndLinkRefs(text) { | |
//below finds http links | |
var httpregex = /(https?://[^s]+)/gi; | |
var httpsubst = '[code]<a href="$1" target="_blank" rel="noopener">$1</a>[/code]'; | |
// The substituted value will be contained in the result variable | |
text = text.replace(httpregex, httpsubst); | |
//above finds http links | |
//below finds links to records based on numbers | |
var num = new GlideRecord('sys_number'); | |
var numQuery = 'category!=sc_ic_task_defn_staging'; | |
numQuery += '^category!=task'; | |
numQuery += '^category!=ts_index_name'; | |
num.addEncodedQuery(); | |
num.query(); | |
var tables = []; | |
while (num.next()) { | |
tables.push({ | |
'name': num.category.toString(), | |
'prefix': num.prefix.toString(), | |
'digits': num.maximum_digits.toString() | |
}); | |
} | |
for (var x = 0; x < tables.length; x = x + 1) { | |
var table = tables[x].name; | |
var prefix = tables[x].prefix; | |
var digits = parseInt(tables[x].digits, 10); | |
var re = new RegExp("(\s|^)(" + prefix + ")(\d+)", "gi"); //find | |
text = text.replace(re, function(m) { | |
var result = ""; | |
var copy = m.toUpperCase(); | |
var number = copy.split(prefix)[1]; | |
var space = copy.split(prefix)[0]; | |
while (number.length < digits) { | |
number = "0" + number; | |
} | |
var recordnumber = prefix + number; | |
var test = new GlideRecord(table); | |
var numberField = 'number'; //define number field by default to 'number' | |
if (test.isValidField('u_number')) { //test if 'u_number' is valid | |
numberField = 'u_number'; //if it is, assume its the number field to use | |
} | |
if (test.get(numberField, recordnumber)) { | |
result += space; | |
result += "[code]"; | |
result += '<a style="text-decoration: underline; color: #0000ff;" href="'; | |
result += table + '.do?sysparm_query=' + numberField + '=' + recordnumber; | |
result += '" target="_blank" rel="noopener" data-mce-href="' + table; | |
result += '.do?sysparm_query=' + numberField + '=' + recordnumber; | |
result += '" data-mce-style="text-decoration: underline; color: #0000ff;">"'; | |
result += recordnumber + "</a>[/code]"; | |
} else { | |
result = m; | |
} | |
return result; | |
}); | |
} | |
return text; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment