Add a related list to ALL the CMDB forms for all the different class'

Tim Hannah
Tera Contributor

We have a table that we want to add as a 'related list' on ALL the the different class forms for the CMDB (eg cmdb_ci_alert_group, cmdb_ci_app_server etc) as it relates to all of them.

I have tried adding it to the CMDB with the hope it would push down to all the tables that inherit from there but it still doesn't appear on all.

Can this be scripted?

 

5 REPLIES 5

andymcdonald
Kilo Guru

Thanks for posting this, it saved me a lot of tedious work.  As requested, I am posting my updated version below:

addRelatedList();
function addRelatedList(){
	var tables = [*** your tables here ***];
	
	var entryToAdd = "cmdb_rel_group.ci";
	var expected = tables.length;
	var count = 0;
	for (var i = 0; i < tables.length; i++){
		var relatedListId = null;
		var rl = new GlideRecord("sys_ui_related_list");
		rl.addEncodedQuery("name=" + tables[i] + "^view=" + "Default view");
		rl.query();
		if (!rl.hasNext()){
			// add a new related list
			var newRelList = new GlideRecord("sys_ui_related_list");
			newRelList.newRecord();
			newRelList.name = tables[i];
			newRelList.view = "Default view";
			relatedListId = newRelList.insert();
		}else{
			rl.next();
			relatedListId = rl.getUniqueValue();
		}
		if (relatedListId){
			var rle = new GlideRecord("sys_ui_related_list_entry");
			rle.addEncodedQuery("list_id=" + relatedListId + "^related_list=" + entryToAdd);
			rle.query();
			if (!rle.hasNext()){
				var newPos = 0;
				rle = new GlideRecord("sys_ui_related_list_entry");
				rle.addEncodedQuery("list_id=" + relatedListId);
				rle.orderByDesc("position");
				rle.setLimit(1);
				rle.query();
				if (rle.next()){
					newPos = parseInt(rle.getValue("position")) + 1;
				}
				rle = new GlideRecord("sys_ui_related_list_entry");
				rle.newRecord();
				rle.list_id = relatedListId;
				rle.related_list = entryToAdd;
				rle.position = newPos;
				rle.insert();
				count++;
			}
		}
	}
	gs.print("DONE - added " + count + " entries for " + expected + " tables");	
}