我在ServiceNow(日内瓦版本)中有一个服务目录项,人员用它来请求访问其他ServiceNow组。列表收集器显示可用的所有组。我们想限制它并禁止出现一些选择。构建List Collector变量时,可以指定List表,但不能在其上构建过滤器。
是否可以使用目录客户端脚本检查加载到列表收集器中的每个项目并跳过它,可能是通过检查sysID或其他值?我假设正在进行滑行记录调用某处为了填充列表收集器,但我不确定如何修改它或中断它。
对于此示例,列表收集器名为' bucket'。
我可能会尝试开始:
var lcFilter = g_form.getControl('bucket')
可能有一种方法来操纵该对象的内容。我只需要帮助弄清楚我需要操纵的对象的哪个部分。我们目前使用类似的函数来重命名List Collector的标题,如下所示:
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';
答案 0 :(得分:2)
您可能想尝试一种解决方案,允许您直接将过滤器应用于我从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);
}
}