Setvalue is not updating properly in onchange for multiline text field type

Bala13
Kilo Guru

Hi,

I am writing a script to populate the values from list collector to Multi line text field using catalog client script onchange function.

But, when the iteration is happening it is overriding the first name and updating 2nd time. Please help me to get this fixed.

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }

    var reqNam = [];
    var reqForList = g_form.getValue('requestedfor');
    alert("Req list " + reqForList);

    var reqFor = reqForList.split(',');
    alert("Requested for" + " " + reqFor);

    for (i = 0; i < reqFor.length; i++) {
        var gr = new GlideRecord('sys_user');
        gr.addQuery('sys_id', reqFor[i]);
        gr.query(myCallbackFunction);

        function myCallbackFunction(gr) {
            while(gr.next()) {

                reqNam.push(gr.name);
                alert("Check name" + "--" + reqNam);
            }
 g_form.setValue('u_request_roles_list', reqNam);
        }

    }
   


}
1 ACCEPTED SOLUTION

Harish KM
Kilo Patron
Kilo Patron

Hi Bala,

 

Here is the working code. Just change your field names and tablename in script include


   

getListCollector: function() {
        var array = [];
        var sysID = this.getParameter('sysparm_id'); // get values from client script
        
            gs.info("listArray sysID"+sysID);
    
        var user = new GlideRecord('sys_user');
        user.addQuery('sys_id','IN',sysID); // sysid contains list collector values
        user.query();
        while (user.next()) {
           array.push(user.name.toString());
        }
            gs.info("Array"+array);
            return array.join(','); // return array
   
    },

 

Client SCript:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
  
    var ga = new GlideAjax('listCollector'); // SCript Include name
    ga.addParam('sysparm_name', 'getListCollector'); // function name in SCript includes
    ga.addParam('sysparm_id', newValue);// pass list collector values to script include
    ga.getXML(getResponse);
    
}

    function getResponse(response){
        var answer= response.responseXML.documentElement.getAttribute("answer");
        alert("answer"+answer);
        g_form.setValue('test',answer); // set your variable name 
        
        
        
    }

Regards
Harish

View solution in original post

29 REPLIES 29

Hi Survo,

I tried the way you suggested in the link.

But its not working as expected. It shows getelementbytagname is not a function. 

Please help me to get this fixed.

var getRequestorDetails = Class.create();
getRequestorDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	getReqList: function(userName){
		
		var uName = this.getParameter('sysparam_userName');
		var gr = new GlideRecord('sys_user');
		gr.get(uName);
		
		var reqDetails = this.newItem("result");
		reqDetails.setAttribute("name", gr.getValue('name'));
		
	},

    type: 'getRequestorDetails'
});

 

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }

   
	var getReqList = new GlideAjax('getRequestorDetails');
	getReqList.addParam('sysparam_userName', 'getReqList');
	getReqList.getXML(fetchReqDetails);
	
	function fetchReqDetails(serverResponse){
		var result = serverResponse.responseXML.getElementByTagName("result");
		var name = result[0].getAttribute('name');
		g_form.setValue('u_requested_for_list',name);
		
	}

}

You forgot one line

var reqForList = g_form.getValue('requestedfor');

getReqList.addParam('sysparam_name', 'getReqList');  

getReqList.addParam('sysparam_userName', reqForList);

 

Hi Survo, 

 

Added the line and still shows the same issue.

find_real_file.png

Harish KM
Kilo Patron
Kilo Patron

Hi Bala,

 

Here is the working code. Just change your field names and tablename in script include


   

getListCollector: function() {
        var array = [];
        var sysID = this.getParameter('sysparm_id'); // get values from client script
        
            gs.info("listArray sysID"+sysID);
    
        var user = new GlideRecord('sys_user');
        user.addQuery('sys_id','IN',sysID); // sysid contains list collector values
        user.query();
        while (user.next()) {
           array.push(user.name.toString());
        }
            gs.info("Array"+array);
            return array.join(','); // return array
   
    },

 

Client SCript:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
  
    var ga = new GlideAjax('listCollector'); // SCript Include name
    ga.addParam('sysparm_name', 'getListCollector'); // function name in SCript includes
    ga.addParam('sysparm_id', newValue);// pass list collector values to script include
    ga.getXML(getResponse);
    
}

    function getResponse(response){
        var answer= response.responseXML.documentElement.getAttribute("answer");
        alert("answer"+answer);
        g_form.setValue('test',answer); // set your variable name 
        
        
        
    }

Regards
Harish

Hi Harish,

Its working in my PDI, but when i used the same script in my instance its not working.

 

Answer showing as null.

Could you please advise?

I am using it in HRSD application. In my pdi i used in global application