GlideDBFunctionBuilder - com escopo, global

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. de 2024
  • 13 min. de leitura
  • A API GlideDBFunctionBuilder fornece métodos para criar funções para executar operações SQL no banco de dados.

    Esses métodos fornecem uma maneira de criar funções do Sistema de gestão de banco de dados relacional (RDBMS) para executar operações SQL em dados de registro. Você pode usar esses métodos em scripts de servidor com escopo e globais.

    Para usar funções da plataforma:
    • Construa uma função usando o construtor GlideDBFunctionBuilder e os métodos associados.
    • Depois de criar uma função, você aplica a função ao registro atual usando o método addFunction() da classe GlideRecord.
    • Adicione a função a uma consulta usando o método addQuery() da classe GlideRecord.
    • Recupere os resultados da função usando os métodos de API GlideRecord existentes, como getValue() e getElement().

    Por exemplo:

    var functionBuilder = new GlideDBFunctionBuilder();
    var dbFunction = functionBuilder.position();
    dbFunction = functionBuilder.constant('my'); // search_term: Text to search for in the specified table column.
    dbFunction = functionBuilder.field('short_description');  // column: Name of the table column to search.
    dbFunction = functionBuilder.build();
    
    gs.log(dbFunction);
    
    var gr_incident = new GlideRecord('incident'); // Table containing the column to search
    gr_incident.addFunction(dbFunction);
    gr_incident.addQuery("short_description", "CONTAINS", "my");
    gr_incident.setLimit(20);
    gr_incident.query();
    while(gr_incident.next()) {
      gs.info(gr_incident.short_description + "\n position('my', short_description): " + gr_incident.getValue(dbFunction));
    }

    Para obter informações adicionais sobre campos de função, consulte Function field.

    GlideDBFunctionBuilder com escopo - GlideDBFunctionBuilder()

    Instancia um objeto GlideDBFunctionBuilder.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    Nenhum
    var builder = new GlideDBFunctionBuilder();
    

    GlideDBFunctionBuilder com escopo - andFunc(expr1, expr2, …)

    Inicia uma nova expressão AND, que retorna verdadeiro somente se todas as expressões fornecidas como parâmetros forem verdadeiras. Pelo menos uma expressão de valor booliano deve ser fornecida como um parâmetro.

    Tabela 2. Parâmetros
    Nome Tipo Descrição
    expressão Expressão de GlideFunction com valor booliano No momento, as funções glide que atendem a esses critérios incluem and(), or()e compare().
    Tabela 3. Retorna
    Tipo Descrição
    Cadeia de caracteres A expressão GlideFunction resultante.

    O exemplo a seguir mostra como definir e criar uma declaração de caso simples.

    var expr = new GlideDBFunctionBuilder() 
        .andFunc() 
            .compare().field('first_name').constant('=').constant('John').endfunc() 
            .compare().field('active').constant('=').constant(1).endfunc() 
        .endfunc() 
        .build(); 
    gs.info("Expression: " + expr);

    Saída:

    Expression: glidefunction:and(compare(first_name,'=','John'),compare(active,'=','1'))

    GlideDBFunctionBuilder com escopo - add()

    Adiciona os valores de dois ou mais campos inteiros.

    Use o método field(String field) para definir os campos nos quais a operação é realizada.

    Tabela 4. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 5. Retorna
    Tipo Descrição
    vazio
    var functionBuilder = new GlideDBFunctionBuilder();
    var myAddingFunction = functionBuilder.add();
    myAddingFunction = functionBuilder.field('order');
    myAddingFunction = functionBuilder.field('priority');
    myAddingFunction = functionBuilder.build();

    GlideDBFunctionBuilder com escopo - build()

    Cria a função de banco de dados definida pelo objeto GlideDBFunctionBuilder.

    Tabela 6. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 7. Retorna
    Tipo Descrição
    vazio
    var functionBuilder = new GlideDBFunctionBuilder();
    var myAddingFunction = functionBuilder.add();
    myAddingFunction = functionBuilder.field('order');
    myAddingFunction = functionBuilder.field('priority');
    myAddingFunction = functionBuilder.build();
    gs.info(myAddingFunction);
    Saída:
    *** Script: glidefunction:add(order,priority)

    GlideDBFunctionBuilder com escopo - aglutinar ()

    Usa qualquer número de campos separados por vírgula como entrada e retorna o primeiro valor não vazio.

    Tabela 8. Parâmetros
    Nome Tipo Descrição
    argumento Cadeia de caracteres Uma lista que contém um valor constante (cadeias de caracteres, objetos, boolianos) ou um campo. Formato aceito: glidefunction:coalesce(<string, string, string, etc.> ) . Um argumento pode ter qualquer número de parâmetros, mas deve ter pelo menos um parâmetro definido.
    Tabela 9. Retorna
    Tipo Descrição
    Cadeia de caracteres O primeiro valor na lista de argumentos que não é nulo. Se nenhum valor for não nulo, será retornado nulo. Se nenhum argumento for fornecido na criação do objeto de função, "função inválida" será retornado como uma cadeia de caracteres.

    A solicitação de exemplo a seguir demonstra como formar a função de guia de aglutinação para retornar valores nulos de acordo com os campos closed_at, resolved_at e sys_updated_on.

    var gr = new GlideRecord('incident');
    var func = "glidefunction:coalesce(closed_at, resolved_at,sys_updated_on)";
    gr.addFunction(func);
    gr.query(); 
    while(gr.next())
    gs.info(gr.getValue(func));

    O script retorna o primeiro valor não nulo de um campo desta lista: [closed_at, resolved_at, sys_updated_on] para cada registro de incidente na tabela de incidentes e os gera com gs.info.

    2016-12-14 02:46:44
    2018-01-09 22:55:16
    2018-01-07 22:54:55
    2018-01-13 23:02:54
    2018-01-09 23:12:02

    GlideDBFunctionBuilder com escopo - compare(exp1, op, exp2)

    Inicia uma nova expressão COMPARE que executa uma comparação entre duas expressões.

    Tabela 10. Parâmetros
    Nome Tipo Descrição
    exp1 Cadeia de caracteres Expressão de comparação à esquerda. Pode ser uma constante, referência a um campo ou outra função do Glide.
    op Cadeia de caracteres Um operador de comparação entre aspas. Valores aceitos:
    • “’=’”
    • “’<’”
    • “’>’”
    • “’<=’”
    • “’>=’”
    exp2 Cadeia de caracteres Expressão de comparação à direita. Pode ser uma constante, referência a um campo ou outra função do Glide.
    Tabela 11. Retorna
    Tipo Descrição
    Cadeia de caracteres A expressão GlideFunction resultante.

    O exemplo a seguir mostra como criar uma expressão glidefunction usando a operação compare(). Depois de chamar compare(), três chamadas adicionais devem ser feitas para especificar cada um dos três parâmetros necessários, que são concluídos por uma única chamada para endfun(). Abaixo, criamos duas expressões compare() separadas e as fornecemos como parâmetros para a expressão or().

    var expr = new GlideDBFunctionBuilder() 
        .orFunc() 
            .compare().field('first_name').constant('=').constant('John').endfunc() 
            .compare().field('active').constant('=').constant(1).endfunc() 
        .endfunc() 
        .build();

    Saída:

    Expression: glidefunction:or(compare(first_name,'=','John'),compare(active,'=','1'))

    GlideDBFunctionBuilder com escopo - concat()

    Concatena os valores de dois ou mais campos.

    Use o método field(String field) para definir os campos nos quais a operação é realizada.

    Tabela 12. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 13. Retorna
    Tipo Descrição
    vazio
    var functionBuilder = new GlideDBFunctionBuilder();
    var myConcatFunction = functionBuilder.concat();
    myConcatFunction = functionBuilder.field('short_description');
    myConcatFunction = functionBuilder.field('caller_id.name');
    myConcatFunction = functionBuilder.build();

    GlideDBFunctionBuilder com escopo - constante (cadeia de caracteres constante)

    Define um valor constante a ser usado na função. Se usada com o método dayofweek(), a cadeia de caracteres definirá se domingo ou segunda-feira será usado como o primeiro dia da semana.

    Tabela 14. Parâmetros
    Nome Tipo Descrição
    constante Cadeia de caracteres Um valor constante usado em uma função.

    Quando usado com o método dayofweek(), o valor define se a semana começa em um domingo ou segunda-feira.

    • 1: a semana começa no domingo.
    • 2: a semana começa na segunda-feira.

    Esta definição permite que o método dayofweek() retorne o dia correto da semana a partir de uma determinada data. Se um valor diferente de 1 ou 2 for fornecido, o método dayofweek() usará o domingo como o primeiro dia da semana.

    Tabela 15. Retorna
    Tipo Descrição
    vazio

    O exemplo de código a seguir mostra como chamar este método.

    var functionBuilder = new GlideDBFunctionBuilder();
    var dbFunction = functionBuilder.position();
    dbFunction = functionBuilder.constant('my');
    dbFunction = functionBuilder.field('short_description');
    dbFunction = functionBuilder.build();
    
    gs.log(dbFunction);
    
    var g = new GlideRecord('incident');
    g.addFunction(dbFunction);
    g.addQuery("short_description", "CONTAINS", "my");
    g.setLimit(20);
    g.query();
    while(g.next()) {
      gs.info(g.short_description + "\n position('my', short_description): " + g.getValue(dbFunction));
    }

    GlideDBFunctionBuilder com escopo - datediff()

    Determina a duração usando uma determinada data/hora de início e data/hora de término.

    Use o método field(String field) para definir campos de data/hora de início e de término.

    Tabela 16. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 17. Retorna
    Tipo Descrição
    vazio
    var functionBuilder = new GlideDBFunctionBuilder();
    var myDateDiffFunction = functionBuilder.datediff();
    myDateDiffFunction = functionBuilder.field('sys_updated_on');
    myDateDiffFunction = functionBuilder.field('opened_at');
    myDateDiffFunction = functionBuilder.build();

    GlideDBFunctionBuilder com escopo - dayofweek()

    Retorna um número inteiro que representa o dia da semana para uma determinada data.

    Use o método field(String field) para definir a data/hora fornecidas. Use o método constante (cadeia de caracteres constante) para definir se a semana começa em um domingo ou segunda-feira.

    Este método pode ser usado somente com bancos de dados MySQL, Oracle e Microsoft SQL Server. Se estiver usando um banco de dados Oracle, a configuração NLS_TERRITORY deverá ser definida para um território com domingo como o primeiro dia da semana.

    Tabela 18. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 19. Retorna
    Tipo Descrição
    Inteiro

    Se o primeiro dia da semana estiver definido como domingo no método constante (cadeia de caracteres constante), os valores de retorno serão associados aos seguintes dias da semana:

    • 1: domingo
    • 2: segunda-feira
    • 3: terça-feira
    • 4: quarta-feira
    • 5: quinta-feira
    • 6: sexta-feira
    • 7: sábado

    Se o primeiro dia da semana estiver definido como segunda-feira:

    • 1: segunda-feira
    • 2: terça-feira
    • 3: quarta-feira
    • 4: quinta-feira
    • 5: sexta-feira
    • 6: sábado
    • 7: domingo

    Se um valor diferente de 1 ou 2 for fornecido no método constante (cadeia de caracteres constante), o método dayofweek() usará o domingo como o primeiro dia da semana.

    var functionBuilder = new GlideDBFunctionBuilder();
    var dayOfWeekFunction = functionBuilder.dayofweek();
    dayOfWeekFunction = functionBuilder.field('opened_at');
    dayOfWeekFunction = functionBuilder.constant('2');
    dayOfWeekFunction = functionBuilder.build();
    
    var now_GR = new GlideRecord('incident');
    now_GR.addFunction(dayOfWeekFunction);
    now_GR.query();
    while(now_GR.next())
    gs.log(now_GR.getValue(dayOfWeekFunction));
    

    GlideDBFunctionBuilder com escopo - divide()

    Divide o valor de um campo inteiro por outro.

    Use o método field(String field) para definir os campos nos quais a operação é realizada.

    Tabela 20. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 21. Retorna
    Tipo Descrição
    vazio
    var functionBuilder = new GlideDBFunctionBuilder();
    var myDivideFunction = functionBuilder.divide();
    myDivideFunction = functionBuilder.field('order');
    myDivideFunction = functionBuilder.field('priority');
    myDivideFunction = functionBuilder.build();

    GlideDBFunctionBuilder com escopo - field(campo de cadeia de caracteres)

    Define um campo no qual uma operação SQL é executada.

    Tabela 22. Parâmetros
    Nome Tipo Descrição
    Assunto: Cadeia de caracteres O campo no qual você está executando a operação SQL.
    Tabela 23. Retorna
    Tipo Descrição
    vazio
    var functionBuilder = new GlideDBFunctionBuilder();
    var myAddingFunction = functionBuilder.add();
    myAddingFunction = functionBuilder.field('order');
    myAddingFunction = functionBuilder.field('priority');
    myAddingFunction = functionBuilder.build();

    GlideDBFunctionBuilder com escopo - comprimento ()

    Determina o número de unidades de código em um campo.

    Use o método field(String field) para definir os campos nos quais a operação é realizada.

    Tabela 24. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 25. Retorna
    Tipo Descrição
    vazio
    var functionBuilder = new GlideDBFunctionBuilder();
    var myLengthFunction = functionBuilder.length();
    myLengthFunction = functionBuilder.field('short_description');
    myLengthFunction = functionBuilder.build();
    

    GlideDBFunctionBuilder com escopo - multiplicar ()

    Multiplica os valores de dois campos inteiros.

    Use o método field(String field) para definir os campos nos quais a operação é realizada.

    Tabela 26. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 27. Retorna
    Tipo Descrição
    vazio
    var functionBuilder = new GlideDBFunctionBuilder();
    var myMultiplyFunction = functionBuilder.multiply();
    myMultiplyFunction = functionBuilder.field('order');
    myMultiplyFunction = functionBuilder.field('priority');
    myMultiplyFunction = functionBuilder.build();

    GlideDBFunctionBuilder com escopo - orFunc(expression)

    Inicia uma nova expressão OR que retorna verdadeiro se pelo menos uma das expressões fornecidas como um parâmetro for verdadeira.

    Pelo menos uma expressão de valor booliano deve ser fornecida como um parâmetro.

    Tabela 28. Parâmetros
    Nome Tipo Descrição
    expressão Expressão de GlideFunction com valor booliano No momento, as funções do glide que atendem a esses critérios incluem and(), or() e compare().
    Tabela 29. Retorna
    Tipo Descrição
    Cadeia de caracteres A expressão GlideFunction resultante.

    O exemplo a seguir mostra como criar uma expressão glidefunction usando a operação or(). A expressão retornará verdadeiro se o campo first_name for 'John" ou o campo active for verdadeiro. A cadeia de caracteres de expressão resultante pode ser usada sempre que expressões glidefunction forem aceitas.

    var expr = new GlideDBFunctionBuilder() 
        .orFunc() 
            .compare().field('first_name').constant('=').constant('John').endfunc() 
            .compare().field('active').constant('=').constant(1).endfunc() 
        .endfunc() 
        .build(); 
    gs.info("Expression: " + expr);

    Saída:

    Expression: glidefunction:or(compare(first_name,'=','John'),compare(active,'=','1'))

    GlideDBFunctionBuilder com escopo - posição ()

    Retorna a primeira ocorrência de uma cadeia de caracteres especificada em uma coluna de uma tabela.

    Opcionalmente, você pode especificar um local na cadeia de caracteres para iniciar a pesquisa. Este método é igual ao LOCATE (subcadeia de caracteres, str, posição) no MySQL.

    Você pode usar este método para encontrar pontos de dados interessantes ou relatórios personalizados por analistas de dados. Normalmente, você usará este método para armazenamento de dados ou para extrair, transformar e carregar dados (ETL) em sistemas menos flexíveis.

    Para usar este método em registros de Dicionário, use glidefunction:position(<serarch_term> ,<column> ) .

    Nota:
    Os parâmetros especificados na tabela a seguir não são passados com a chamada de método, mas são definidos no objeto GlideDBFunctionBuilder().
    Tabela 30. Parâmetros
    Nome Tipo Descrição
    search_term Cadeia de caracteres Texto a ser pesquisado na coluna da tabela especificada.
    coluna Cadeia de caracteres Nome da coluna da tabela a ser pesquisada. A tabela é especificada no objeto GlideRecord associado.
    posição_início Número Opcional. Local no texto da coluna para iniciar a pesquisa.

    Padrão: 1

    Tabela 31. Retorna
    Tipo Descrição
    Nenhum(a) Posição da primeira ocorrência do termo de pesquisa especificado.

    Retorna 0 se o termo de pesquisa não for encontrado no texto associado. Retorna NULO se algum argumento necessário for NULO.

    O exemplo de código a seguir mostra como chamar este método.

    var functionBuilder = new GlideDBFunctionBuilder();
    var dbFunction = functionBuilder.position();
    dbFunction = functionBuilder.constant('my'); // search_term: Text to search for in the specified table column.
    dbFunction = functionBuilder.field('short_description');  // column: Name of the table column to search.
    dbFunction = functionBuilder.build();
    
    gs.log(dbFunction);
    
    var gr_incident = new GlideRecord('incident'); // Table containing the column to search
    gr_incident.addFunction(dbFunction);
    gr_incident.addQuery("short_description", "CONTAINS", "my");
    gr_incident.setLimit(20);
    gr_incident.query();
    while(gr_incident.next()) {
      gs.info(gr_incident.short_description + "\n position('my', short_description): " + gr_incident.getValue(dbFunction));
    }

    Saída:

    *** Script: glidefunction:position('my',short_description)
    *** Script: Wireless access is down in my area
     position('my', short_description): 28
    *** Script: Printer in my office is out of toner
     position('my', short_description): 12
    *** Script: Reset my password
     position('my', short_description): 7
    *** Script: I can't launch my VPN client since the last software update
     position('my', short_description): 16
    *** Script: Missing my home directory
     position('my', short_description): 9
    *** Script: Seem to have an issue with my hard drive...
     position('my', short_description): 28
    *** Script: Please remove the latest hotfix from my PC
     position('my', short_description): 38
    *** Script: I can't get my weather report
     position('my', short_description): 13
    *** Script: Reset my password
     position('my', short_description): 7
    *** Script: my PDF docs are all locked from editing
     position('my', short_description): 1
    *** Script: My desk phone does not work
     position('my', short_description): 1
    *** Script: Can't log into SAP from my laptop today
     position('my', short_description): 25
    *** Script: My computer is not detecting the headphone device
     position('my', short_description): 1
    *** Script: My disk is still having issues. Can't delete a file
     position('my', short_description): 1
    *** Script: The USB port on my PC stopped working
     position('my', short_description): 17

    GlideDBFunctionBuilder com escopo - substring()

    Retorna uma subcadeia de caracteres de uma coluna especificada de uma tabela que começa em um local especificado.

    Opcionalmente, você também pode especificar um local na cadeia de caracteres em que parar a extração de texto. Este método é igual ao LOCATE (subcadeia de caracteres, str, posição) no MySQL.

    Este método funciona de forma semelhante ao do JavaScript, apenas no nível do banco de dados. Você pode usar este método para encontrar pontos de dados interessantes ou relatórios personalizados para analistas de dados. Normalmente, você usará este método para armazenamento de dados ou para extrair, transformar e carregar dados (ETL) em sistemas menos flexíveis.

    Para usar este método em registros de Dicionário, use glidefunction:substring(<field> ,<start_position> ,<end_position> )

    Nota:
    Os parâmetros especificados na tabela a seguir não são passados com a chamada de método, mas são definidos no objeto GlideDBFunctionBuilder().
    Tabela 32. Parâmetros
    Nome Tipo Descrição
    Assunto: Cadeia de caracteres Nome da coluna na tabela da qual o texto será obtido. A tabela é especificada no objeto GlideRecord associado.
    posição_início Número Local no texto da coluna para iniciar a extração de texto.
    end_position Número Opcional. Local no texto da coluna para interromper a extração de texto.

    Padrão: fim do texto na coluna especificada.

    Tabela 33. Retorna
    Tipo Descrição
    Cadeia de caracteres Texto extraído da coluna da tabela especificada.

    O exemplo de código a seguir mostra como chamar este método.

    var functionBuilder = new GlideDBFunctionBuilder();
    var dbFunction = functionBuilder.substring();
    dbFunction = functionBuilder.field('short_description');  // field: Column within the table to obtain the substring
    dbFunction = functionBuilder.constant(0); // start_position: Location in the column text to start extracting text
    dbFunction = functionBuilder.constant(20); // end_position: Location in the column text to stop extracting text.
    dbFunction = functionBuilder.build();
    
    gs.log(dbFunction);
    
    var gr_incident = new GlideRecord('incident'); // Table containing the column from which to extract the text
    gr_incident.addFunction(dbFunction);
    gr_incident.addQuery("short_description", "CONTAINS", "my");
    gr_incident.setLimit(20);
    gr_incident.query();
    while(gr_incident.next()) {
      gs.info(gr_incident.short_description + "\n substring(short_description, 0, 20): " + gr_incident.getValue(dbFunction));
    }

    Saída:

    *** Script: glidefunction:substring(short_description,'0','20')
    *** Script: Wireless access is down in my area
     substring(short_description, 0, 20): Wireless access is 
    *** Script: Printer in my office is out of toner
     substring(short_description, 0, 20): Printer in my offic
    *** Script: Reset my password
     substring(short_description, 0, 20): Reset my password
    *** Script: I can't launch my VPN client since the last software update
     substring(short_description, 0, 20): I can't launch my V
    *** Script: Missing my home directory
     substring(short_description, 0, 20): Missing my home dir
    *** Script: Seem to have an issue with my hard drive...
     substring(short_description, 0, 20): Seem to have an iss
    *** Script: Please remove the latest hotfix from my PC
     substring(short_description, 0, 20): Please remove the l
    *** Script: I can't get my weather report
     substring(short_description, 0, 20): I can't get my weat
    *** Script: Reset my password
     substring(short_description, 0, 20): Reset my password
    *** Script: my PDF docs are all locked from editing
     substring(short_description, 0, 20): my PDF docs are all
    *** Script: My desk phone does not work
     substring(short_description, 0, 20): My desk phone does 
    *** Script: Can't log into SAP from my laptop today
     substring(short_description, 0, 20): Can't log into SAP 
    *** Script: My computer is not detecting the headphone device
     substring(short_description, 0, 20): My computer is not 
    *** Script: My disk is still having issues. Can't delete a file
     substring(short_description, 0, 20): My disk is still ha
    *** Script: The USB port on my PC stopped working
     substring(short_description, 0, 20): The USB port on my 

    GlideDBFunctionBuilder com escopo - subtract()

    Subtrai o valor de um campo inteiro de outro.

    Use o método field(String field) para definir os campos nos quais a operação é realizada.

    Tabela 34. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 35. Retorna
    Tipo Descrição
    vazio
    var functionBuilder = new GlideDBFunctionBuilder();
    var mySubtractFunction = functionBuilder.subtract();
    mySubtractFunction = functionBuilder.field('order');
    mySubtractFunction = functionBuilder.field('priority');
    mySubtractFunction = functionBuilder.build();