---
sourceDocument: Referência de API do Xanadu
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/pt-BR/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - pt-BR

ft:publication_title :

    - Referência de API do Xanadu

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# Scripts de programação úteis

# Scripts de programação úteis {#ariaid-title1}

* Versão de lançamento: Xanadu
* 
* Atualizado 1 de ago. de 2024
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 6 min. de leitura

Um script de regra de negócio especifica as ações que a regra de negócio executa. Os scripts geralmente incluem variáveis globais predefinidas para fazer referência a itens em seu sistema, como o registro atual. As variáveis globais estão disponíveis para todas as regras de negócio.  
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](http://community.service-now.com/) da nossa comunidade.

## Calcular a duração de acordo com uma programação {#c_UsefulSchedulingScripts__section_iwg_tky_k1c}

Tipo: antes de atualizar/inserir regra de negócio.

Descrição: uma duração de negócios calcula a duração de aberto a fechado em um incidente com base nos [cronogramas específicos de criação e uso](https://www.servicenow.com/docs/access?context=c_UseSchedules&version=xanadu&pubname=xanadu-platform-administration&ft:locale=en-US). Se não houver programação especificada, o script simplesmente usará a primeira programação retornada pela consulta.

Exemplo de script:  
O exemplo abaixo define a duração de resolvido quando o estado do incidente muda para resolvido.

    var gr_rec = new GlideRecord('incident');
    gr_rec.get('ed92e8d173d023002728660c4cf6a7bc');
    if (gr_rec.incident_state == 6) {
    var dur = calcDurationSchedule(gr_rec.opened_at, gr_rec.sys_updated_on);
    }
     
    function calcDurationSchedule(start, end){ 
      // Get the user   
      var usr = new GlideRecord('sys_user');
      usr.get(gs.getUserID());
      // Create schedule - pass in the sys_id of your standard work day schedule and pass in the users timezone
      var sched = new GlideSchedule('08fcd0830a0a0b2600079f56b1adb9ae',usr.time_zone);
      // Get duration based on schedule/timezone 
      return(sched.duration(start.getGlideObject(), end.getGlideObject()));
    }

## Verificar as próximas datas de rescisão {#c_UsefulSchedulingScripts__section_i1b_cly_k1c}

Tipo: script programado.

Descrição: este script verifica todas as noites as datas de rescisão em contratos que vencem em 90, 50 ou 10 dias (dependendo do campo de duração do contrato).

Exemplo de script:  

    function contractNoticeDue(){
      var now_GR = new GlideRecord("contract");
      now_GR.addQuery("u_contract_status","Active");
      now_GR.query();
      while(now_GR.next()){
        if((now_GR.u_termination_date<= gs.daysAgo(-90))&&(now_GR.u_contract_duration=="Long")){
          now_GR.u_contract_status="In review";}
        elseif((now_GR.u_termination_date<= gs.daysAgo(-50))&&(now_GR.u_contract_duration=="Medium")){
          now_GR.u_contract_status="In review";}
        elseif((now_GR.u_termination_date <= gs.daysAgo(-10))&&(now_GR.u_contract_duration=="Short")){
          now_GR.u_contract_status="In review";}
        now_GR.update();
      }
    }

Use scripts em regras de negócio para realizar tarefas comuns, como:

* Comparando dois campos de data.
* Analisando cargas XML.
* Anulação de uma ação de banco de dados em uma regra de negócio.
{#c_UsefulSchedulingScripts__ul_t24_4jm_jq}  
Com scripts, você também pode:

* Especifique a operação que aciona a regra de negócio.
* Use o bloco de anotações com regras de negócio de exibição para alterar os valores do formulário antes que um usuário carregue o formulário.
* Use a condição OR como você faria em um construtor de condições.
{#c_UsefulSchedulingScripts__ul_rn2_wjm_jq}

Você também pode utilizar a funcionalidade de script do sistema disponível para scripts do lado do servidor.

Você pode usar opções no formulário Regras de negócio para criar condições, definir valores de campo e exibir mensagens de alerta sem precisar escrever um script.

## Anular uma ação de banco de dados em uma regra de negócio {#ariaid-title2}

Durante um script de regra de negócio anterior, você pode cancelar ou anular a ação do banco de dados atual usando o método current.setAbortAction(true).

Por exemplo, se a regra de negócio anterior for executada durante uma ação de inserção e você tiver uma condição no script que chama current.setAbortAction(true), o novo registro armazenado em atual não será criado no banco de dados.

## Adicionar funcionalidade de preenchimento automático {#ariaid-title3}

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.

Digamos que você queira preencher automaticamente sua Descrição Resumida com base na Subcategoria selecionada. Primeiro, crie uma tabela de pesquisa e preencha o campo-chave, neste caso, Subcategoria e o campo preenchido automaticamente, Descrição resumida. Digamos que sua tabela tenha um registro com Subcategoria = Senha e Descrição resumida = Redefinição de senha. Quando o usuário seleciona a subcategoria de Senha no formulário de Incidente, um client script pesquisa o registro correspondente e define a descrição resumida como Redefinição de senha. Configurações de client script... Tipo = onChange, Nome da tabela = incidente, Nome do campo = Subcategoria.  

    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 até mesmo inserir perguntas de script de chamada no campo Comentários para que a equipe do call center reúna informações úteis para passar para um técnico. Já existem regras de atribuição, modelos e assistentes integrados que executam funções semelhantes.

## Script de exemplo: uma regra de negócio padrão antes da consulta {#ariaid-title4}

Você pode usar uma regra de negócio de consulta que é executada antes que a consulta ao banco de dados seja feita para impedir que os usuários acessem determinados registros.  
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](http://community.service-now.com/) da nossa comunidade.

Considere o exemplo a seguir de uma regra de negócio padrão que limita o acesso a registros de incidentes.  
{#c_ExScptDftBfrQryBsnRu__table_jfv_wym_jq__entry__3}

| Nome | Tabela | Quando |
|-|-|-|
| consulta de incidente | Incidente | antes, consulta |
[Tabela 1. A regra de negócio padrão limita o acesso a registros de incidentes]

{#c_ExScptDftBfrQryBsnRu__table_jfv_wym_jq}

**Exemplo de script**  
Este exemplo impede que os usuários acessem registros de incidentes, a menos que tenham a função itil e estejam listados no campo Solicitante ou Aberto por. Portanto, por exemplo, quando os usuários de autoatendimento abrem uma lista de incidentes, eles só podem ver os incidentes que enviaram.

    if(!gs.hasRole("itil")&& gs.isInteractive()){
      var u = gs.getUserID();
      var qc = current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list","CONTAINS", u);
      gs.print("query restricted to user: "+ u);}

Nota:  
Você também pode usar os controles de acesso para restringir os registros que os usuários podem ver.

**Script de programação para dias de semana**

Tipo: Regras de negócio/Client scripts.  
Este script programa o script para os dias da semana. Insira qualquer script onde esteja escrito "Seu script aqui".

    var go ='false';
    var now =new Date(); 
     
    // Correct time zone, which is by default GMT -7 
    now.setHours(now.getHours()+8);
    var day = now.getDay(); 
     
    // No go on Saturday or Sunday 
    if(day !=0&& day !=6){
     
    // (your script here)
     
    }

**Definir campo de data de acordo com a data atual**  
Este script define um campo de data dependendo do dia atual da semana. Neste exemplo, se o dia for de segunda a quarta-feira, ele definirá a data como a próxima segunda-feira; caso contrário, definirá o campo de data como a próxima segunda-feira.

    function setCabDate(){
    var today =new Date();
    var thisDay = today.getDay();
    //returns 0 for Sunday, 1 for Monday, etc. thru 6 for Saturday.
    var thisMon =new GlideDateTime();
    thisMon.setDisplayValue(gs.beginningOfThisWeek());
    var nextMon = thisMon.getNumericValue();
    nextMon +=(1000*60*60*24*7);
     
    if((thisDay <4)&&(thisDay >0))
      //if today is Mon thru Wed (thisDay = 1, 2, or 3), set cab to this coming Monday.
      current.u_req_cab_rev_date.setDateNumericValue(thisMon.getNumericValue());
    elseif((thisDay >=4)||(thisDay ==0))
      //if today is Thurs thru Sun (thisDay = 4, 5, 6, or 0), set cab to next Monday.
      current.u_req_cab_rev_date.setDateNumericValue(nextMon);
    }

Para validar a entrada de todos os campos de data/hora, você pode usar o seguinte em um script de validação (Definição do SistemaScripts de Validação). Como o formato de data/hora está codificado neste script, ele deve corresponder ao formato de data/hora da sua instância. Se o formato de data/hora da sua instância mudar, você deverá atualizar o script de validação.  
Defina o tipo do script de validação como Data/Hora. Em seguida, com este script de validação, se um usuário inserir um formato incorreto em um campo de data/hora, ele receberá uma mensagem de erro.

    function validate(value){
    // empty fields are still valid dates 
    if(!value)returntrue; 
     
    // We "should" have the global date format defined always defined. but there's always that edge case... 
    if(typeof g_user_date_time_format !=='undefined')return isDate(value, g_user_date_time_format); 
     
    // if we don't have that defined, we can always try guessing 
    return parseDate(value)!==null;}

Figura 1. Validação de data/hora

