我在ServiceNow(日内瓦版本)中有一个Service Catalog(服务目录)项,员工可用来请求访问其他ServiceNow组。列表收集器显示所有可用的组。我们要限制它,不允许出现一些选择。构建List Collector变量时,可以指定一个List表,但是不能在其上构造过滤器。
是否可以使用目录客户端脚本来检查正在加载到列表收集器中的每个项目,并通过检查sysID或其他值来跳过它?我假设要在某个地方进行滑动记录调用以填充列表收集器,但是我不确定如何修改它或中断它。
对于此示例,列表收集器被命名为“ bucket”。
我可能可以尝试从开始:
var lcFilter = g_form.getControl('bucket')
可能存在一种操作该对象内容的方法。我只需要帮助弄清楚我需要操纵对象的哪一部分。我们目前使用类似的函数来重命名列表收集器的标头,如下所示:
var headers = g_form.getControl('bucket').parentElement.querySelectorAll('.col-xs-4');
headers[0].childNodes[0].firstChild.data = 'All Available Groups';
headers[1].childNodes[0]firstChild.data = 'Groups you wish to add';
最佳答案
您可能想尝试一种解决方案,该解决方案允许您直接将过滤器应用于我从http://www.servicenowguru.com/scripting/client-scripts-scripting/changing-filter-list-collector-variable-client-script/使用的列表收集器
下面的代码是从此处复制并粘贴的,因此,我并没有为此付出太多,但是您想将列表收集器的名称放在此处
var collectorName = 'bucket';
然后在此处进行编码查询以对其进行过滤。
var filterString = 'group_nameNOT LIKEApproval^active=true'
这将在onLoad的
Catalog Client Script
中function onLoad() {
//Apply a default filter to the list collector variable
var collectorName = 'configuration_items';
var filterString = 'name!=NULL^sys_class_nameANYTHING';
//Hide the list collector until we've set the filter
g_form.setDisplay(collectorName, false);
setCollectorFilter();
function setCollectorFilter(){
//Test if the g_filter property is defined on our list collector.
//If it hasn't rendered yet, wait 100ms and try again.
if(typeof(window[collectorName + 'g_filter']) == 'undefined'){
setTimeout(setCollectorFilter, 100);
return;
}
//Find and hide the filter elements (optional)
//Simple method for items with only one list collector
//$('ep').select('.row')[0].hide();
//Advanced method for items with more than one list collector (more prone to upgrade failure)
//var el = $('container_' + g_form.getControl(collectorName).id).select('div.row')[0].hide();
//Reset the filter query
window[collectorName + 'g_filter'].reset();
window[collectorName + 'g_filter'].setQuery(filterString);
window[collectorName + 'acRequest'](null);
//Redisplay the list collector variable
g_form.setDisplay(collectorName, true);
}
}