Chamada de funções integradas em visões CDS

Objectives

After completing this lesson, you will be able to:
  • Use funções integradas no CDS do ABAP.
  • Utilizar variáveis de sessão.

Funções integradas no CDS – Síntese

Funções integradas no ABAP SQL

Agora que você aprendeu que pode usar expressões no ABAP SQL e no ABAP CDS exatamente da mesma forma, e as funções integradas? Você também pode usá-los no ABAP CDS?

Vamos dar uma olhada mais de perto.

Funções numéricas

Para todas as funções numéricas, a resposta é "sim". Eles também são suportados no CDS do ABAP.

Processamento de cadeia

A maioria das funções de processamento de cadeia também é suportada. Existem alguns que só estão disponíveis no ABAP SQL, principalmente relacionados a expressões regulares. Uma lista detalhada pode ser encontrada na documentação de palavras-chave ABAP.

Processamento de data e hora

A maioria das restrições existe na área de dados e funções de processamento de tempo. Aqui, as funções genéricas (IS_VALID( ), ADD_DAYS( ), DAYS_BETWEEN( ), etc.) só estão disponíveis no ABAP SQL. No CDS do ABAP, você deve usar as variantes específicas de tipo, ou seja, as funções correspondentes que começam com DATS, DATN, TIMS, TSTMP, etc.

Além disso, as funções para extrair informações de um campo de data ou hora não são suportadas no ABAP CDS, ou seja, você não pode usar as funções WEEKDAY( ), EXTRACT_MONTH( ), etc., no ABAP CDS. Consulte a documentação de palavra-chave ABAP para obter uma lista completa.

Vejamos alguns exemplos.

Funções de conversão em ABAP CDS

Exemplo: conversão de moeda no ABAP SQL e ABAP CDS

Assista ao vídeo para ver um exemplo de conversão de moeda no ABAP SQL e ABAP CDS.

Algumas funções de conversão têm parâmetros nomeados no ABAP SQL, mas nenhum nome de parâmetro no CDS do ABAP. Como consequência, os parâmetros opcionais no ABAP SQL se tornam obrigatórios no ABAP CDS.

Vamos usar a função de conversão de registro da hora TSTMP_TO_DATS() como exemplo. A função tem quatro parâmetros, dos quais dois são obrigatórios e dois são opcionais no ABAP SQL. No CDS do ABAP, todos os quatro parâmetros são obrigatórios e são transferidos sem atribuição explícita de parâmetros.

Variáveis de sessão

Dentro de uma entidade de visão CDS ABAP, você pode usar variáveis de sessão para acessar o valor de campos do sistema ABAP. O acesso a uma variável de sessão começa com o prefixo $session., seguido pelo nome da variável.

O exemplo utiliza a variável de sessão system_language em uma expressão de filtro e a variável de sessão system_date na cláusula WHERE. Mas você pode usar variáveis de sessão Eu quase qualquer outra posição de operando também.

Cuidado

As variáveis de sessão só contêm valores se a solicitação de leitura for proveniente de um sistema ABAP. Em qualquer outra situação, os valores das variáveis da sessão são indefinidos. Por isso, você deve preferir parâmetros de entrada para acessar campos do sistema ABAP. Consulte a próxima lição para obter detalhes.

Atualmente, o ABAP CDS oferece seis variáveis de sessão integradas. A lista exibe os mesmos juntamente com o campo de sistema relacionado.

Nota

Além das variáveis de sessão integradas, também existem variáveis de sessão de aplicação. Eles são necessários para aplicações específicas e são definidos por programas de sistema dedicados. Para obter detalhes, consulte a documentação de palavras-chave ABAP.

Utilizar funções integradas em uma Visão CDS

Você quer ampliar sua entidade de visão CDS com lógica SQL. Você utiliza funções SQL para concatenar o nome e o sobrenome do assistente de departamento, converter o salário mensal em uma moeda única e calcular a afiliação da empresa, ou seja, o número de dias que um empregado trabalha para a empresa.

Modelo:

  • /LRN/C_EMPLOYEE_EXP (Definição de dados)

Solução:

  • /LRN/C_EMPLOYEE_FCT (Definição de dados)

Pré-requisitos

