Escopo - Global

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 11 min. de leitura
  • . Fluxo A API fornece métodos para interagir com um fluxo de itens, como registros. Por exemplo, você pode usar Foreach() método para atualizar o estado de cada registro em um fluxo retornado pelo GlideQuery API.

    Você pode obter um objeto de fluxo das seguintes maneiras:

    • Instancie um objeto de fluxo usando o construtor.
    • Retorne um objeto de Fluxo do GlideQuery.select() método. Para obter mais informações, consulte GlideQuery .

    Este método é estático e não requer uma instância da classe: FromArray() .

    Use Fluxo API em scripts do lado do servidor com escopo ou globais. Esta API requer o plug-in GlideQuery [com.sn_glidequery].

    Implementação

    Esta API pode funcionar com GlideQuery e. Opcional APIs em um padrão do construtor em que o método chama a cadeia, cada método criado no resultado retornado do método anterior. Use métodos para definir os atributos da consulta. Os métodos não são executados até que você chame um método de terminal, um método que retorna um resultado de consulta, permitindo que você defina os requisitos da consulta antes de executá-la.

    Se a consulta retornar um único registro, o sistema encapsulará o resultado em um objeto Opcional. Se a consulta retornar um fluxo de registros, o sistema encapsulará o resultado em um objeto Fluxo. Esses objetos permitem gerenciar o resultado usando um conjunto de métodos em cada API.

    Por exemplo, isso O script executa uma consulta na tabela Tarefa, agrupa os registros por prioridade e retorna cada prioridade que tem reatribuições totais maiores que quatro.

    var query = new global.GlideQuery('task')
        .where('active', true) //Returns new GlideQuery object with a "where" clause.
        .groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
        .aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
        .having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
        .select() //Returns a stream of records wrapped in a Stream object.  
        .forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result. 
          gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
        });
    Saída:
    Priority 1: 11 reassignments
    Priority 3: 6 reassignments
    Priority 5: 5 reassignments

    Métodos de terminal

    Por motivos de desempenho, uma consulta busca dados somente quando você chama um método de terminal. Estes são os métodos de terminal do Fluxo classe:

    Stream - Fluxo(função nextFn)

    Instancia um objeto de fluxo.

    Em vez de usar este construtor, você pode retornar um objeto de fluxo com base em uma consulta usando GlideQuery API.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    NextFn Função Uma função que recupera o próximo item no fluxo.

    Este exemplo mostra como criar um objeto de fluxo com base em um gerador de números aleatórios. Certifique-se de incluir limite () método para evitar a criação de um loop infinito.

    new Stream(Math.random)
       .map(Math.round)
       .map(function (num) { 
          return num === 1 ? 'heads' : 'tails'; 
       })
       .limit(10)
       .forEach(gs.info)
    

    Saída:

    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: tails
    *** Script: tails
    *** Script: tails

    Fluxo - bloco (contagem de números)

    Retorna resultados em lotes de matrizes, cada uma contendo o número de registros passados para o método.

    Tabela 2. Parâmetros
    Nome Tipo Descrição
    contagem Número Número de registros em cada matriz retornada do fluxo.
    Tabela 3. Retornos
    Tipo Descrição
    Fluxo Objeto usado para interagir com um fluxo de itens, como registros.

    Este exemplo mostra como consultar uma tabela e dividir o resultado em lotes de matrizes.

    var chunkResult = new GlideQuery('cmdb_ci_hardware')
        .select('asset', 'purchase_date')
        .limit(10)
        .chunk(5) //Returns arrays of 5 sys_ids at a time
        .forEach(function (chunk){ 
            gs.info(JSON.stringify(chunk, null, 2)); 
        });

    Saída:

    *** Script: [
      {
        "asset": "2fa9680d3790200044e0bfc8bcbe5dfb",
        "purchase_date": "2022-02-28",
        "sys_id": "2ba9680d3790200044e0bfc8bcbe5dfc"
      },
      {
        "asset": "73c1fa8837f3100044e0bfc8bcbe5ded",
        "purchase_date": "2017-12-05",
        "sys_id": "b4fd7c8437201000deeabfc8bcbe5dc1"
      },
      {
        "asset": "cbc1ba8837f3100044e0bfc8bcbe5dad",
        "purchase_date": "2017-12-05",
        "sys_id": "25fd3c8437201000deeabfc8bcbe5dea"
      },
      {
        "asset": "8fc1ba8837f3100044e0bfc8bcbe5da9",
        "purchase_date": null,
        "sys_id": "108a9205c611227500786e160f9d343e"
      },
      {
        "asset": "27c1fa8837f3100044e0bfc8bcbe5dd8",
        "purchase_date": "2017-06-06",
        "sys_id": "a9a2d111c611227601fb37542399caa8"
      }
    ]
    *** Script: [
      {
        "asset": "93c1fa8837f3100044e0bfc8bcbe5d30",
        "purchase_date": "2017-12-05",
        "sys_id": "6b43105c37301000deeabfc8bcbe5db2"
      },
      {
        "asset": "a2c0b1213784200044e0bfc8bcbe5de3",
        "purchase_date": "2017-12-05",
        "sys_id": "aac0b1213784200044e0bfc8bcbe5de3"
      },
      {
        "asset": "33c1fa8837f3100044e0bfc8bcbe5def",
        "purchase_date": "2017-12-05",
        "sys_id": "d0e8761137201000deeabfc8bcbe5da7"
      },
      {
        "asset": "53c1fa8837f3100044e0bfc8bcbe5d1f",
        "purchase_date": "2017-12-05",
        "sys_id": "53fdbc8437201000deeabfc8bcbe5d10"
      },
      {
        "asset": "f1c031213784200044e0bfc8bcbe5de0",
        "purchase_date": "2017-12-05",
        "sys_id": "71c031213784200044e0bfc8bcbe5de1"
      }
    ]

    Este exemplo mostra como criar uma consulta secundária usando lotes de IDs. Quando você liga para FlatMap() método depois de usar o. bloco () , o sistema itera no lote de registros em vez de cada registro individual.

    var chunkResult = new global.GlideQuery('cmdb_ci_hardware')
        .select('sys_id')
        .map(function (device) { return device.sys_id; })
        .chunk(5) //Returns arrays of 5 sys_ids at a time
        .flatMap(function (deviceIds) {
            return new GlideQuery('cmdb_sam_sw_install')
                .where('installed_on', 'IN', deviceIds)
                .select('software_model', 'installed_on');
        })
    
    gs.info(JSON.stringify(chunkResult));

    Every (predicado de função)

    Aplica uma função de predicado a cada item no objeto Fluxo. Se o predicado retornar verdadeiro para cada item no fluxo, o método retornará verdadeiro. Se o predicado retornar falso para qualquer item no fluxo, o método retornará falso.

    Tabela 4. Parâmetros
    Nome Tipo Descrição
    predicado Função Função de predicado a ser aplicada a cada registro ou item dentro do objeto Fluxo. Cada item no fluxo deve ser usado como entrada e retornar um booliano.
    Tabela 5. Retornos
    Tipo Descrição
    Booliano

    Sinalizador que indica se a função de predicado retorna verdadeiro para cada item no fluxo.

    Valores válidos:
    • Verdadeiro: A função de predicado retorna verdadeiro para cada item no fluxo.
    • Falso: A função de predicado não retorna verdadeiro para cada item no fluxo.

    Este exemplo mostra como aplicar uma função de predicado a cada item em um fluxo.

    var hasOnlyShortDescriptions = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .every(function (t) { 
           return t.description.length < 10; 
           });
    
    gs.info(hasOnlyShortDescriptions);

    Saída:

    false

    Filter (predicado de função)

    Aplica uma função de predicado a cada item no objeto Fluxo. Se o predicado retornar verdadeiro, o método retornará o fluxo. Se o predicado retornar falso, ele retornará um objeto Fluxo vazio.

    Para obter um melhor desempenho, use onde() , WhereNotNull() e WhereNull() métodos no GlideQuery em vez deste método sempre que possível. Consulte GlideQuery .

    Tabela 6. Parâmetros
    Nome Tipo Descrição
    predicado Função Função de predicado a ser aplicada a cada registro ou item dentro do objeto Fluxo. Cada item no fluxo deve ser usado como entrada e retornar um booliano.
    Tabela 7. Retornos
    Tipo Descrição
    Fluxo Objeto usado para interagir com um fluxo de itens, como registros.

    Este exemplo mostra como verificar todos os registros na tabela Tarefa em relação a um filtro definido. Se os registros corresponderem ao filtro, o sistema retornará o fluxo de registros. Caso contrário, ele retornará um objeto de fluxo vazio.

    var shoutingTasks = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .filter(function (task) { 
           return task.description.toUpperCase() === task.description; 
       })

    Find (predicado de função)

    Retorna o primeiro registro ou item no objeto Fluxo que corresponde à função de predicado. Se nenhuma função de predicado for fornecida, o método retornará o primeiro registro ou item no fluxo.

    Tabela 8. Parâmetros
    Nome Tipo Descrição
    predicado Função Opcional. Função de predicado a ser aplicada aos itens dentro do objeto Fluxo. Cada item no fluxo deve ser usado como entrada e retornar um booliano.
    Tabela 9. Retornos
    Tipo Descrição
    Opcional Objeto que contém o registro retornado.

    Este exemplo mostra como retornar o primeiro registro do fluxo.

    var UserOptional = new global.GlideQuery('sys_user')
       .where('active', true)
       .where('company.name', 'ServiceNow')
       .select()
       .find()
       .map(function (user) { 
          return JSON.stringify(user); 
       })
    
    gs.info(UserOptional);

    Saída:

    Optional<{"sys_id":"babb4639b76233004fbc2089ee11a97f"}>

    Fluxo - flatMap(function fn)

    Aplica uma função a cada item em um fluxo. Retorna outro fluxo que você pode iterar.

    Use este método em vez de mapa() se a função retornar um segundo fluxo de registros.

    Tabela 10. Parâmetros
    Nome Tipo Descrição
    fn Função Função a ser aplicada ao resultado da consulta que retorna um objeto de fluxo.
    Tabela 11. Retornos
    Tipo Descrição
    Fluxo Objeto que contém o fluxo de registros atualizados após a aplicação da função.

    Este exemplo mostra como consultar a tabela Usuário e criar uma consulta secundária a partir do resultado. Este exemplo executa uma consulta nº 1, o que pode causar problemas de desempenho. Evite este caso de uso em um ambiente de produção.

    var records = new global.GlideQuery('sys_user')
       .where('last_login', '>', '2015-12-31')
       .select('first_name', 'last_name')
       .flatMap(function (u) {
          return new global.GlideQuery('task')
               .where('closed_by', u.sys_id)
               .select('closed_at', 'description')
               .map(function (t) {
                    return {
                        first_name: u.first_name,
                        last_name: u.last_name,
                        description: t.description,
                        closed_at: t.closed_at
                     };
               });
          })
       .limit(5)
       .toArray(100);
    
    gs.info(JSON.stringify(records));

    Saída:

    [
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:14:56"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:43"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-06-15 06:59:05"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:33"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:14"
       }
    ]

    Fluxo - foreach(function fn)

    Aplica a função especificada a cada registro ou item no fluxo.

    Tabela 12. Parâmetros
    Nome Tipo Descrição
    fn Função Função a ser aplicada a cada item no fluxo.
    Tabela 13. Retornos
    Tipo Descrição
    Nenhum(a)

    Este exemplo mostra como imprimir o resultado de cada item no fluxo.

    var firstNames = new global.GlideQuery('sys_user')
       .select('first_name')
       .forEach(function (u) { 
          gs.debug(u.first_name); 
       });

    Saída:

    *** Script: [DEBUG] survey
    *** Script: [DEBUG] Lucius
    *** Script: [DEBUG] Jimmie
    *** Script: [DEBUG] Melinda
    *** Script: [DEBUG] Jewel
    *** Script: [DEBUG] Sean
    *** Script: [DEBUG] Jacinto
    *** Script: [DEBUG] Krystle
    *** Script: [DEBUG] Billie
    *** Script: [DEBUG] Christian
    *** Script: [DEBUG] Naomi
    ...

    Fluxo - fromArray(objeto arr)

    Retorna um objeto de fluxo que contém os valores da matriz fornecida.

    Nota:
    Este método é estático. Você não precisa de uma instância da classe para usar este método.
    Tabela 14. Parâmetros
    Nome Tipo Descrição
    arr Matriz Matriz de valores a partir da qual criar o fluxo.
    Tabela 15. Retornos
    Tipo Descrição
    Fluxo Objeto usado para interagir com um fluxo de itens, como registros.

    Este exemplo mostra como criar um objeto de fluxo que contém uma matriz de valores.

    var nameStream = Stream.fromArray(['Bob', 'Sue', 'Sam'])
       .map(function (name) { 
          return name.toUpperCase(); 
       })
       .toArray(3);
    
    gs.info(JSON.stringify(nameStream));

    Saída:

    ["BOB","SUE","SAM"]

    Limite (contagem de números)

    Limita o número de resultados retornados pelo fluxo.

    Para obter um melhor desempenho, use limite () método no GlideQuery classe sempre que possível. Consulte GlideQuery . Pode ser necessário usar este método para limitar os resultados com Stream.flatMap() método.

    Tabela 16. Parâmetros
    Nome Tipo Descrição
    contagem Número Número de registros a serem retornados.
    Tabela 17. Retornos
    Tipo Descrição
    Fluxo Objeto usado para interagir com um fluxo de itens, como registros.

    Este exemplo mostra como limitar os resultados retornados do Stream.flatMap() método.

    var records = new global.GlideQuery('sys_user')
       .where('last_login', '>', '2015-12-31')
       .select('first_name', 'last_name')
       .flatMap(function (u) {
          return new GlideQuery('task')
               .where('closed_by', u.sys_id)
               .select('closed_at', 'description')
               .map(function (t) {
                    return {
                        first_name: u.first_name,
                        last_name: u.last_name,
                        description: t.description,
                        closed_at: t.closed_at
                     };
               });
          })
       .limit(5)
       .forEach(function (task){
          gs.info(JSON.stringify(task, null, 2));
       });

    Saída:

    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:16"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:22"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:27"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:31"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:54"
    }

    Map(function fn)

    Aplica uma função a cada item em um fluxo e retorna o objeto de fluxo atualizado.

    Tabela 18. Parâmetros
    Nome Tipo Descrição
    fn Função Função a ser aplicada ao resultado da consulta que usa cada item no fluxo como entrada.
    Tabela 19. Retornos
    Tipo Descrição
    Fluxo Objeto que contém o fluxo de registros atualizados após a aplicação da função.

    Este exemplo mostra como aplicar uma função a cada item no fluxo.

    var users = new global.GlideQuery('sys_user')
       .whereNotNull('first_name')
       .select('first_name')
       .map(function (u) { 
          return u.first_name.toUpperCase(); 
       })
       .toArray(100);
    
    gs.info(JSON.stringify(users));

    Saída:

    [
       "SURVEY",
       "LUCIUS",
       "JIMMIE",
       "MELINDA",
       "JEWEL",
       "SEAN",
       "JACINTO",
       "KRYSTLE",
       "BILLIE",
       "CHRISTIAN",
       ...
    ]

    Fluxo - reduce(function reducerFn, any initialValue)

    Executa uma função de redutor em cada item no fluxo, resultando em um único valor de saída.

    Este método é semelhante ao JavaScript nativo reduce() método. Para obter mais informações, consulte documentação w3schools .

    Tabela 20. Parâmetros
    Nome Tipo Descrição
    ReduceFn Função Função a ser aplicada a cada item no fluxo que reduz o fluxo a um único valor. Esta função deve ter dois argumentos:
    • acc Acumulador que acumula todos os valores retornados pela função.
    • atual Item atual sendo acumulado na matriz.
    InitialValue Qualquer Valor passado para a função como o valor inicial.
    Tabela 21. Retornos
    Tipo Descrição
    Qualquer Total acumulado de todos os itens retornados pela função redutor.

    Este exemplo mostra como retornar o registro com o nome mais longo da tabela Usuário.

    var longestName = new global.GlideQuery('sys_user')
       .whereNotNull('first_name')
       .select('first_name')
       .reduce(function (acc, cur) {
           return cur.first_name.length > acc.length
               ? cur.first_name
               : acc;
           }, '');
    
    gs.info(JSON.stringify(longestName));

    Saída:

    "ATF_TestItilUser1"

    Fluxo - Some (predicado de função)

    Aplica uma função de predicado, uma função que usa um único valor e retorna verdadeiro ou falso, a cada item no fluxo. Se o predicado retornar verdadeiro para qualquer item no fluxo, o método retornará verdadeiro.

    Tabela 22. Parâmetros
    Nome Tipo Descrição
    predicado Função Função de predicado a ser aplicada aos itens dentro do objeto Fluxo. Deve retornar um valor booliano.
    Tabela 23. Retornos
    Tipo Descrição
    Booliano

    Sinalizador que indica se a função de predicado retornou verdadeiro para um item no fluxo.

    Valores válidos:
    • Verdadeiro: A função de predicado retornou verdadeiro para um item no fluxo.
    • Falso: A função de predicado não retornou verdadeiro para um item no fluxo.

    Este exemplo mostra como verificar se as descrições na tabela de tarefas têm mais de 1 000 caracteres.

    var hasLongDescriptions = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .some(function (t) { 
          return t.description.length > 1000; 
       });
    
    
    gs.info(hasLongDescriptions);

    Saída:

    false

    Fluxo - toArray (contagem de números)

    Retorna uma matriz que contém o número fornecido de itens do fluxo.

    Tabela 24. Parâmetros
    Nome Tipo Descrição
    contagem Número O número máximo de itens do fluxo a serem retornados na matriz.
    Tabela 25. Retornos
    Tipo Descrição
    Matriz Matriz que contém o número fornecido de itens do fluxo.

    Este exemplo mostra como transformar um fluxo de registros em uma matriz JavaScript.

    var users = new global.GlideQuery('sys_user')
        .limit(10)
        .select('first_name', 'last_name')
        .toArray(50);
    
    gs.info(JSON.stringify(users));

    Saída:

    [
       {
          "first_name":"Jewel",
          "last_name":"Agresta",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d64"
       },
       {
          "first_name":"Sean",
          "last_name":"Bonnet",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d6d"
       },
       {
          "first_name":"Jacinto",
          "last_name":"Gawron",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d76"
       },
       {
          "first_name":"Krystle",
          "last_name":"Stika",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d7f"
       },
       {
          "first_name":"Billie",
          "last_name":"Cowley",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d88"
       },
       {
          "first_name":"Christian",
          "last_name":"Marnell",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d91"
       }
    ]