De onde vem os tickets de “My Requests” ?

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.

Arguments: &sysparm_fixed_query=sys_idINjavascript:getMyRequestIDs()

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:

Ambos levam para a mesma tabela, com a diferença dos filtros iniciais da listagem. Temos então:
Listagem de Request Filters

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:

Assim, dá para configurar a listagem a partir de qualquer critério que desejar!

Leave a Reply

Your email address will not be published. Required fields are marked *