Filter the Service Offering field based on Parent (Service) and Auto populate Service field

ss123
Tera Contributor

Hi everyone!

 

I need a help on this requirement. We are customizing the Private Task form [vtb_task] and we have created two new fields "Technical Service" and "Technical Service Offering".

 

  • "Technical Service" is a reference field , referencing "Technical Service" table
  • "Technical Service Offering" is a reference field , referencing "Service Offering" table

 

The first requirement is when a "Technical Service" is first selected, the "Technical Service Offering" list will be filtered based on the "Parent" field which is the selected "Technical Service"

 

The second requirement is when a "Technical Service Offering" is first selected, the "Technical Service" is Auto Populated based on "Parent" ("Technical Service")  field of the selected "Technical Service Offering"

 

I am having a hard time finding the solution for this even though I have created several scripts. I've created a Script Include, Client Scripts and also added reference qualifiers, but NO Luck. 

 

Would appreciate if you can help me on this. Thank you!

SabrinaSalazar_0-1668478597756.png

 

1 ACCEPTED SOLUTION

Hi @ss123,

Try this updated scripts for auto populates - 

 

Client Script: BM - Autopopulate Technical Service

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
	if (isLoading || newValue === '') {
		return;
	}
	var sc = g_form.getValue('x_bmk_technology_s_u_service_offering');

	var ga = new GlideAjax('x_bmk_technology_s.technicalServiceOffering');
	ga.addParam('sysparm_name', 'getServDetails');
	ga.addParam('sysparm_servId', g_form.getValue('x_bmk_technology_s_u_service_offering'));
	ga.getXMLAnswer(getResponse);

	function getResponse(response) {
		var res = JSON.parse(response);
		g_form.setValue('x_bmk_technology_s_u_technical_service_private_task', res.x_bmk_technology_s_u_technical_service_private_task);

	}
}

 

Script Includes

Name: technicalServiceOffering

Client callable - true

var technicalServiceOffering = Class.create();
technicalServiceOffering.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

	getServDetails: function() {
		//gs.addInfoMessage('script include triggered');

		var servId = this.getParameter('sysparm_servId');
		//gs.addInfoMessage('service scr--' + servId);
		obj = {};

		var gServOffering = new GlideRecord('service_offering');
		if (gServOffering.get(servId)) {
			obj.x_bmk_technology_s_u_technical_service_private_task = gServOffering.getValue('parent');
		}
		//gs.addInfoMessage(obj+JSON.stringify(obj));
		return JSON.stringify(obj);
	},

	type: 'technicalServiceOffering'
});

 

Reference qualifier - 

javascript:"parent="+current. x_bmk_technology_s_u_service_offering;

 

Thanks,
Sagar Pagar

The world works with ServiceNow

View solution in original post

11 REPLIES 11

Sagar Pagar
Tera Patron

Hi @ss123,

It would be helpful for troubleshoot. If you shared the scripts.

 

Thanks,

Sagar Pagar

The world works with ServiceNow

Hi @Sagar Pagar thank you for your response. Here are the scripts. See below.

 

Script Includes

Name: technicalServiceOffering

var technicalServiceOffering = Class.create();
technicalServiceOffering.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

getServDetails: function() {
//gs.addInfoMessage('script include triggered');

var servId = this.getParameter('servId');
//gs.addInfoMessage('service scr--' + servId);
obj = {};

var gServOffering = new GlideRecord('service_offering');
if (gServOffering.get(servId)) {
obj.x_bmk_technology_s_u_technical_service_private_task = gServOffering.getValue('parent');
}
//gs.addInfoMessage(obj+JSON.stringify(obj));
return JSON.stringify(obj);
},

type: 'technicalServiceOffering'
});

 

Name: BackfillTechServiceOffering

var BackfillTechServiceOffering = Class.create();
BackfillTechServiceOffering.prototype = {
initialize: function() {

},

BackfillTechService: function(a) {

var gp = ''; //var gp = [];

if (!a)
return "sys_class_name=cmdb_ci_service_technical"; // return "sys_class_name=cmdb_ci_service_technical";


//service_offering has the business_service relationship
var grp = new global.GlideRecord('service_offering');
grp.addQuery('sys_id', a);
grp.query();

//var busServ = [];
while (grp.next()) {

gp.push(grp.parent.toString());

}
return "sys_idIN" + gp.join(',');
// return "nameIN" + busServ.join(',');
},

type: 'BackfillTechServiceOffering'
}

 

Client Script: BM - Autopopulate Technical Service

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var sc = g_form.getValue('x_bmk_technology_s_u_service_offering');

var ga = new GlideAjax('x_bmk_technology_s.technicalServiceOffering');
ga.addParam('sysparm_name', 'getServDetails');
ga.addParam('servId', g_form.getValue('x_bmk_technology_s_u_service_offering'));
ga.getXMLAnswer(getResponse);

function getResponse(response) {
var res = JSON.parse(response);
g_form.setValue('x_bmk_technology_s_u_technical_service_private_task', res.x_bmk_technology_s_u_technical_service_private_task);

}
}

 

Reference qualifier for "Technical Service" field

SabrinaSalazar_0-1668480745515.png

 

Hi @ss123,

Try this updated scripts for auto populates - 

 

Client Script: BM - Autopopulate Technical Service

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
	if (isLoading || newValue === '') {
		return;
	}
	var sc = g_form.getValue('x_bmk_technology_s_u_service_offering');

	var ga = new GlideAjax('x_bmk_technology_s.technicalServiceOffering');
	ga.addParam('sysparm_name', 'getServDetails');
	ga.addParam('sysparm_servId', g_form.getValue('x_bmk_technology_s_u_service_offering'));
	ga.getXMLAnswer(getResponse);

	function getResponse(response) {
		var res = JSON.parse(response);
		g_form.setValue('x_bmk_technology_s_u_technical_service_private_task', res.x_bmk_technology_s_u_technical_service_private_task);

	}
}

 

Script Includes

Name: technicalServiceOffering

Client callable - true

var technicalServiceOffering = Class.create();
technicalServiceOffering.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

	getServDetails: function() {
		//gs.addInfoMessage('script include triggered');

		var servId = this.getParameter('sysparm_servId');
		//gs.addInfoMessage('service scr--' + servId);
		obj = {};

		var gServOffering = new GlideRecord('service_offering');
		if (gServOffering.get(servId)) {
			obj.x_bmk_technology_s_u_technical_service_private_task = gServOffering.getValue('parent');
		}
		//gs.addInfoMessage(obj+JSON.stringify(obj));
		return JSON.stringify(obj);
	},

	type: 'technicalServiceOffering'
});

 

Reference qualifier - 

javascript:"parent="+current. x_bmk_technology_s_u_service_offering;

 

Thanks,
Sagar Pagar

The world works with ServiceNow

Hi @Sagar Pagar , the Auto Populate is now working! 

 Only the filtering of the Technical Service Offering is not working. Would you please help me on this? 

 

"requirement is when a "Technical Service" is first selected, the "Technical Service Offering" list will be filtered based on the "Parent" field which is the selected "Technical Service"