Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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"