g_form.getParameter is not a function

mattrom1
Giga Expert

I am going through testing for Kingston to make sure all items dont get javascript errors. I am getting an error for an error that worked on the CMS but not Service Portal. I am not a developer so I am not sure how to replace this code for it to work.

Build- Kingston

Catalog Client Script - OnLoad

Purpose of script...custom fields are on the catalog item for IT Risk approval or funding required. The script checks that and populates a message if it is true for that item. 

 

I get the following Error in Developer Tools on Google

 

js_includes_sp.jsx?v=04-25-2018_0907&lp=Tue_May_08_11_36_12_PDT_2018&c=17_294:67075 (g_env) [SCRIPT:EXEC] Error while running Client Script "get Cat Item control fields": TypeError: g_form.getParameter is not a function

 

function onLoad() {

	var myItem = g_form.getParameter("sysparm_id");
	
	var ga = new GlideAjax('SoftwareReqControlUtil');
	ga.addParam('sysparm_name', 'getSoftwareControlFields');
	ga.addParam('sysparm_item', myItem); 
	ga.getXML(getItemSelected);
}

function getItemSelected(response) {
	var answer = response.responseXML.documentElement.getAttribute("answer");
	//g_form.addInfoMessage(answer); //JSON String

	answer = answer.evalJSON(); //Transform the JSON string to an object

	g_form.setValue('funding_required', answer[0].fundingReq);
	if (answer[0].fundingReq == 'true') {
		g_form.addInfoMessage('The selected Software requires funding');
	}
	g_form.setValue('it_risk_review_required', answer[0].itRisk);
	if (answer[0].itRisk == 'true') {
		g_form.addInfoMessage('The selected Software requires IT RISK Review');
	}
	g_form.setValue('standard_software', answer[0].standard);
}
5 REPLIES 5

Scott Jordheim
Giga Guru

I'm wondering if that isn't this problem rearing its head again.

Couple of different ways you can do this, documented in: https://community.servicenow.com/community?id=community_question&sys_id=839ac32ddb5cdbc01dcaf3231f9619e2 and https://hi.service-now.com/kb_view.do?sysparm_article=KB0547171.

 

g_form should be your major issue there. For whatever reason, some parts of that don't like to play well with the Service Catalog / Service Portal. From previous situations, g_form.setValue should be fine.

 

Try changing your code to:

function onLoad() {
	
	var form = typeof g_sc_form != "undefined" ? g_sc_form : g_form;
	var myItem = form.getParameter("sysparm_id");
	
	var ga = new GlideAjax('SoftwareReqControlUtil');
	ga.addParam('sysparm_name', 'getSoftwareControlFields');
	ga.addParam('sysparm_item', myItem); 
	ga.getXML(getItemSelected);
}

function getItemSelected(response) {
	var answer = response.responseXML.documentElement.getAttribute("answer");
	//g_form.addInfoMessage(answer); //JSON String

	answer = answer.evalJSON(); //Transform the JSON string to an object

	g_form.setValue('funding_required', answer[0].fundingReq);
	if (answer[0].fundingReq == 'true') {
		g_form.addInfoMessage('The selected Software requires funding');
	}
	g_form.setValue('it_risk_review_required', answer[0].itRisk);
	if (answer[0].itRisk == 'true') {
		g_form.addInfoMessage('The selected Software requires IT RISK Review');
	}
	g_form.setValue('standard_software', answer[0].standard);
}

 

quick edit: If after doing that, the second function doesn't work, a quick fix to try would be (shown below). Don't know if you necessarily need to declare form once in each function, so the second declaration may be able to be just commented out.

function onLoad() {
	
	var form = typeof g_sc_form != "undefined" ? g_sc_form : g_form;
	var myItem = form.getParameter("sysparm_id");
	
	var ga = new GlideAjax('SoftwareReqControlUtil');
	ga.addParam('sysparm_name', 'getSoftwareControlFields');
	ga.addParam('sysparm_item', myItem); 
	ga.getXML(getItemSelected);
}

function getItemSelected(response) {
	
	var form = typeof g_sc_form != "undefined" ? g_sc_form : g_form;

	var answer = response.responseXML.documentElement.getAttribute("answer");
	//form.addInfoMessage(answer); //JSON String

	answer = answer.evalJSON(); //Transform the JSON string to an object

	form.setValue('funding_required', answer[0].fundingReq);
	if (answer[0].fundingReq == 'true') {
		form.addInfoMessage('The selected Software requires funding');
	}
	form.setValue('it_risk_review_required', answer[0].itRisk);
	if (answer[0].itRisk == 'true') {
		form.addInfoMessage('The selected Software requires IT RISK Review');
	}
	form.setValue('standard_software', answer[0].standard);
}

Im still getting

 

js_includes_sp.jsx?v=04-25-2018_0907&lp=Tue_May_08_11_36_12_PDT_2018&c=17_294:67075 (g_env) [SCRIPT:EXEC] Error while running Client Script "get Cat Item control fields": TypeError: form.getParameter is not a function

Alright, found something else along the same lines.

URL of where I'm pulling this from: https://community.servicenow.com/community?id=community_blog&sys_id=ec3eea6ddbd0dbc01dcaf3231f9619d6

function onLoad() {

       //Use the 'getParameterValue' function below to get the parameter values from the URL   

       var myItem = getParameterValue('sysparm_id');
	
	var ga = new GlideAjax('SoftwareReqControlUtil');
	ga.addParam('sysparm_name', 'getSoftwareControlFields');
	ga.addParam('sysparm_item', myItem); 
	ga.getXML(getItemSelected);
}

function getParameterValue(name) {

       name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");

       var regexS = "[\\?&]" + name + "=([^&#]*)";

       var regex = new RegExp(regexS);

       var results = regex.exec(top.location);

       if (results == null) {

               return "";

       } else {

               return unescape(results[1]);

       }

}

function getItemSelected(response) {
	var answer = response.responseXML.documentElement.getAttribute("answer");
	//g_form.addInfoMessage(answer); //JSON String

	answer = answer.evalJSON(); //Transform the JSON string to an object

	g_form.setValue('funding_required', answer[0].fundingReq);
	if (answer[0].fundingReq == 'true') {
		g_form.addInfoMessage('The selected Software requires funding');
	}
	g_form.setValue('it_risk_review_required', answer[0].itRisk);
	if (answer[0].itRisk == 'true') {
		g_form.addInfoMessage('The selected Software requires IT RISK Review');
	}
	g_form.setValue('standard_software', answer[0].standard);
}

still failing, it is the one line of code 

 

var myItem = g_form.getParameter("sysparm_id");

 

that is throwing the fit, i dont believe it is compatible with service portal