Estive recentemente analisando o item de menu “My Requests” e quis entender como ele descobria quais tickets deveriam aparecer na lista. Esse item de menu é bem simples, chamando uma função chamada getMyRequestIDs retornando a lista de SysIds dos tickets.

Mas que função getMyRequestIDs é essa?
Bom, levei alguns minutos para descobrir que é na verdade uma Business Rule! Até aí ok, vamos ver o código fonte da mesma:
function getMyRequestIDs() {
return GlideappScriptHelper.getMyRequestIDs();
}Ok, temos então um Script Include chamado GlideappScriptHelper que tem um método de mesmo nome. Vamos abrir esse Script Include… #sqn!
Esse Script Include deve ser uma classe restrita em Java a qual não temos acesso! E agora, o que fazer?
Após bastante pesquisa, achei um link para um artigo da própria ServiceNow que mostra o código fonte deste método!
O link do artigo original está aqui.
Abaixo segue a transcrição do código fonte original
function getMyRequestIDS() {
var ids = [];
var rq_filter = new GlidRecord('request_filter');
rq_filter.addActiveQuery();
if (GlideTableDescriptor.fieldExists('request_filter', 'applies_to'))
rq_filter.addQuery('applies_to', 0).addOrCondition('applies_to', 10).addOrCondition('applies_to', null);
rq_filter.query();
while(rq_filter.next()) {
var tableName = rq_filter.table_name;
if (GlideTableDescriptor.fieldExists('request_filter', 'table'))
tableName = rq_filter.table;
if (!GlideTableDescriptor.isValid(tableName))
continue;
var gr = new GlideRecord(tableName);
gr.addQuery(rq_filter.filter);
gr.query();
while (gr.next())
ids.push(gr.sys_id + '');
}
return ids;
}Então o que foi posivel entender que existem filtros nesta tabela request_filter que são utilizados na query dos tickets.
Até então nunca tinha ouvido falar neste recurso. Procurando por Request Filter no menu, encontrei o seguinte:


Agora tudo começa a se encaixar!!
Cada um desses filtros funciona como User Criteria, porém orientado a qualquer tabela!
No caso da tabela de Request Items, temos por exemplo:
