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.

Itallo Brandão 28 nov 2025

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.

  • 1
    Mapeie o requisito: descreva claramente o que o usuário precisa, o contexto do processo e as regras já existentes.
  • 2
    Faça o inventário de opções: revise catálogos OOTB, apps do Store e recursos low-code antes de desenhar uma arquitetura custom.
  • 3
    Justifique 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.

  • 1
    Performance: realiza chamadas assíncronas e mantém o usuário trabalhando enquanto a resposta vem.
  • 2
    Segurança: respeita as ACLs configuradas no Script Include e impede acesso direto ao banco.
  • 3
    Flexibilidade: 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.

Atenção: O simulador abaixo é apenas uma representação visual para fins didáticos (HTML/JS puro). O código real de GlideAjax só funciona dentro de uma instância ServiceNow.
Incident: INC0010042 (New Record)
Debug Timeline

Aguardando alteração no formulário...
Quero o email!
Cliente
Client Script
Indo buscar!
Garçom
GlideAjax
Procurando...
Cozinheiro
Script Include

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

  • 1
    Navegue até System Definition > Script Includes.
  • 2
    Clique em New.
  • 3
    Defina o Name (Ex: UserDataHelper). Guarde este nome!
  • 4
    IMPORTANTE: Marque a caixa Client callable. Se não marcar, o navegador não consegue acessar esse script.
Script Include: UserDataHelper Server-Side (Javascript)
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

  • 1
    Navegue até System Definition > Client Scripts.
  • 2
    Clique em New.
  • 3
    Preencha: Table = Incident, Type = onChange, Field name = Caller.
Client Script Client-Side (Javascript)
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 || '');
    });
}
Dica Pro: Evite usar 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

  • 1
    Use getXMLAnswer: Antigamente usava-se getXML, que obrigava você a fazer parse de XML na resposta. O getXMLAnswer já entrega a string limpa.
  • 2
    JSON 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 oficial

    Documentação oficial da Servicenow atualizada sobre GlideAjax, cobrindo métodos, parâmetros e exemplos.

    Abrir
  • Artigo da Community sobre GlideAjax

    Excelente artigo escrito por Shawn Dowler com um exemplo pratico e uma explicação sobre os parametros que facilitam muito o entendimento da estrutura.

    Abrir

Vamos nos conectar?