How to set values dynamically in list collector ?

Dinesh Kumar C
Tera Contributor

Hi folks ,

I created one service catalog and i have a situation like set values dynamically in my list collector field .

In below , i have a field "books" in that i have 2 entries . one is   Shiva another one is vishnu . If i select vishnu as my selection then automatically vaules in list collector filterout related values of   shiva . Is it possible to write client scripts ?

find_real_file.png

9 REPLIES 9

Shishir Srivast
Mega Sage

I think, you can get it done through advanced reference qualifier, create a script include and based upon the provided condition and call the same using javascript: for more details please refer: http://wiki.servicenow.com/index.php?title=Reference_Qualifiers#Advanced_Reference_Qualifier_Example


Ujjawal Vishnoi
Mega Sage
Mega Sage

Hi Dinesh,



Please refer the sample client script below.



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


if (isLoading || newValue == '') {


return;


}


var ga = new GlideAjax('Refresh_list');


ga.addParam('sysparm_name','getUser');


ga.addParam('sysparm_group',newValue);


ga.getXMLWait();



var filterString=ga.getAnswer();


setMyFilter(filterString);



function setMyFilter(filterString) {



usrg_filter.reset();//Replace"usr"   here with the list collector name on catalog item


usrg_filter.setQuery(filterString);//Replace"usr" here with the list collector name on catalog item


usracRequest(null);//Replace"usr" here with the list collector name on catalog item


}




}




-----------------Script include-------------------



var Refresh_list = Class.create();


Refresh_list.prototype = Object.extendsObject(AbstractAjaxProcessor, {


getUser: function()


{


var uarr=[];


if (this.getParameter('sysparm_group').nil)


{


var grm=new GlideRecord('sys_user_grmember');


grm.query();


while(grm.next())


{


if (uarr.length > 0)


{


uarr += (',' + grm.user);


}


else


{


uarr = grm.user+'';


}



}



}


else


{


var gr=new GlideRecord('sys_user_grmember');


gr.addQuery('group',this.getParameter('sysparm_group'));


gr.query();


while(gr.next())


{


if (uarr.length > 0)


{


uarr += (',' + gr.user);


}


else


{


uarr = gr.user+'';


}



}



var filterString = 'sys_idIN'+uarr;


return filterString;


},


type: 'Refresh_list'


});



Hope this helps.



Regards


Ujjawal


Hi,

 

I have similarrequirement so itried the above script but i am not getting results as i expected. Here is my requirement 

We have catalog item have Cost Center(CC), Title, Hardware_items(List Collector) variables. Based on Cost Center, Title i need to populate the items in list collector. So i have written script include to get query condition and i have written Client script to set the filter condition in List Collector. Here are my scripts

 

Client Script:

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var Temp = g_form.getReference('template',function(ref){
var cc = ref.u_cost_center;

var nt = ref.u_title;
//alert(cc);
//alert(nt);

var Ajax = new GlideAjax('getTemplateItems');
Ajax.addParam('sysparm_name','getTemplateItemsfromRITM');
Ajax.addParam('sysparm_title',nt);
Ajax.addParam('sysparm_cc',cc);
Ajax.getXML(function(response){
var answer = response.responseXML.documentElement.getAttribute("answer");
//alert(answer);

var filterString = answer;
setMyFilter(answer);

function setMyFilter(filterString){
hardware_itemsg_filter.reset();    //hardware_items is my variable name
hardware_itemsg_filter.setQuery(filterString);
hardware_itemsacRequest(null);
}

});
});
}

Script Include:

var getTemplateItems = Class.create();
getTemplateItems.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getTemplateItemsfromRITM:function() {
var gp = '';
var tit = this.getParameter('sysparm_title');
var costc = this.getParameter('sysparm_cc');
gs.log('title:'+tit,'ITEMS LIST');
var tl = new GlideRecord('u_template_item');
tl.addQuery('u_cost_center',costc);
tl.addQuery('u_title',tit);

tl.query();
while(tl.next()){

var que = tl.getEncodedQuery();

return que;
}
},


type: ' getTemplateItems'

});

 

I am getting query alert from script condition but it's not setting condition in list collector variable

Thanks,

Chaitanya

 

parvinder2
Tera Expert

Hi Denesh,



1) Create List collector type of variable on you service catalog.


2) assuming all the value which you want to populate in this field should be available in table. If not then create one table and main data.


3) Call you table name under List table .


find_real_file.png



4)   and last mention variable value.



find_real_file.png



Regards,


Parvinder




PS: Hit like, Helpful or Correct depending on the impact of the response