No desenvolvimento de soluções na plataforma ServiceNow, é comum nos depararmos com a necessidade de buscar e manipular dados diretamente nas tabelas do sistema. Dois dos objetos mais utilizados para esse fim são o GlideRecord e o GlideAggregate. Embora ambos sirvam para interagir com registros de tabelas, cada um possui finalidades distintas e deve ser aplicado com consciência para garantir performance, clareza de código e eficiência operacional.
Neste artigo, explico as principais diferenças entre GlideRecord e GlideAggregate, e apresento cenários práticos que ajudarão você a escolher a ferramenta certa para cada situação.
O que é GlideRecord?
O GlideRecord
é o objeto mais amplamente utilizado para recuperar, inserir, atualizar e deletar registros em tabelas do ServiceNow. Ele fornece uma interface completa para navegação e manipulação de dados linha a linha.
Exemplo de uso:
var gr = new GlideRecord('incident');
gr.addQuery('priority', 1);
gr.query();
while (gr.next()) {
gs.info('Número do incidente: ' + gr.number);
}
Neste exemplo, recuperamos todos os incidentes com prioridade 1 e iteramos sobre cada um deles. Esse tipo de abordagem é ideal quando precisamos acessar dados individuais e suas propriedades diretamente.
O que é GlideAggregate?
O GlideAggregate
é utilizado para realizar cálculos e agregações sobre os dados de uma tabela, como contagens, somas, médias, máximos e mínimos. Ele funciona de maneira semelhante ao GROUP BY
em SQL.
Exemplo de uso:
var ga = new GlideAggregate('incident');
ga.addAggregate('COUNT');
ga.addQuery('priority', 1);
ga.query();
if (ga.next()) {
gs.info('Total de incidentes com prioridade 1: ' + ga.getAggregate('COUNT'));
}
Este exemplo mostra como obter a quantidade total de incidentes com prioridade 1, sem precisar iterar sobre cada registro individualmente, o que resulta em muito melhor performance em tabelas grandes.
Principais Diferenças
Característica | GlideRecord | GlideAggregate |
---|---|---|
Tipo de operação | Leitura, inserção, atualização, exclusão | Somente leitura com agregações |
Performance | Pode ser mais pesado com grandes volumes | Mais leve para operações agregadas |
Acesso a cada registro | Sim | Não (retorna apenas valores agregados) |
Suporte a funções de grupo | Não | Sim (COUNT, SUM, AVG, MIN, MAX, etc.) |
Uso de GROUP BY | Não | Sim (via groupBy('campo') ) |
Quando Usar GlideRecord?
Use o GlideRecord
quando:
- Você precisa iterar sobre registros.
- Precisa ler ou modificar campos específicos de registros.
- Vai realizar operações CRUD (Create, Read, Update, Delete).
- A lógica do seu script depende de valores campo a campo.
Exemplo real:
Listar todos os incidentes atribuídos a um grupo específico e atualizá-los:
var gr = new GlideRecord('incident');
gr.addQuery('assignment_group', '<<group_sys_id>>');
gr.query();
while (gr.next()) {
gr.state = 2; // Em progresso
gr.update();
}
Quando Usar GlideAggregate?
Use o GlideAggregate
quando:
- Precisa de estatísticas ou métricas agregadas.
- Quer contar registros sem trazer todos eles.
- Deseja obter média, máximo ou mínimo de um campo.
- Deseja agrupar registros por um campo e aplicar uma função.
Exemplo real:
Contar o número de incidentes abertos por grupo:
var ga = new GlideAggregate('incident');
ga.addQuery('active', true);
ga.addAggregate('COUNT');
ga.groupBy('assignment_group');
ga.query();
while (ga.next()) {
gs.info('Grupo: ' + ga.assignment_group + ' | Total: ' + ga.getAggregate('COUNT'));
}
Considerações de Performance
Em ambientes corporativos com grande volume de dados, a escolha entre GlideRecord e GlideAggregate impacta diretamente no desempenho da aplicação. Sempre que for possível utilizar GlideAggregate
para substituições de contagens manuais com GlideRecord
, essa deve ser a escolha preferencial.
Além disso, o GlideAggregate faz com que o banco de dados execute a agregação diretamente, retornando apenas os valores necessários, enquanto o GlideRecord traz todos os registros para o script manipulá-los.
Conclusão
Ambos os objetos são ferramentas poderosas no arsenal de um desenvolvedor ServiceNow. Compreender suas diferenças e aplicá-los corretamente é essencial para desenvolver soluções eficientes, escaláveis e alinhadas às boas práticas da plataforma.
Regra geral:
- Precisa de dados individuais → GlideRecord
- Precisa de estatísticas ou agregações → GlideAggregate
Aprofundar-se nesses recursos e saber escolher o mais adequado em cada cenário é o que diferencia um bom desenvolvedor de um excelente arquiteto de soluções.
No responses yet