How to pass values from script include to client script?

ktjstn
Kilo Expert

I'm trying to get the Risk by using Script Include and Client Script.

Risk was already calculated in the table I just want the exact risk to be retrieved on that table based on the selected recoverabilty, impact, deployment etc.

I also try to put the answer on alert() function but it says the value of answer is null.

Here's my scripts:

1. Script Include

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

getApplicationRisk: function()
{

	var types = this.getParameter('sysparm_changetype');
	var businessCIs = this.getParameter('sysparm_business');
	var serverCIs = this.getParameter('sysparm_server');
	var impacts = this.getParameter('sysparm_impact');
	var deployments = this.getParameter('sysparm_deploy');
	var recovers = this.getParameter('sysparm_recover');

//	if(types == 'Application'){
	var businessCI = new GlideRecord('cmdb_ci_service');
	businessCI.addQuery('name', businessCIs);
	businessCI.query();
		
	while(businessCI.next())
	{
	  var type = new GlideRecord('u_risk_calculation');
	      type.addQuery('u_change_type', types);
	      type.addQuery('u_business_criticality', businessCI.busines_criticality);
	      type.addQuery('u_impact', impacts);
	      type.addQuery('u_deployment', deployments);
	      type.addQuery('u_recoverability', recovers);
	      type.query();

	while(type.next()){
					
	var appRiskCalc = {};
	appRiskCalc.risk_app = type.u_risk.getDisplayValue() || '';

	var data = new global.JSON().encode(appRiskCalc);
	return data;

	}
    }
 //}
},


	//type: 'RiskLookup'
});​

 

2. Client Script:

function onChange(control, oldValue, newValue, isLoading)
{

	var type = g_form.getValue('u_change_type');
	var businessCI = g_form.getValue('u_business_ci');
	var serverCI = g_form.getValue('u_related_ci');
	var impact_scope = g_form.getValue('impact');
	var deployment = g_form.getValue('u_deployment');
	var recoverability = g_form.getValue('u_recoverability');


	if(type && businessCI && serverCI && impact_scope && deployment && recoverability ){

		var ga = new GlideAjax('RiskLookup');
		ga.addParam('sysparm_name','getApplicationRisk');
		ga.addParam('sysparm_changetype', type);
		ga.addParam('sysparm_business', businessCI);	
		ga.addParam('sysparm_server', serverCI);
		ga.addParam('sysparm_impact', impact_scope);
		ga.addParam('sysparm_deploy', deployment);
		ga.addParam('sysparm_recover', recoverability);

		ga.getXML(getInfo);

	}


	function getInfo(response)
	{   
		var answer = response.responseXML.documentElement.getAttribute("answer");
		answer = JSON.parse(answer);
		alert(answer);
		g_form.setValue('risk',answer.risk_app);

	}

}
22 REPLIES 22

David, while I do agree with you that it is better practice to use JSON.stringify() because it is native JS, new global.JSON().encode() should still work in this case. Since none of the logging statements were hit in the script include, something must be preventing the AJAX call from reaching the script include code.

vkachineni
Kilo Sage
Kilo Sage

//Can you try this script include and client script. You commented out type in the SI.

type: 'RiskLookup'

 

//The client script calls a test function to return a message

 

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

    getApplicationRisk: function() {

        var types = this.getParameter('sysparm_changetype');
        var businessCIs = this.getParameter('sysparm_business');
        var serverCIs = this.getParameter('sysparm_server');
        var impacts = this.getParameter('sysparm_impact');
        var deployments = this.getParameter('sysparm_deploy');
        var recovers = this.getParameter('sysparm_recover');

        
        var businessCI = new GlideRecord('cmdb_ci_service');
        businessCI.addQuery('name', businessCIs);
        businessCI.query();

        while (businessCI.next()) {
            var type = new GlideRecord('u_risk_calculation');
            type.addQuery('u_change_type', types);
            type.addQuery('u_business_criticality', businessCI.busines_criticality);
            type.addQuery('u_impact', impacts);
            type.addQuery('u_deployment', deployments);
            type.addQuery('u_recoverability', recovers);
            type.query();

            while (type.next()) {

                var appRiskCalc = {};
                appRiskCalc.risk_app = type.u_risk.getDisplayValue() || '';

                var data = new global.JSON().encode(appRiskCalc);
                return data;

            }
        }        
    },
	
	getTestMessage: function()
	{
		var types=this.getParameter('sysparm_changetype');
		var businessCIs=this.getParameter('sysparm_business');
		var serverCIs=this.getParameter('sysparm_server');
		var impacts=this.getParameter('sysparm_impact');
		var deployments=this.getParameter('sysparm_deploy');
		var recovers=this.getParameter('sysparm_recover');
		gs.log('types: '+types);
		gs.log('businessCIs: '+businessCIs);
		gs.log('serverCIs: '+serverCIs);
		gs.log('impacts: '+impacts);
		gs.log('deployments: '+deployments);
		gs.log('recovers: '+recovers);
		
		return "I am from getTestMessage";
		
	},

    type: 'RiskLookup'
});​




//Client script to call getTestMessage

function onChange(control, oldValue, newValue, isLoading)
{

	var type = g_form.getValue('u_change_type');
	var businessCI = g_form.getValue('u_business_ci');
	var serverCI = g_form.getValue('u_related_ci');
	var impact_scope = g_form.getValue('impact');
	var deployment = g_form.getValue('u_deployment');
	var recoverability = g_form.getValue('u_recoverability');


	var ga = new GlideAjax('RiskLookup');
	ga.addParam('sysparm_name','getTestMessage');
	ga.addParam('sysparm_changetype', type);
	ga.addParam('sysparm_business', businessCI);	
	ga.addParam('sysparm_server', serverCI);
	ga.addParam('sysparm_impact', impact_scope);
	ga.addParam('sysparm_deploy', deployment);
	ga.addParam('sysparm_recover', recoverability);

	ga.getXML(getInfo);

	function getInfo(response)
	{   
		var answer = response.responseXML.documentElement.getAttribute("answer");		
		alert(answer); //alert the string returned "I am from getTestMessage
	}
}

 

Please mark Correct and click the Thumb up if my answer helps you resolve your issue. Thanks!
Vinod Kumar Kachineni
Community Rising Star 2022

I don't believe having the type property commented out will affect anything. Any other updates on this?

The type there in the script include is only for tapping in to the object type. If that's not applicable here, there is no negative to commenting it out.

Please mark reply as Helpful, if applicable. Thanks!


Please consider marking my reply as Helpful and/or Accept Solution, if applicable. Thanks!

ChrisBurks
Mega Sage

Most of things posted here should work. I'm wondering two things:

1) Does the field being pulled really have a value?

2) The script include: Is the "Client callable" field checked?

3) Is the script include scoped and if it is, is it allowed for access from any scope.

 

Another thing to try is comment out everything in the script include and just return a hardcoded a value.