Guia prático ServiceNow
GlideAjax Descomplicado
Aprenda GlideAjax com analogias simples e um laboratório visual para entender a troca entre Client Script, GlideAjax e Script Include.
Primeiro: existe algo Low-code ou OOTB?
Antes de abrir o editor e codar um GlideAjax ou qualquer solução hardcode, faça uma checagem honesta: a plataforma já não resolve isso sozinha? Muitas vezes um Flow Designer, Integration Hub, Data Lookup ou mesmo um componente OOTB entrega 80% (ou 100%) da demanda com bem menos esforço e manutenção.
-
1Mapeie o requisito: descreva claramente o que o usuário precisa, o contexto do processo e as regras já existentes.
-
2Faça o inventário de opções: revise catálogos OOTB, apps do Store e recursos low-code antes de desenhar uma arquitetura custom.
-
3Justifique o custom: se ainda assim precisar codar, documente os motivos (lacunas funcionais, performance, compliance) e siga com segurança.
Essa disciplina economiza tempo, garante alinhamento com as boas práticas ServiceNow e evita legados desnecessários. Quando o OOTB/low-code não cobre, aí sim partimos para o hardcode e soluções personalizadas.
Importante
Para fins didáticos, utilizei um cenário simplificado: buscar o e-mail do usuário via script. É importante ressaltar que, em um projeto real, essa necessidade específica seria resolvida sem código, utilizando a funcionalidade nativa de Dot-Walking (exibir campos de tabelas relacionadas). Porém, escolhi este cenário pela sua clareza e baixa complexidade, permitindo focar 100% na sintaxe e estrutura do GlideAjax, sem a distração de regras de negócio complexas.
Para que serve o GlideAjax?
O GlideAjax é a ponte segura entre o Client Script e o Script Include. Ele permite buscar dados do servidor sem travar a interface, obedecendo ACLs e reduzindo chamadas desnecessárias ao backend.
-
1Performance: realiza chamadas assíncronas e mantém o usuário trabalhando enquanto a resposta vem.
-
2Segurança: respeita as ACLs configuradas no Script Include e impede acesso direto ao banco.
-
3Flexibilidade: retorna textos, objetos JSON ou qualquer dado que o cliente precise renderizar.
Conceito: O Garçom Assíncrono
O navegador (Client Side) não pode acessar o banco de dados diretamente por segurança e performance. Para buscar dados no servidor sem recarregar a página ou travar a tela, usamos o GlideAjax como um intermediário.
1. Cliente (Mesa)
Você (Client Script) faz o pedido da mesa. Não tem acesso direto à cozinha (Banco de Dados).
2. GlideAjax (Garçom)
Leva o pedido (Parâmetros) e traz o prato (XML/JSON). O cliente continua conversando enquanto espera (Assíncrono).
3. Servidor (Cozinha)
O Chef (Script Include) recebe o pedido, consulta o estoque (DB) com segurança e prepara a resposta.
Laboratório Interativo de GlideAjax
Teste o GlideAjax abaixo. Altere o campo Caller e observe a animação da cozinha acontecendo em tempo real com os logs.
Aguardando alteração no formulário...
Gire a tela para acessar o simulador
Estamos quase lá! Este dispositivo tem altura suficiente, então basta colocar o aparelho na horizontal para liberar o laboratório interativo de GlideAjax.
Simulador disponível apenas em telas grandes
Para experimentar o laboratório interativo, abra este conteúdo em um dispositivo com pelo menos 900 px de altura (desktop, notebook ou tablet em modo paisagem). Você ainda pode seguir todo o guia teórico normalmente no mobile.
Passo 1: O Backend (Script Include)
Como criar no ServiceNow
-
1Navegue até System Definition > Script Includes.
-
2Clique em New.
-
3Defina o Name (Ex: UserDataHelper). Guarde este nome!
-
4IMPORTANTE: Marque a caixa Client callable. Se não marcar, o navegador não consegue acessar esse script.
var UserDataHelper = Class.create();
UserDataHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {
// Nome da função que chamaremos no cliente
getEmail: function() {
// 1. Captura o parâmetro (padrão snake_case por convenção)
var userId = this.getParameter('sysparm_user_id');
if (!userId) return '';
// 2. Use GlideRecord para consultar a tabela alvo
var gr = new GlideRecord('sys_user');
if (gr.get(userId)) {
// 3. Retorna o valor usando getValue (Mais performático)
return gr.getValue('email') || '';
}
return '';
},
type: 'UserDataHelper'
});
Passo 2: O Frontend (Client Script)
Como criar no ServiceNow
-
1Navegue até System Definition > Client Scripts.
-
2Clique em New.
-
3Preencha: Table = Incident, Type = onChange, Field name = Caller.
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading) return;
// 1. Limpa o campo se o usuário apagar o nome (Evita dados órfãos)
if (newValue === '') {
g_form.setValue('u_email', '');
return;
}
// 2. Inicia o GlideAjax com o NOME do Script Include
var ga = new GlideAjax('UserDataHelper');
// 3. Define qual FUNÇÃO executar
ga.addParam('sysparm_name', 'getEmail');
// 4. Passa os parâmetros (nome padronizado)
ga.addParam('sysparm_user_id', newValue);
// 5. Executa a chamada assíncrona (getXMLAnswer é o padrão moderno)
ga.getXMLAnswer(function(answer) {
// Garante que não venha 'null' ou 'undefined'
g_form.setValue('u_email', answer || '');
});
}
ga.getXMLWait(). Isso trava o navegador do usuário até o servidor responder e cria uma péssima experiência de uso.
Dicas de Ouro
-
1Use getXMLAnswer: Antigamente usava-se
getXML, que obrigava você a fazer parse de XML na resposta. OgetXMLAnswerjá entrega a string limpa. -
2JSON para dados complexos: Se precisar retornar Email, Telefone e Cargo ao mesmo tempo, não faça 3 chamadas GlideAjax. Retorne um objeto JSON (
JSON.stringify) e no cliente faça o parse (JSON.parse).
Material de Apoio
Explore os materiais oficiais e da comunidadepara aprofundar o conhecimento sobre GlideAjax e garantir implementações alinhadas às boas práticas da plataforma.
-
Documentação oficialAbrir
Documentação oficial da Servicenow atualizada sobre GlideAjax, cobrindo métodos, parâmetros e exemplos.
-
Artigo da Community sobre GlideAjaxAbrir
Excelente artigo escrito por Shawn Dowler com um exemplo pratico e uma explicação sobre os parametros que facilitam muito o entendimento da estrutura.