Mahesh Mani
Tera Contributor

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;

		}
	}

}

 

 

 

 

 

 

 

 

 

 

 

 

Comments
sukran
Mega Sage

Excellent

Version history
Last update:
‎01-07-2020 04:59 PM
Updated by: