Escopo - Global
. 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");
});Priority 1: 11 reassignments
Priority 3: 6 reassignments
Priority 5: 5 reassignmentsMé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.
| 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.
| Nome | Tipo | Descrição |
|---|---|---|
| contagem | Número | Número de registros em cada matriz retornada do fluxo. |
| 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.
| 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. |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se a função de predicado retorna verdadeiro para cada item no fluxo. Valores válidos:
|
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 .
| 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. |
| 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.
| 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. |
| 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.
| Nome | Tipo | Descrição |
|---|---|---|
| fn | Função | Função a ser aplicada ao resultado da consulta que retorna um objeto de fluxo. |
| 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.
| Nome | Tipo | Descrição |
|---|---|---|
| fn | Função | Função a ser aplicada a cada item no fluxo. |
| 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.
| Nome | Tipo | Descrição |
|---|---|---|
| arr | Matriz | Matriz de valores a partir da qual criar o fluxo. |
| 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.
| Nome | Tipo | Descrição |
|---|---|---|
| contagem | Número | Número de registros a serem retornados. |
| 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.
| Nome | Tipo | Descrição |
|---|---|---|
| fn | Função | Função a ser aplicada ao resultado da consulta que usa cada item no fluxo como entrada. |
| 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 .
| 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:
|
| InitialValue | Qualquer | Valor passado para a função como o valor inicial. |
| 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.
| 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. |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se a função de predicado retornou verdadeiro para um item no fluxo. Valores válidos:
|
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.
| Nome | Tipo | Descrição |
|---|---|---|
| contagem | Número | O número máximo de itens do fluxo a serem retornados na matriz. |
| 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"
}
]