Scripts de programação úteis

  • Versão de lançamento: Washingtondc
  • Atualizado 1 de fev. de 2024
  • 6 min. de leitura
  • Um script de regra de negócio especifica as ações que a regra de negócio realiza. Os scripts geralmente incluem variáveis globais predefinidas para fazer referência a itens em seu sistema, como o registro atual. 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 da nossa comunidade.

    Calcular duração de acordo com uma programação

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

    Descrição: uma duração de negócios calcula a duração de abertura para fechamento em um incidente com base em Como criar e usar programaçõesespecíficas. Se não houver nenhuma programação especificada, o script simplesmente usará a primeira programação retornada pela consulta.

    Exemplo de script:

    O exemplo abaixo define a duração resolvida quando o estado do incidente é movido 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

    Tipo: script programado.

    Descrição: este script verifica todas as noites as datas de rescisão dos 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ócios 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ócios.
    Com scripts, você também pode:
    • Especifique a operação que aciona a regra de negócios.
    • Use o bloco de anotações com regras de negócios de exibição para alterar valores de formulário antes que um usuário carregue o formulário.
    • Use a condição OR como em um construtor de condição.

    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 de Regras de negócios 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

    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 current não será criado no banco de dados.

    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.

    Digamos que você queira preencher automaticamente sua Descrição resumida com base na Subcategoria selecionada. Primeiro, crie uma tabela de pesquisa e, em seguida, 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 Password Reset. 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 do script de chamada no campo Comentários para que a equipe do call center reúna informações úteis para passar a um técnico. Já existem Regra de atribuição, Modelos e Assistentes internos que executam funções semelhantes.

    Script de exemplo: uma regra de negócio antes da consulta padrão

    Você pode usar uma regra de negócios de consulta que é executada antes que a consulta do 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 da nossa comunidade.

    Considere o exemplo a seguir de uma regra de negócios padrão que limita o acesso a registros de incidentes.

    Tabela 1. A regra de negócios padrão limita o acesso a registros de incidentes
    Nome Tabela Quando
    consulta de incidente Incidente antes, consulta

    Exemplo de script

    Este exemplo evita que os usuários acessem registros de incidentes, a menos que eles 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 controles de acesso para restringir os registros que os usuários podem ver.

    Script de programação para dias da 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, ele 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 Sistema > Scripts 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 de 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