Como Criar uma Scalar Function no SAP utilizando ADT (Eclipse)
Você já precisou realizar um cálculo específico no banco de dados, mas sentiu que faltava uma opção simples e direta no seu código SAP? É exatamente aqui que entram as Scalar Functions.
Hoje, vamos aprender como criar a sua própria Scalar Function de forma prática utilizando o ADT (Eclipse).
(Caso você ainda não saiba o que é uma Scalar Function ou por que ela é tão importante, leia nosso artigo anterior onde explicamos todos os detalhes e exemplos de utilização).
Para não complicar, vamos usar um exemplo bem simples: uma Scalar Function (SF) que pega um número de entrada e adiciona um valor a ele. Pronto para colocar a mão na massa? Vamos lá!
Passo 1: Criando a Definição da SF (SF Definition)
O primeiro passo é dar "nome aos bois" e definir os parâmetros da sua função.
- No seu ADT, crie um novo objeto e filtre a busca por Scalar.
- Selecione a opção Function Definition.
- Preencha o Nome e a Descrição da sua função.
Ao criar, vamos implementar a estrutura da nossa SF. No nosso exemplo, teremos dois inputs (o Número original e o Valor a Adicionar) e um output (o Retorno da Soma).
Veja como fica o código da definição:
define scalar function YFX_ADD_N_TO_NUMBER
with parameters
p_original_number: int4,
p_number_to_add: int4
returns int4Passo 2: Implementando a Referência da SF
Agora que definimos a cara da nossa função, precisamos dar vida a ela. Para isso, vamos criar a referência da nossa Scalar Function.
Crie uma nova referência dando o mesmo nome da SF, porém adicionando o sufixo _SQL no final.
Feito isso, o próximo passo é criar a Classe ABAP que fará a referência da nossa Scalar. Basta criar uma classe padrão implementando a interface if_amdp_marker_hdb (que é a interface padrão para procedures no HANA).
Volte na referência da SF que criamos e preencha o campo de referência com o nome da nossa classe recém-criada.
Atenção a este detalhe: O nome da classe precisa estar em letras MAIÚSCULAS e chamando o método
execute.
Agora, vamos implementar a classe. Basta adicionar o método referenciando a SF que criamos no Passo 1. Veja o código completo abaixo:
CLASS ycl_add_n_to_number DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb .
CLASS-METHODS execute
FOR SCALAR FUNCTION YFX_ADD_N_TO_NUMBER.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ycl_add_n_to_number IMPLEMENTATION.
METHOD execute BY DATABASE FUNCTION
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY.
result = p_original_number + p_number_to_add;
ENDMETHOD.
ENDCLASS.Feito isso, basta ativar a Classe. Pronto! O motor da sua Scalar Function já está rodando.
Passo 3: Colocando a Scalar Function em prática
A melhor parte é que agora você pode utilizar a sua Scalar Function dentro de uma CDS View, integrando o cálculo do banco de dados diretamente na sua seleção de dados.
Veja um exemplo de uma CDS View utilizando a função que acabamos de criar:
define view entity YI_TESTE
as select from sflight
{
key carrid,
currency,
@Semantics.amount.currencyCode : 'currency'
price,
YFX_ADD_N_TO_NUMBER( p_original_number => cast(price as int4),
p_number_to_add => cast(2 as int4) ) as NewPrice
}Ao rodar essa view, o resultado será exibido de forma limpa e rápida, com o novo valor já calculado pelo banco de dados.
💡 Dica de Ouro
Lembre-se de uma regra básica de matemática e programação: ao converter valores para int (inteiro), o sistema sempre arredonda para baixo. Planeje seus cálculos tendo isso em mente para evitar surpresas nos resultados!
E aí, gostou de como é simples criar uma Scalar Function no ADT? Aproveite essa funcionalidade para otimizar suas leituras de banco de dados e deixar seu código muito mais inteligente. Até a próxima!
