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:
