- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
on 01-07-2020 04:59 PM
Couple of frequently used script
I have put together couple of frequently used scripts, that may helpful for quick reference
Regex if blocks
This is helpful because no need to worry about the case. Starts with, end with conditions are easy
//reg ex if block
var input_text = "Device: hostname has been repaired and is responding to pings on 10.138.32.1 Event: Device Repaired";
if((/^.*(Event: Device Repaired)+.*/gi).test(input_text)){
//script here
}
//In BR conditions
(/^.*(change_request|sc_req_item)+.*/gi).test(current.getTableName())
GetRowCount
This function helps to write one-liner conditions.
//returns 0 or count of records
if(getRowCount('sys_report', 'title=test') > 0)
{
}
function getRowCount(table_name, encoded_query)
{
gs.info("getRowCount: {0} **** {1} ", table_name, encoded_query);
var count = new GlideAggregate(table_name);
count.addEncodedQuery(encoded_query);
count.addAggregate('COUNT');
count.query();
var result= 0;
if (count.next())
result= count.getAggregate('COUNT');
return result;
}
//script include version
if(this.getRowCount('sys_report', 'title=') > 0)
{
}
getRowCount: function(table_name, encoded_query)
{
gs.info("getRowCount: {0} **** {1} ", table_name, encoded_query);
var count = new GlideAggregate(table_name);
count.addEncodedQuery(encoded_query);
count.addAggregate('COUNT');
count.query();
var result= 0;
if (count.next())
result= count.getAggregate('COUNT');
return result;
},
Ajax JSON
//JSON Ajax - script include
var ProvisionRPAjaxHelper = Class.create();
ProvisionRPAjaxHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getChangeDetails: function() {
var record_sys_id = this.getParameter('sysparm_record_sys_id');
// set the defaults here, so you can return an object no matter what
var results = {
site_id: "",
system_type: ""
};
var gr = new GlideRecord('change_request');
if(gr.get(record_sys_id)) {
results.site_id = gr.u_customer_order.getRefRecord().getValue("u_site_id");
results.system_type = gr.u_customer_order.getRefRecord().getValue("u_system_type");
}
return JSON.stringify(results);
},
type: 'ProvisionRPAjaxHelper'
});
//JSON Ajax - client script
var ga = new GlideAjax('ProvisionRPAjaxHelper');
ga.addParam('sysparm_name', 'getChangeDetails');
ga.addParam('sysparm_record_sys_id', g_form.getParameter("sysparm_change_request"));
ga.getXMLAnswer(function (answer) {
console.log(answer);
var data = JSON.parse(answer);
console.log(data);
g_form.setValue('u_system_type', data.system_type, data.system_type_display_value);
g_form.setReadonly("u_system_type", true);
});
Submit record producer using script
//////////////////////////////////////////////////////////record producer script
var recordProducerId = "08a71eb5db711700e2405bc0cf96199a";
var request_body = {
variables: {
"company" : "f0b14adfdb1c2700e2405bc0cf961981",
"ms_services" : "DM",
"group_name" : "somename",
"approver_primary" : "c833c39c87b7590088e54b0b0e434d41",
"approver_primary_add" : "false",
"approver_backup" : "085d77eb13101380b7435aa12244b042",
"approver_backup_add" : "false",
"comments" : "test",
"description_of_access" : "test",
"job_functions" : "test"
}
};
var catalogItem = new sn_sc.CatItem(recordProducerId);
var variables = request_body.variables || {};
request_body.sysparm_id = recordProducerId;
request_body.sysparm_action = 'execute_producer';
if (!request_body.sysparm_item_guid)
request_body.sysparm_item_guid = gs.generateGUID('');
catalogItem.submitProducer(request_body);
Submit catalog using script
////////////////////////////////////////////////////////buy item / /submit catalog item
//catalog submit script
var request_body = {
sysparm_id: "4a323ce2db503300965b58b3ca9619e9",
sysparm_quantity: '1',
variables: {
aws_account: "1d6699c6dbe03300965b58b3ca96190b",
user: "0a826bf03710200044e0bfc8bcbe5d7a",
iam_user_name: "test"
}
};
var catItem = new sn_sc.CatItem(request_body.sysparm_id)
var cart = new sn_sc.CartJS("cart_" +request_body.sysparm_id);
request_body.sysparm_cart_name = "cart_" +request_body.sysparm_id;
cart.orderNow(request_body);
Triggering the ajax script include from Server side
//triggering the ajax script include from Server side // servicenow ajax script include from serverside
var RequestClass = Class.create();
RequestClass.prototype = {
initialize: function(obj) {
this.obj = obj;
},
getParameter: function(name) {
return this.obj[name];
},
type: 'RequestClass'
};
var request = new RequestClass({"sysparm_service_account_credential_sys_id": "77ae2fce1b4bab40d3e5a9ffbd4bcb33", "sysparm_service_account_id": "737386076713"});
var lib = new AwsMemberAccountsDiscoveryAjax(request);
gs.print(lib.ajaxFunction_triggerMemberAccountsDiscovery());
Some utilities
Workflow scripts
//workflow scripts
//restart workflow and handle the approvals
//var gr = new GlideRecord('sc_req_item');
gr.addEncodedQuery('sys_id=bcaebf881b890c10fb7d311d1e4bcb8a');
gr.query();
gs.info('total ' + gr.getRowCount());
if(gr.next())
{
new Workflow().restartWorkflow(gr,true); //true retains the state of approvals as it is,, false changes the state back to requested
gr.comments='Change request approval not reflected';
gr.update();
}
var gr = new GlideRecord('sc_req_item');
gr.addEncodedQuery('sys_id=7b1765231b83f740163233fccd4bcb12');
gr.query();
gs.info('total ' + gr.getRowCount());
if(gr.next())
{
new Workflow().restartWorkflow(gr,false); //true retains the state of approvals as it is,, false changes the state back to requested
gr.comments='Change request approval not reflected';
gr.update();
}
var workflow = new GlideRecord('wf_context');
workflow.addEncodedQuery('stateINwaiting,executing^id=' + current.sys_id);/*your current record sys -id*/
workflow.setLimit(10);
workflow.query();
while(workflow.next())
{
var wf = new Workflow();
wf.cancelContext(workflow);/*to cancel the workflow*/
gs.log("Cancelling the workflow", "Cancel the workflow of inactive record");
}
//force start a workflow
//Change the gliderecord variable as per need
var gr = new GlideRecord('sc_task');
gr.addEncodedQuery('sys_id=fa94c9371b140054fb7d311d1e4bcb34');
//gr.setLimit(100);
gr.query();
gs.info('total ' + gr.getRowCount());
if(gr.next()) {
var w = new Workflow();
var context = w.startFlow('388a5c6f1bc3b740163233fccd4bcb0c', gr, 'insert', []);
}
Delete journal entry
//to delete journal field (worknotes work_notes or comments), delete in 3 places
https://community.servicenow.com/community?id=community_question&sys_id=beb58321db1cdbc01dcaf3231f9619d6
https://yourinstance.service-now.com/sys_journal_field_list.do?sysparm_query=element_id=sys_id
https://yourinstance.service-now.com/sys_audit_list.do?sysparm_query=documentkey=sys_id
https://yourinstance.service-now.com/sys_history_set_list.do?sysparm_query=id=sys_id
To delete any sensitive information from comments or work notes. In this example, delete entries with value xxxx from the sysapproval_approver table
//delete journal entry
//delete comments or worknotes
var gr=new GlideRecord('sysapproval_approver');
gr.addEncodedQuery("sys_updated_onONLast 3 months@javascript:gs.monthsAgoStart(3)@javascript:gs.endOfThisMonth()^commentsLIKEApprovals no longer required as the ticket is now Closed Complete");
gr.query();
gs.info('total ' + gr.getRowCount());
while(gr.next())
{
gs.info('sys_id ' + gr.sys_id);
var grOUT=new GlideRecord('sys_journal_field');
grOUT.addQuery('element_id', gr.sys_id);
grOUT.addEncodedQuery('value=Approvals no longer required as the ticket is now Closed Complete');
grOUT.orderByDesc('sys_created_on');
grOUT.setLimit(1);
grOUT.query();
if(grOUT.next()){
grOUT.deleteRecord();
}
var sys_history_set = new GlideRecord('sys_history_set');
if(sys_history_set.get(gr.sys_id))
{
sys_history_set.deleteRecord();
}
}
gs.log('total '+gr.getRowCount(), 'Revert');
Generate new number for a record
//number generation
var gr = new GlideRecord('kb_gr');
gr.addQuery('number','kb0010753');
gr.query();
if (gr.next()) {
gr.number = new NumberManager(gr.sys_meta.name).getNextObjNumberPadded();
gs.info("gr.number: " + gr.number);
gr.setWorkflow(false);
//gr.setForceUpdate(true);
gr.update();
gs.info('total ' + gr.getRowCount());
}
Print the duplicates by field
In this example, print duplicate name
//script include get duplicate record by param name
gs.info(getDuplicatesByParam('cmdb_ci_server','name'));
function getDuplicatesByParam(table_name, group_by) {
var dupRecords = [];
var gaDupCheck1 = new GlideAggregate(table_name);
gaDupCheck1.addAggregate('COUNT', group_by);
gaDupCheck1.groupBy(group_by);
gaDupCheck1.addHaving('COUNT', '>', 1);
gaDupCheck1.query();
while (gaDupCheck1.next()) {
dupRecords.push(gaDupCheck1.getValue(group_by));
}
//gs.log(dupRecords, 'getDuplicatesByParam');
return dupRecords.join();
}
Having example
//print the counts
var agg = new GlideAggregate('task_sla');
agg.addEncodedQuery("sys_created_onONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()");
agg.addAggregate('COUNT');
agg.addHaving('COUNT', '>', 100);
agg.groupBy('task');
agg.query();
gs.info('total ' + agg.getRowCount());
while(agg.next())
{
gs.info(agg.task + ' ' + agg.getAggregate('COUNT'));
}
Print all key and values
//print all record producer variables with label
var gr = new GlideRecord('u_service_request');
if (gr.get('b3ccb7708720254088e54b0b0e434d5e')) {
for (key in gr.variables) {
var v = gr.variables[key];
if(v.getGlideObject().getQuestion().getLabel() != '' && v.getDisplayValue() != '') {
gs.info(' ' + v.getGlideObject().getQuestion().getLabel() + " = " + v.getDisplayValue() + "\n");
}
}
}
//print all
var gr = new GlideRecord('table');
if(gr.get('75e1c2af0cdf31405bec5f4d2b3ae45b'))
{
for (var key in gr) {
gs.info(key + ' - ' + gr[key]);
}
}
List collector reference qual
//list collector reference qual ref qual
javascript: 'u_cloud_account=' + current.variables.aws_account;
variable attributes: no_filter,ref_auto_completer=AJAXTableCompleter,ref_qual_elements=aws_account
Add new records and remove records if not present
manageRelation: function(parent_list, child_list, relation_sys_id){
gs.log("parent_list " + parent_list, "CMDBDiscoveryBuildRelation");
gs.log("child_list " + child_list, "CMDBDiscoveryBuildRelation");
var arrayUtil = new ArrayUtil();
//get existing
for(var i = 0; i < parent_list.length; i++){
var parent = parent_list[i];
var current_list = [];
var rel_gr = this.getGlideRecordList("cmdb_rel_ci", "parent=" + parent + "^type=" + relation_sys_id);
while(rel_gr.next()){
current_list.push(rel_gr.getValue('child'));
}
//union
var union = arrayUtil.union(child_list, current_list);
//to be added
var to_be_added = arrayUtil.diff(union, current_list);
gs.log("to_be_added " + to_be_added, "CMDBDiscoveryHelper");
for(j = 0; j < to_be_added.length; j++){
var to_be_added_gr = this.getRecordForInsertorUpdate("cmdb_rel_ci", "parent=" + parent + "^type=" + relation_sys_id + "^child=" + to_be_added[j]);
to_be_added_gr.parent = parent;
to_be_added_gr.type = relation_sys_id;
to_be_added_gr.child = to_be_added[j];
this.handleInsertOrUpdate(to_be_added_gr);
}
//to be removed
var to_be_removed = arrayUtil.diff(union, child_list);
gs.log("to_be_removed " + to_be_removed, "CMDBDiscoveryBuildRelation");
var to_be_removed_gr = this.getGlideRecordList("cmdb_rel_ci", "parent=" + parent + "^type=" + relation_sys_id + "^childIN" + to_be_removed.join());
if(to_be_removed_gr.getRowCount() > 0 && to_be_removed_gr.getRowCount() < 100){
to_be_removed_gr.deleteMultiple();
} else if(to_be_removed_gr.getRowCount() >= 100){
gs.log("Not deleting to_be_removed coz count more than 100. Count: " + to_be_removed.getRowCount(), "CMDBDiscoveryBuildRelation");
}
}
},
Add work notes if not already added
//add work notes if not already added
addWorknotes: function(notes){
var work_notes = current.work_notes.getJournalEntry(1);
var regex = new RegExp('\n'); // searching for the first line break
var work_notes2 = work_notes;
var i = work_notes.search(regex);
if (i>0)
{
// taking everything after the first line break, he-he.
work_notes2 = work_notes.substring(i+1, work_notes.length);
}
gs.log("work_notes2 " + work_notes2, "VMAutomationConnectorLibrary");
if(work_notes2.indexOf(notes) == -1){
//add if not present
current.work_notes = notes;
}
return work_notes2;
},
Table Related
Change parent table
//change parent table
var table = ''; This would be CSE Subcase table
var old_parent = ''; This would be task
var new_parent = ''; This would be u_subcase table
var changer = new GlideTableParentChange(table);
changer.change(old_parent, new_parent);
Promoting a column
//promote a column
GlideDBUtil.promoteColumn('cmdb_ci_linux_server', 'cmdb_ci_server', 'u_byn0_ip_address');
Table creation using script
//table creation script
var gr = new GlideRecord("sys_dictionary");
gr.addEncodedQuery("nameLIKEu_power_supplier_master_data^elementSTARTSWITHu_^active=1^internal_type=string");
gr.setLimit(1);
gr.query();
gs.info('total ' + gr.getRowCount());
while (gr.next())
{
insertField(gr.element.toString());
}
//creating dictionary using scripts
function insertField(u_field_name)
{
gs.include("ImportSetUtil");
//var gr = new ImportSetUtil();
var tableName = "u_master_combined_supplier";
var fieldname = u_field_name;
var fieldType = "String";
var message = "";
var status = "";
var attrs = new Packages.java.util.HashMap();
var dgr2 = new GlideRecord("sys_dictionary");
dgr2.addQuery("name", tableName);
dgr2.addQuery("element", fieldname);
dgr2.query();
if (!dgr2.next()) {
//GlideDBUtil.createElement(tableName, fname, fname, "string", "40", null, true, false);
var ca = new GlideColumnAttributes(fieldname);
ca.setType(fieldType); // type of the field here
ca.setUsePrefix(false);
//ca.setMaxLength(100);
attrs.put(fieldname, ca);
}else
{
message = "Field Name " + fieldname + " already in use! ";
status = 2;
}
if(status != 2) // making sure that field doesnt exist already
{
var tc = new GlideTableCreator(tableName, tableName);
tc.setColumnAttributes(attrs);
tc.setOverrideUpdate(true);
if(tc.update())
{
message = "Field created successfully!"
status = 1;
}
else{
message = "Field not created!"
status = 2;
}
}
}
- 2,348 Views
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Excellent