Para este exercício, você precisa da entidade da visão CDS na qual trabalhou no exercício anterior (o nome sugerido foi: Z##_C_EmployeeQuery, em que ## é o número do seu grupo). Se você não concluiu o exercício anterior, crie uma cópia da definição de dados /LRN/C_EMPLOYEE_EXP.

Tarefa 1: Utilizar uma função de cadeia

Em você, a entidade de visão CDS para avaliar dados do empregado (o nome sugerido era: Z##_C_EmployeeQuery, em que ## é o número do seu grupo), ajuste a definição do elemento de visão AssistantName. Utilize uma função de cadeia de caracteres adequada para concatenar o primeiro nome e o sobrenome do assistente do departamento, separados por um único espaço.

Etapas

  1. Edite a lista de elementos da sua entidade de visão. Comente o elemento de visão que deriva o sobrenome do assistente de departamento.

    1. Posicione o cursor em qualquer lugar na respectiva linha de código e pressione Ctrl + < para adicionar um sinal de comentário (//) no início da linha.

  2. Após o elemento de visão antigo, utilize o code completion para adicionar uma chamada da função SQL CONCATENATE_WITH_SPACE como um novo elemento de visão.

    1. Na linha de código // _Department._Assistant.LastName as AssistantName,, posicione o cursor após os dois pontos e pressione Enter para inserir uma nova linha.

    2. Insira con e pressione Ctrl + espaço para chamar a conclusão do código.

    3. Na lista de sugestões, selecione concat_with_space(arg1, arg,2, space_cnt) (função) e pressione Shift + Enter para inserir a assinatura completa.

      Resultado

      Isso deve inserir o seguinte código:

      Code Snippet
      123
      concat_with_space( arg1, arg2, space_cnt )
  3. Substitua os caracteres de preenchimento por elementos de visão e literais adequados.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      12345
      concat_with_space( _Department._Assistant.FirstName, _Department._Assistant.LastName, 1 )

      Nota

      Inserimos quebras de linha adicionais para aumentar a legibilidade no material impresso do curso.
  4. Forneça o mesmo nome do elemento de visão que foi usado para o elemento de visão removido (o nome sugerido é: AssistantName).

    1. Ajuste o código da seguinte forma:

      Code Snippet
      12345
      concat_with_space( _Department._Assistant.FirstName, _Department._Assistant.LastName, 1 ) as AssistantName,
  5. Ative e teste a entidade de visão CDS.

    1. Pressione Ctrl + F3 para ativar o objeto de desenvolvimento.

    2. Pressione F8 para testar a entidade de visão CDS na ferramenta Visualização de dados.

Tarefa 2: Utilizar uma função de data

Em um novo elemento de visão (nome proposto: CompanyAffiliation), utilize uma função de data adequada para calcular a afiliação da empresa do empregado em dias, ou seja, o número de dias entre a data de entrada e hoje. Em seguida, divida o resultado pelo número de dias por ano para calcular a afiliação da empresa do empregado em anos, com precisão de 1 casa decimal.

Dica

A data atual está disponível nas variáveis da sessão $session.user_date e $session.system_date. Para este exercício, utilize a data atual do sistema.

Para simplificar, desconsidere a existência de anos bissextos e suponha que um ano tenha 365 dias.

Etapas

  1. Edite a lista de elementos da sua entidade de visão. Antes da associação exposta, use o code completion para adicionar uma chamada da função SQL DATS_DAYS_BETWEEN como um novo elemento de visão.

    1. Posicione o cursor no início da linha de código /* Associations */ e pressione Enter para inserir uma nova linha.

    2. Na nova linha de código, insira dados e pressione Ctrl + espaço para chamar a conclusão de código.

    3. Na lista de sugestões, selecione dats_days_between( date1, date2 ) (função) e pressione Shift + Enter para inserir a assinatura completa.

      Resultado

      Isso deve inserir o seguinte código:

      Code Snippet
      123
      dats_days_between( date1, date2 )
  2. Substitua os caracteres de preenchimento por elementos de visão e variáveis de sessão adequados e indique um nome de elemento de visão (nome proposto: CompanyAffiliation).

    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234
      dats_days_between( EntryDate, $session.system_date ) as CompanyAffiliation,

      Nota

      Novamente, inserimos quebras de linha adicionais para aumentar a legibilidade no material impresso do curso.
  3. Utilize a função SQL Division para calcular a afiliação da empresa em anos, com uma precisão de uma casa decimal.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456
      division( dats_days_between( EntryDate, $session.system_date ), 365, 1 ) as CompanyAffiliation,
  4. Ative e teste a entidade de visão CDS.

    1. Pressione Ctrl + F3 para ativar o objeto de desenvolvimento.

    2. Pressione F8 para testar a entidade de visão CDS na ferramenta Visualização de dados.

Tarefa 3: Realizar uma Conversão de moeda

Em um novo elemento view (nome sugerido: AnnualSalaryConverted), use uma função SQL adequada para converter o conteúdo do elemento de visualização AnnualSalary em moeda US Dollar. Utilize a data atual do sistema como data da taxa de câmbio. Em seguida, ajuste o cálculo do elemento de visão MonthlySalary. Utilize o salário anual convertido como entrada em vez do salário anual não convertido.

Dica

Você pode reutilizar elementos de visão calculada da mesma entidade de visão utilizando o prefixo $projection.

Etapas

  1. Remova ou comente o elemento de visão CurrencyCode.

    1. Posicione o cursor na linha de código CurrencyCode, e pressione Ctrl + < para adicionar um sinal de comentário (//) no início da linha.

  2. Na linha de código seguinte, defina um novo elemento de visão (nome sugerido: CurrencyCodeUSD) no qual você converte o literal 'USD' para o tipo predefinido abap.cuky.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234
      // CurrencyCode, cast( 'USD' as /dmo/currency_code ) as CurrencyCodeUSD,
  3. Antes do elemento de visão MonthlySalary, utilize o code completion para inserir uma chamada da função SQL currency_Conversion.

    1. Em uma nova linha de código, insira curr e pressione Ctrl + espaço para chamar code-completion.

    2. A partir da lista de sugestões, selecione a entrada que começa com currency_Conversion( montante => montante, ... e pressione Shift + Enter para inserir a assinatura completa.

    3. O código deve ter o seguinte aspecto:

      Code Snippet
      123456789101112
      currency_conversion( amount => amount, source_currency => source_currency , target_currency => target_currency, exchange_rate_date => exchange_rate_date ) @EndUserText.label: 'Monthly Salary' @Semantics.amount.currencyCode: 'CurrencyCode' cast( AnnualSalary as abap.fltp ) / 12.0 as MonthlySalary,

      Nota

      Inserimos quebras de linha adicionais novamente.
  4. Substitua os caracteres de preenchimento pelos valores para os parâmetros. Como entrada, utilize o salário anual e o código de moeda da visão de origem, o próprio elemento de visão CurrencyCodeUSD e a variável de sistema system_date.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234567
      currency_conversion( amount => AnnualSalary, source_currency => CurrencyCode , target_currency => $projection.CurrencyCodeUSD, exchange_rate_date => $session.system_date )
  5. Adicione um nome de elemento (nome sugerido: AnnualSalaryConverted), uma etiqueta e a anotação obrigatória Semantics.amount.CurrencyCode.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456789
      @EndUserText.label: 'Annual Salary' @Semantics.amount.currencyCode: 'CurrencyCodeUSD' currency_conversion( amount => AnnualSalary, source_currency => CurrencyCode , target_currency => $projection.CurrencyCodeUSD, exchange_rate_date => $session.system_date ) as AnnualSalaryConverted,
  6. Ajuste o cálculo do elemento de visão MonthlySalary. Em vez de AnnualSalary, use o novo elemento de visualização AnnualSalaryConverted como entrada.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456
      @EndUserText.label: 'Monthly Salary' @Semantics.amount.currencyCode: 'CurrencyCode' cast( $projection.AnnualSalaryConverted as abap.fltp ) / 12.0 as MonthlySalary,
  7. Ajuste o nome do elemento de visão (nome sugerido: MonthlySalaryConverted) e ajuste a anotação obrigatória Semantics.amount.CurrencyCode.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456
      @EndUserText.label: 'Monthly Salary' @Semantics.amount.currencyCode: 'CurrencyCodeUSD' cast( $projection.AnnualSalaryConverted as abap.fltp ) / 12.0 as MonthlySalaryConverted,
  8. Ative e teste a entidade de visão CDS.

    1. Pressione Ctrl + F3 para ativar o objeto de desenvolvimento.

    2. Pressione F8 para testar a entidade de visão CDS na ferramenta Visualização de dados.