Copy Tags from INC to INC Task

Russell Abbott
Kilo Sage

I have a requirement to copy tags from an INC to an INC Task. I'm able to get that part working. What I can't seem to get working is when I delete a tag from the INC, have it delete from the INC Task also. Here's the current working code, I've messed around with more code to test the deletion part but can't get it to work.

 

(function executeRule(current, previous /*null when async*/) {
	var grINCTask = new GlideRecord('incident_task');
	grINCTask.addQuery('incident',current.table_key);
	grINCTask.query();
	while(grINCTask.next()){
		var grLabelINCTask = new GlideRecord('label_entry');
		grLabelINCTask.initialize();
		grLabelINCTask.table_key = grINCTask.sys_id;
		grLabelINCTask.table = grINCTask.sys_class.name;
		grLabelINCTask.label = current.label;
		grLabelINCTask.read = current.read;
		grLabelINCTask.title = grINCTask.sys_class.name + "-" + grINCTask.number;
		grLabelINCTask.insert();
	}
})(current, previous);
1 ACCEPTED SOLUTION

Brad Bowman
Kilo Patron
Kilo Patron

Hi Russell,

Run this Business Rule on the label_entry table after Insert and Delete, and it will work like a dream.

(function executeRule(current, previous /*null when async*/) {
	var operation = current.operation();
	var grINCTask = new GlideRecord('incident_task');
	grINCTask.addQuery('incident',current.table_key);
	grINCTask.query();
	while(grINCTask.next()){
		var grLabelINCTask = new GlideRecord('label_entry');
		if (operation == 'insert') {
			grLabelINCTask.initialize();
			grLabelINCTask.table_key = grINCTask.sys_id;
			grLabelINCTask.table = grINCTask.sys_class.name;
			grLabelINCTask.label = current.label;
			grLabelINCTask.read = current.read;
			grLabelINCTask.title = grINCTask.sys_class.name + "-" + grINCTask.number;
			grLabelINCTask.insert();
		}
		if (operation == 'delete') {
			grLabelINCTask.addQuery('table_key', grINCTask.sys_id);
			grLabelINCTask.addQuery('label', current.label);
			grLabelINCTask.query();
			if (grLabelINCTask.next()) {
				grLabelINCTask.deleteRecord();
			}
		}
	}
})(current, previous);

 

View solution in original post

8 REPLIES 8

4b0d3
Giga Guru

 

You could just update the record, though that'd be a lil messy.
deleting the tag on the inc.
var del = new GlideRecord('label_entry');

del.addQuery('table','incident');

del.addQuery('table_key', <var or dotwalk containing incident sys_id>);

del.deleteMultiple();

Brad Bowman
Kilo Patron
Kilo Patron

Hi Russell,

Run this Business Rule on the label_entry table after Insert and Delete, and it will work like a dream.

(function executeRule(current, previous /*null when async*/) {
	var operation = current.operation();
	var grINCTask = new GlideRecord('incident_task');
	grINCTask.addQuery('incident',current.table_key);
	grINCTask.query();
	while(grINCTask.next()){
		var grLabelINCTask = new GlideRecord('label_entry');
		if (operation == 'insert') {
			grLabelINCTask.initialize();
			grLabelINCTask.table_key = grINCTask.sys_id;
			grLabelINCTask.table = grINCTask.sys_class.name;
			grLabelINCTask.label = current.label;
			grLabelINCTask.read = current.read;
			grLabelINCTask.title = grINCTask.sys_class.name + "-" + grINCTask.number;
			grLabelINCTask.insert();
		}
		if (operation == 'delete') {
			grLabelINCTask.addQuery('table_key', grINCTask.sys_id);
			grLabelINCTask.addQuery('label', current.label);
			grLabelINCTask.query();
			if (grLabelINCTask.next()) {
				grLabelINCTask.deleteRecord();
			}
		}
	}
})(current, previous);

 

This works great! Thank you. It also works from a list view. Bonus.

I do have a follow up. The requirement is asking that as well as Tags being populated from the Parent to the Child (Incident to Incident Task),  can we also populate from Child to Parent (Incident Task to Incident).

Is that even possible?

 

I appreciate your time!

Child's play.

(function executeRule(current, previous /*null when async*/) {
	var operation = current.operation();
	var grINCTask = new GlideRecord('incident_task');
	grINCTask.addQuery('incident',current.table_key);
	grINCTask.query();
	while(grINCTask.next()){
		var grLabelINCTask = new GlideRecord('label_entry');
		if (operation == 'insert') {
			grLabelINCTask.initialize();
			grLabelINCTask.table_key = grINCTask.sys_id;
			grLabelINCTask.table = grINCTask.sys_class.name;
			grLabelINCTask.label = current.label;
			grLabelINCTask.read = current.read;
			grLabelINCTask.title = grINCTask.sys_class.name + "-" + grINCTask.number;
			grLabelINCTask.insert();
		}
		if (operation == 'delete') {
			grLabelINCTask.addQuery('table_key', grINCTask.sys_id);
			grLabelINCTask.addQuery('label', current.label);
			grLabelINCTask.query();
			if (grLabelINCTask.next()) {
				grLabelINCTask.deleteRecord();
			}
		}
	}
	var grINCTask2 = new GlideRecord('incident_task');
	grINCTask2.addQuery('sys_id',current.table_key);
	grINCTask2.query();
	if (grINCTask2.next()){
		var grLabelINCTask2 = new GlideRecord('label_entry');
		if (operation == 'insert') {
			grLabelINCTask2.initialize();
			grLabelINCTask2.table_key = grINCTask2.incident;
			grLabelINCTask2.table = 'incident';
			grLabelINCTask2.label = current.label;
			grLabelINCTask2.read = current.read;
			grLabelINCTask2.title = 'incident-' + grINCTask2.incident.number;
			grLabelINCTask2.insert();
		}
		if (operation == 'delete') {
			grLabelINCTask2.addQuery('table_key', grINCTask2.incident);
			grLabelINCTask2.addQuery('label', current.label);
			grLabelINCTask2.query();
			if (grLabelINCTask2.next()) {
				grLabelINCTask2.deleteRecord();
			}
		}
	}
})(current, previous);