Casos de uso de script do lado do cliente

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 10 min. de leitura
  • Os casos de uso para scripts do lado do cliente incluem a exibição de mensagens de campo, a mudança de cores do formulário, a adição de campos e a criação de ações de roteamento de IU.

    Adicione um campo à finalização da compra do catálogo de serviços

    Este é um exemplo de adição de um Empresa campo para o check-out abaixo de Solicitado para campo que usa macros de layout que não sejam do carrinho, ou seja, glide.sc.use_cart_layouts. falso .

    Antes de Iniciar

    Função necessária: administrador

    Por Que e Quando Desempenhar Esta Tarefa

    Figura 1. Solicitado para o campo
    Solicitado para caixa de diálogo com "Administrador do sistema" no campo.

    Este campo passa um valor fornecido para Empresa Campo da solicitação do Catálogo de serviços.

    Este exemplo faz as seguintes suposições:

    • A instância que usa o check-out em duas etapas. Se o check-out em duas etapas não estiver habilitado, habilite-o antes de começar. Para obter mais informações, consulte Service Catalog checkout models.
    • Este exemplo preenche o. Empresa Campo no formulário Solicitação do Catálogo de serviços. Se o campo não aparecer no formulário, configure o formulário antes de começar. Para obter instruções, consulte Personalize a form.

    Procedimento

    1. Vá para IU do sistema > Macros de IU e selecione servicecatalog_cart_template .
    2. Encontre onde há variáveis ocultas declaradas e adicione a seguinte linha:
      <input type="HIDDEN" name="cart_id" id="cart_id" value="$[sc_cart.sys_id]" />
    3. Encontre o código a seguir, que gera o. Solicitado para código:
      <tr class="header">
      <td width = "30%">
        ${gs.getMessage('Requested for')}:
        </td>
        <td width="70%">
          <label for="requestor_location">${gs.getMessage('Deliver to')}:</label>
        </td>
      </tr>
      <tr><td>$[SP]</td> 
      </tr>
        <tr><td valign="top">
          <j2:if test="$[jvar_can_delta_rf == false]">
            $[sc_cart.requested_for.getDisplayValue()]
          </j2:if>
          <j2:if test="$[jvar_can_delta_rf != false]">
            <g2:catalog_requested_for />
          </j2:if>
        </td>
        <td>
          <textarea id="requestor_location" style="width:100%" rows="4"       name="requestor_location" wrap="soft" onChange="catDeliveryAddress('$[sc_cart.sys_id]', 'requestor_location');"> 
            $[sc_cart.delivery_address]
          </textarea>
        </td>
      </tr>
      <tr>
        <td>$[SP]</td>
      </tr>
    4. Adicione o seguinte código depois:
      <tr class="header">
        <td colspan="2">Company</td>
      </tr>
      <tr>
        <td>$[SP]</td>
      </tr>
      <tr>
        <td colspan="2">
          <g2:ui_reference name="core_company" table="core_company" onchange="setCartValue()"/>
        </td>
      </tr>
      <tr>
        <td>$[SP]</td>
      </tr>
      Nota:
      . "ui_reference" a macro define um campo de referência. Existem várias macros para diferentes tipos de campo. Você pode ver exemplos desses tipos de campo em IU do sistema -> Macros de IU . Essas macros começam com 'iu_' . Para este exemplo, o campo de referência criado é nomeado core_company . Para obter mais informações, consulte Macros de IU.
    5. Navegue até IU do sistema > Páginas de IU e selecione servicecatalog_check-out_one Página de IU.
    6. Adicione o script a seguir ao Client script campo.
      function setCartValue() { 
        var newField = gel('core_company'); 
        var myCart = gel('cart_id'); 
        var cart_item = new GlideRecord('sc_cart_item');
        cart_item.addQuery('cart', myCart.value);
        cart_item.query(); 
        if(cart_item.next()) {
          cart_item.hints = "<hints><entry key='sysparm_processing_hint' value='setfield:request.company=" + newField.value + "'/></hints>";
          cart_item.update(); 
        } 
      }

      Para este exemplo, o campo de referência foi chamado core_company e o campo que está sendo preenchido na solicitação é empresa . Se campos diferentes forem usados:

      • Encontre esta linha: gel('core_company'); e substitua core_company com o nome do campo no check-out.
      • Na linha que começa com "cart_item.hints" substituir 'quest.company' com o nome do campo a ser preenchido no tíquete de solicitação em que "solicitar" a solicitação que está sendo gerada e. 'empresa' é o nome do campo.

    Resultado

    Quando um item é solicitado, o campo Empresa aparece no formulário Catálogo:

    Campo adicionado na finalização da compra do catálogo de serviços

    Adicionar funcionalidade de preenchimento automático

    A funcionalidade Adicionar preenchimento automático também é chamada de modelo de incidente, atribuições automáticas, chamadas rápidas, script de chamada ou preenchimento automático.

    Para preencher automaticamente um Descrição resumida campo baseado em Subcategoria selecionado:
    1. Crie uma tabela de pesquisa.
    2. Preencher o campo chave, Subcategoria .
    3. Preencher o campo preenchido automaticamente, Descrição resumida .
    function onChange(control, oldValue, newValue, isLoading) { 
      if (isLoading) { return; } 
      var newrec = gel('sys_row');
      //Check if new record
      if (newrec.value == -1) { 
        var lookup = new GlideRecord('u_short_desc_lookup'); 
        lookup.addQuery('u_subcategory', g_form.getValue('subcategory'));
        lookup.query();
        var temp; //temp var - reusable
        if (lookup.next()) {
          temp = lookup.u_short_description;
            if (null != temp) { //Set the form value from lookup if there is a lookup value
              g_form.setValue('short_description', temp); } 
            else {
              g_form.setValue('short_description', "" ); } } 
       else { 
         //If a lookup record does not exist based on lookup.addQuery 
         //Then set to UNDEFINED or NULL depending on type
          g_form.setValue('short_description', ""); } } 
    }

    Você pode preencher muitos campos ou extrair perguntas de script de chamada para Comentários para que a equipe do call center colete boas informações para passar a um técnico.

    Definir um campo para redefinição de senha
    A tabela de pesquisa tem um registro com as seguintes configurações de chave e preenchimento automático:
    • Subcategoria . Senha
    • Descrição resumida . Redefinição de senha
    Configurações de client script:
    • Tipo . Onchange
    • Nome da tabela . incidente
    • Nome do campo . Subcategoria

    Quando o usuário seleciona a subcategoria de Senha No formulário Incidente, um script de cliente pesquisa o registro correspondente e define a descrição resumida igual a. Redefinição de senha .

    Mude a cor do formulário na mudança de estado

    Muda a cor de um campo de formulário do formulário na mudança de estado. O script pode ser facilmente alterado para ajustar qualquer propriedade de qualquer objeto na página acessível por meio do DOM HTML.

    Aviso:
    A personalização descrita aqui foi desenvolvida para uso em instâncias específicas e não é compatível com Now Support. Este método é fornecido no estado em que se encontra e deve ser testado cuidadosamente antes da implementação. Publique todas as perguntas e comentários sobre esta personalização no fórum da nossa comunidade.

    Nome Mudar cor do formulário na mudança de estado

    Tipo Script do cliente

    Descrição : Muda a cor de um campo de formulário do formulário na mudança de estado. O script pode ser facilmente alterado para ajustar qualquer propriedade de qualquer objeto na página acessível por meio do DOM HTML.

    Script :
    function onChange(control, oldValue, newValue, isLoading) { 
      var elementID = gel("incident.priority");
        switch(newValue) { 
          case "1": elementID.style.backgroundColor = "red"; break; 
          case "2": elementID.style.backgroundColor = "tomato"; break;
          case "3": elementID.style.backgroundColor = "orange"; break;
          case "4": elementID.style.backgroundColor = "yellow"; break;
          case "5": elementID.style.backgroundColor = "green"; break; 
          default: elementID.style.backgroundColor = "white"; break; } }

    Crie uma ação de roteamento de IU

    Esta solução permite que você crie um registro com a central de serviços sem saber se é um incidente ou item de solicitação; a central de serviços pode rotear o registro para a tabela apropriada.

    Antes de Iniciar

    Função necessária: Administrador

    Procedimento

    1. Crie uma nova tabela que estenda o. tarefa Tabela (por exemplo, Nova chamada).
    2. Crie um módulo para criar um novo registro de Nova chamada.
    3. Crie todos os campos desejados na tabela Nova chamada.

      Os únicos campos necessários são os campos necessários para determinar se a nova chamada deve ser roteada para um Incidente ou um Item de Solicitação. Certifique-se de que o formulário contenha todos os campos que você deseja passar para o Incidente ou Item de solicitação. Neste exemplo, os itens a seguir são criados no formulário:

      • Solicitado para (referência)
      • Local (referência)
      • Tipo de chamada (Opção com dois valores - Incidente e Solicitação)
      • Item da solicitação (referência ao sc_cat_item (Tabela de itens)
    4. Adicione algumas políticas de IU para definir alguns campos como obrigatórios e ocultar Item da solicitação campo baseado em Tipo de chamada seleção.
    5. Remova botões desnecessários e funcionalidades do formulário.
    6. Criar um novo botão de Ação de IU.
      Este botão redireciona o usuário para um incidente ou uma solicitação. Ele também cria o registro do incidente e copia valores para o incidente e o formulário Item da solicitação.
      var reqItem = current.u_item;
      var requestedFor = current.u_requested_for;
      var location = current.location;
      
      if(current.u_incident_request == 'Incident'){
        //Create a new incident record and redirect to the new incident
        var rec = new GlideRecord('incident');
        rec.initialize();
        rec.caller_id = requestedFor;
        rec.location = location;
        rec.insert();
        action.setRedirectURL(rec);
      }
      
      if(current.u_incident_request == 'Request'){
        //Build the url and route the user to the request item
        var url = '';
        if(current.u_item.sys_class_name == 'sc_cat_item_guide'){
          url = 'com.glideapp.servicecatalog_cat_item_guide_view.do?sysparm_initial=true&sysparm_guide=' + 
            reqItem + '&sysparm_user=' + requestedFor + '&sysparm_location=' + location;
        }
        else{
          url = 'com.glideapp.servicecatalog_cat_item_view.do?sysparm_id=' + reqItem + '&sysparm_user=' +  
            requestedFor + '&sysparm_location=' + location;
        }
        action.setRedirectURL(url);
      }
    7. . Rota o botão no exemplo anterior passa o. Solicitado para e. Local Valores no URL para o formulário Item da solicitação.
      Verifique se você tem variáveis chamadas requested_for e. local em seu item, produtor de registro ou guia de pedido que mapeiam esses valores usando o script de cliente a seguir. Há um limite para a quantidade de informações que você pode passar, já que o URL tem um tamanho restrito. Evite enviar informações de campos de texto longos usando este método.
      function onLoad() {
        var url = document.location.toString();
        var userKey = 'sysparm_user=';
        var locKey = 'sysparm_location=';
        var userPosition = url.indexOf(userKey);
        var locPosition = url.indexOf(locKey)
        if (userPosition != -1) {
          var user = url.substr(userPosition+userKey.length, 32);
          g_form.setValue('requested_for', user);
        }
        if (locPosition != -1) {
          var loc = url.substr(locPosition+locKey.length, 32);
          g_form.setValue('location', loc);
        }
      }

    Exibir mensagens de campo

    Em vez de usar JavaScript alerta() , para uma aparência mais limpa, você pode exibir um erro no próprio formulário. Os métodos ShowFieldMsg() e. HideFieldMsg() pode ser usado para exibir uma mensagem logo abaixo do próprio campo.

    ShowFieldMsg e. Msg campocampo são métodos que podem ser usados com g_form objeto.

    Esses métodos são usados para mudar a exibição do formulário de registros (formulários Incidente, Problema e Mudança). Esses métodos também podem estar disponíveis em outros scripts de cliente, mas devem ser testados para determinar se funcionam conforme o esperado.

    Quando uma mensagem de campo é exibida em um formulário no carregamento, o formulário rola para garantir que a mensagem do campo esteja visível. Garantir que os usuários não percam uma mensagem de campo porque ela estava fora da tela.

    A propriedade global glide.ui.scroll_to_message_field controla a rolagem automática da mensagem quando o campo do formulário está fora da tela (rola o formulário para o controle ou campo).

    Tabela 1. Detalhe do método
    Detalhe do método Parâmetros Exemplo
    ShowFieldMsg(entrada, mensagem, tipo, [scrollform])
    • entrada - nome do campo ou controle
    • mensagem - mensagem que você deseja exibir
    • tipo: "informações", "erro" ou "aviso"; o padrão é "informações" se não for fornecido
    • Formulário de rolagem - Conjunto (opcional) RolrollForm para falso para impedir a rolagem para a mensagem do campo fora da tela

    Mensagens de erro

    g_form.showFieldMsg('impact','Low impact not allowed with High priority','error');

    Baixo impacto não permitido com mensagem de alta prioridade.

    Mensagem Informativa

    g_form.showFieldMsg('impact', 'Low impact response time can be one week','info');
    //or this defaults to info type
    //g_form.showFieldMsg('impact', 'Low impact response time can be one week');

    O tempo de resposta de baixo impacto pode ser uma mensagem de uma semana.

    HideFieldMsg(entrada)
    • entrada - nome do campo ou controle
    • ClearAll - Parâmetro booliano (opcional) que indica se todas as mensagens devem ser limpas. Se verdadeiro, todas as mensagens do campo serão apagadas. Se falso ou vazio, somente a primeira mensagem será removida
    Removendo uma mensagem
    //this will clear the first message printed to the field
    g_form.hideFieldMsg('impact');

    Suporte legado

    . ShowErrorBox() e. HideErrorBox() métodos não são recomendados.

    Usando código de cliente e servidor em uma ação de IU

    Você pode usar um script para validar a entrada após um clique de Ação de IU no lado do cliente antes de atualizar o registro no lado do servidor. O usuário não precisará clicar no botão duas vezes para validar os campos obrigatórios e atualizar o registro.

    O script chama a função do cliente para validação do lado do cliente e a ação de IU conclui a tarefa se for aprovada. . código executado sem onclick a declaração garante que a função do lado do servidor não seja executada até que a função do cliente não esteja mais em execução. Se for bem-sucedida, a função do lado do servidor será executada e atualizará o registro.

    // Client-side onclick function
    function resolveIncident() {
      // Set the 'Incident state' and 'State' values to 'Resolved', and display mandatory fields
      g_form.setValue('incident_state', 6);
      g_form.setValue('state', 6);
      g_form.setValue('resolved_by', g_user.userID);
    
      // Call the UI action and skip the 'onclick' function
      gsftSubmit(null, g_form.getFormElement(), 'resolve_incident'); //MUST call the 'Action name' set in this UI Action
    }
    
    // Code that runs without 'onclick'
    // Ensure call to server-side function with no browser errors
    if (typeof window == 'undefined')
      serverResolve();
    
    // Server-side function
    function serverResolve() {
      current.incident_state = IncidentState.RESOLVED;
      current.state = IncidentState.RESOLVED;
      current.resolved_by = gs.getUserID();
      current.update();
    }

    GsftSubmit(Controle de cadeia de caracteres, formulário de objeto, cadeia de caracteres action_name)

    Envia um formulário como se o usuário tivesse clicado em uma Ação de IU depois de verificar os campos obrigatórios e executar OnSubmit() scripts de cliente. Permite chamar código do lado do cliente e código do lado do servidor e em uma única ação de IU.

    Tabela 2. Parâmetros
    Nome Tipo Descrição
    controle Cadeia de caracteres Nome de um botão de formulário no qual você deseja simular um clique do usuário. Usar nulo caso contrário.
    formulário Objeto Opcional. O elemento de formulário que contém a entrada enviada. Você pode recuperar este valor chamando G_form.getFormElement() método.
    action_name Cadeia de caracteres Nome da ação. Este valor é fornecido no registro listado na tabela Ações de IU [sys_ui_action].

    Por exemplo, "resolver_incidente" é o nome da ação do Resolver Botão na tabela Incidente [incidente].