How to set values dynamically in list collector ?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-05-2017 11:24 PM
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 ?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-05-2017 11:34 PM
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

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-05-2017 11:37 PM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-15-2018 04:34 PM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-05-2017 11:40 PM
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 .
4) and last mention variable value.
Regards,
Parvinder
PS: Hit like, Helpful or Correct depending on the impact of the response