Documente Academic
Documente Profesional
Documente Cultură
AS ABAP 7.40 é o sucessor do AS ABAP 7.31 (AS ABAP 7.03), que é o sucessor do AS ABAP 7.02, que é
construído sobre AS ABAP 7.0.
Como o HANA implementou um novo paradigma para determinação de soluções, a maioria das
necessidades não eram cobertas pela sintaxe do AS 7.31, com isso foi necessária a criação de uma nova
estrutura de solução
A partir da 7.40 em diante, o ABAP é desenvolvido em support packages que são empacotados com
versões do kernel. O primeiro support package que estava disponível para os clientes foi o SP02 com o
kernel 7.40. Dando sequência tivemos o SP05 com SPs do kernel 741 e atualmente temos o SP08. Além
disso incluído estão por vir, cada um com um kernel do próprio e, portanto, com novas funcionalidades
ABAP.
Figura 3 – Resultado
A partir da versão 7.20 temos a possibilidade de utilizar expressões nos códigos, expressões (assim como o nome
diz) são responsáveis por expressar algo, um resultado em formato String por exemplo, temos abaixo uma
segunda versão que gera o mesmo resultado:
Como podemos ver acima o inicializador | determinou o início de uma expressão, o as chaves {} são utilizadas
para a inserção de variáveis (Helper Variables), se pensarmos, em linhas gerais a expressão gerou internamente
uma variável que possui como valor “Carrier Name: American Airlines”.
A partir do Release 7.40 o conceito de Inline Declarations foi ampliado, temos agora a completa declaração de
objetos complexos de dados, desde variáveis, tabelas internas até como objetos.
No exemplo acima, temos a declaração de uma tabela interna em tempo de execução (T_SCARR), assim como a
declaração de uma workarea (WA_SCARR) com o resultado implícito dos dados que a linha da tabela T_SCARR
possui.
Neste exemplo ainda ocupamos uma estrutura de dados que não será necessária em sua totalidade, que é a
workarea WA_SCARR, no ABAP 7.40 conseguimos usar table expressions que geram resultados em tempo de
execução:
Declare também neste seu programa uma tabela T_NAME_VALUE do tipo Y_TNAME, insira ao menos duas linhas
nesta tabela.
Utilizando a abordagem exibida acima, faça a leitura de uma destas linhas pelo campo NAME e imprima o valor
do campo VALUE.
(Extra): O que acontece quando tentamos efetuar uma leitura de linha que não exista na tabela? Como podemos
tratar isso?
Operador VALUE
Em suma, declarações que são resultados de alguma expressão podem ser gerados em tempo de execução,
utilizando como base o resultado que a expressão gera, no exemplo abaixo temos a declaração de uma tabela
interna como resultado de uma expressão:
Exercícios
Exercício 01 (Solução ZABAP740_SOLT02)
Desenvolva o programa ZABAP740_EXERC02XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Utilizando a abordagem acima (VALUE), declare uma tabela T_NAME_VALUE do tipo Y_TNAME, inserindo ao
menos duas linhas nesta tabela.
Operador NEW
Temos agora no ABAP (Finalmente ) o operador NEW, este operador instancia objetos em memória, como por
exemplo classes:
O operador NEW cria objetos em memória, em um dos exemplos acima, utilizamos a expressão VALUE, que cria
referências por valor e faz atribuição no destino, o exemplo abaixo instancia em tempo de execução uma área de
memória e retorna para a variável a referência genérica deste objeto
Exercícios
Exercício 01 (Solução ZABAP740_SOLT03)
Desenvolva o programa ZABAP740_EXERC03XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Utilizando a abordagem acima (NEW) uma referência a dados O_STRUCT do tipo Y_TNAME, inserindo ao menos
duas linhas nesta tabela.
Utilizando a abordagem exibida acima, faça a leitura de uma destas linhas pelo campo NAME e imprima o valor
do campo VALUE.
(Dica): Aqui temos uma referência de dados, neste caso O_STRUCT, nestes casos para fazer manipulações de
dados geralmente trabalhamos com um FIELD-SYMBOL, ou seja, fazemos o ASSIGN para um FIELD-SYMBOL a
partir dos dados que possuímos, e com este ponteiro fazemos a leitura desejada
(Extra): Vimos acima que podemos fazer leituras utilizando Inline Declarations, e também vimos na Dica acima
que podemos utilizar o comando ASSIGN O_STRUCT->* para trabalhar com a estrutura final, será que podemos
tratar os dados a serem exibidos utilizando somente o ASSIGN e adicionarmos a leitura via Inline Declaration
conseguimos ler a informação sem precisar trabalhar com um FIELD-SYMBOL.
Operador REF
Em determinados casos, estamos interessados em enviar uma referência de dados para uma outra referência,
neste caso duas referências apontarão para a mesma área, no caso abaixo temos a criação de uma variável e um
ponteiro da mesma para uma outra referência.
Na imagem acima, o_output possui referência para a área de memória que vl_output determinou.
Exercícios
Exercício 01 (Solução ZABAP740_SOLT04)
Desenvolva o programa ZABAP740_EXERC04XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Utilizando a abordagem acima (VALUE) uma tabela T_NAME_VALUE do tipo Y_TNAME, inserindo ao menos duas
linhas nesta tabela.
Crie uma referência a dados utilizando o comando REF, este comando deve receber como parâmetro a tabela
criada acima.
(Extra): Vimos acima que podemos fazer leituras utilizando Inline Declarations, e também vimos na Dica acima
que podemos utilizar o comando ASSIGN O_STRUCT->* para trabalhar com a estrutura final, será que podemos
tratar os dados a serem exibidos utilizando somente o ASSIGN e adicionarmos a leitura via Inline Declaration
conseguimos ler a informação sem precisar trabalhar com um FIELD-SYMBOL.
Operador CONV
O operador realiza a conversão de dados, este operador recebe os dados de um determinado tipo e os
encapsulam com a tipagem enviada, um caso em que este operador é extremamente útil é quando temos um
determinado tipo de dados e precisamos passar o mesmo para uma chamada de um método, por exemplo.
Exercícios
Exercício 01 (Solução ZABAP740_SOLT05)
Desenvolva o programa ZABAP740_EXERC05XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Declare uma variável do tipo I, esta variável deverá receber o número de linhas existentes na tabela SFLIGHT
(COUNT *)
Através do comando MESSAGE, faça a exibição da informação obtida acima, porém como a variável declarada é
do tipo I, uma conversão para um tipo CHAR ou STRING será necessária.
Operador COND
O operador COND realiza o retorno (com a criação de um envelope do retorno) baseado em uma série de
condições, este item é extremamente útil para casting em situações cotidianas,
Exercícios
Exercício 01 (Solução ZABAP740_SOLT06)
Desenvolva o programa ZABAP740_EXERC06XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Através do comando COND, faça a criação de um retorno do tipo string e faça a avaliação do parâmetro inserido:
Quando o valor for menor que 10, faça o retorno “Menor que 10”
Quando o valor estiver entre 10 e 20, faça o retorno “Entre 10 e 20”
Caso contrário, faça o retorno “Maior que 20”
Operador SWITCH
O operador SWITCH é a forma contraída do CASE, este operador realiza o retorno (também com a criação de um
envelope do retorno) baseado em condições simples
Exercícios
Exercício 01 (Solução ZABAP740_SOLT07)
Desenvolva o programa ZABAP740_EXERC07XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Através do comando SWITCH, faça a criação de um retorno do tipo string e faça a avaliação do idioma inserido:
ABAP Objects
Um dos tipos (conceituais) de métodos ABAP são os métodos funcionais, métodos funcionais são métodos que
possuem um parâmetro de retorno (RETURNING), até o release 740 estes métodos só permitiam além do próprio
parâmetro de retorno (RETURNING), parâmetros de importação (IMPORTING).
Neste novo release, este tipo de método consegue utilizar todos os parâmetros possíveis (IMPORTING,
EXPORTING, CHANGING)
No item abaixo, temos a leitura da primeira linha de T_FLIGHTS onde CARRID = ‘AA’
No item abaixo, temos a leitura da primeira linha de T_FLIGHTS, esta leitura é feita pelo índice
No item abaixo, temos a leitura da primeira linha de T_FLIGHTS, esta leitura com o novo comando FOR, este novo
comando realiza uma iteração pelos registros de uma tabela e realiza determinada ação, no caso abaixo a criação
de linhas em outra tabela
No item abaixo, temos a leitura de registros com base no comando FILTER, este comando realiza o filtro de
registros com base em um SET de chaves
Exercícios
Exercício 01 (Solução ZABAP740_SOLT08)
Desenvolva o programa ZABAP740_EXERC08XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
A partir do retorno do método GET_FLIGHTS da classe LCL_FLIGHTS (Classe e métodos incluídos via
ZABAP740_BASE01, faça o filtro dos dados utilizando o comando FOR e exiba em tela com o método estático
DISPLAY da classe CL_DEMO_OUTPUT todas as entradas em que CARRID IN SELECT-OPTIONS criado em tela
A partir do retorno do método GET_FLIGHTS da classe LCL_FLIGHTS (Classe e métodos incluídos via
ZABAP740_BASE02, faça o filtro dos dados utilizando o comando FILTER e exiba em tela com o método estático
DISPLAY da classe CL_DEMO_OUTPUT todas as entradas em que a CHAVE CARRID_KEY ONDE CARRID EQ
PARAMETER criado em tela
A partir do SP5 foram adicionadas extensões ao OPEN SQL, permitindo que o desenvolvedor possa realizar o
denominado Code PushDown.
Code PushDown significa delegar cálculos intensos que envolvam os dados extraídos para a camada de banco de
dados, se discutirmos isso levando somente em conta os bancos de dados relacionais de mercado, cometeríamos
um crime contra as boas práticas, pois estes não possuem plenas capacidades computacionais para realizar estes
cálculos ou até mesmo não possuem o hardware necessário.
Devemos utilizar este paradigma para realizar cálculo de valores que envolvam diretamente os dados
selecionados, isso acelera o resultado a ser obtido, isso significa que nem todos os cálculos será portados para a
camada de banco de dados.
Com o Hana tal característica é possível, o seu modelo de banco, assim como o hardware envolvido são
poderosos o suficiente para adotarmos este paradigma.
As novas features podem ser utilizadas em tabelas já existentes (BKPF/BSEG), assim como visões que foram
criadas no Hana, abaixo temos as principais novidades.
São conhecidas como host variables o conjunto de objetos que residem na camada de aplicação, como por
exemplo uma tabela interna, uma variável, etc.
Em determinados casos, como quando utilizamos a criação dinâmicas de variáveis com o construtor DATA, a
utilização da @ se faz obrigatória.
Constantes
A partir do release 740 podemos utilizar constantes como retorno de informações em seleções de dados, o
exemplo abaixo demonstra a utilização de constantes
Figura 23 – Constantes
Figura 24 - Resultado
No caso acima, definimos uma coluna flight_exists com o valor de uma constante, neste caso com o valor
ABAP_TRUE
Operadores Aritméticos
Conseguimos agora criar expressões aritméticas a partir de valores que estão relacionados a seleção em questão
No item acima, estamos interessados em saber o valor total (FLIGHT_TOTAL) com base no preço (PRICE)
multiplicado pelos assentos ocupados de cada classe (SEATSOCC, SEATSOCC_B, SEATSOCC_F), o resultado é a
soma destes valores, a sintaxe deste comando é:
[-] operand1 +|-|*|/ [-]operand2 [+|-|*|/ [-] operand3 ... ] ...
Exercícios
Exercício 01 (Solução ZABAP740_SOLT10)
Desenvolva o programa ZABAP740_EXERC10XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Exibir as colunas CARRID, CONNID, FLDATE e a somatória de assentos ocupados (SEATSOCC, SEATSOCC_B e
SEATSOCC_F como uma nova coluna chamada OCCUPIED_SEATS ) do vôo (SFLIGHT) onde CARRID = ‘AA’
Expressões Aritméticas
Conseguimos utilizar operações aritméticas para obter determinados resultados, estas expressões são uteis
quando devemos realizar conversões de dados a partir de informações já obtidas no banco de dados, as seguintes
expressões estão disponíveis:
Figura 29 – Resultado
Neste caso arredondamos o resultado para obter o preço mais baixo (FLOOR).
Exercícios
Exercício 01 (Solução ZABAP740_SOLT11)
Desenvolva o programa ZABAP740_EXERC11XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Exibir as colunas CARRID, CONNID, FLDATE e o valor do preço sem centavos (PRICE) dos vôos (SFLIGHT)
Neste caso, estamos interessados em concatenar o primeiro e o segundo nome do cliente para gerar uma nova
coluna (FULL_NAME)
Exercícios
Exercício 01 (Solução ZABAP740_SOLT12)
Desenvolva o programa ZABAP740_EXERC12XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Exibir as colunas ID, ( FORM, NAME, STREET, POSTBOX e POSTCODE – separados por espaço ) como uma única
coluna FULL_CUSTOMER da tabela SCUSTOM
Figura 33 - Resultado
Neste caso as correspondências não localizadas na tabela DEMO_JOIN2 são preenchidas com ‘—‘ no resultado
Exercícios
Exercício 01 (Solução ZABAP740_SOLT13)
Desenvolva o programa ZABAP740_EXERC13XX (XX = Número do Aluno), este programa deverá possuir o
seguinte:
Exibir a tabela SCARR, colunas CARRID, CARRNAME e com o operador CASE validar (Retornar uma coluna de nome
CURRENCY:
Na imagem acima, estamos criando no Hana a visão DEMO_CDS_PARAMETERS, esta visão seleciona dados da
tabela SPFLI, esta visão expõe 03 parâmetros de restrição:
Crie dois parâmetros para que o usuário informe a distância mínima e máxima a ser localizada
Afim de promover o code pushdown também de seus produtos, a SAP desenvolveu o ALV com acesso integrado
de dados (Em inglês seria ALV with Integrated Data Access – ALV with IDA), neste ALV, temos todas as operações
feitas diretamente na camada de banco de dados, além da seleção de dados, as operações de paginação,
ordenação, agrupamento são todas feitas no layer do banco de dados também.
Em bancos como o Hana, isso traz um ganho considerável em performance, pois não dependemos da máquina do
usuário e a sua capacidade de processamento para realizar este tipo de tarefa.
Podemos habilitar também a utilização de buscas de textos (Fuzzy Search) para colunas do ALV
Crie uma instância ALV IDA invocando o método estático CREATE da classe CL_SALV_GUI_TABLE_IDA, enviando
como parâmetro ‘SBOOK’
Exiba o relatório
http://scn.sap.com/community/abap/blog/2013/07/22/abap-news-for-release-740
http://scn.sap.com/community/abap/blog/2014/02/06/abap-news-for-release-740-sp05
http://scn.sap.com/community/abap/blog/2014/10/13/abap-language-news-for-release-740-sp08
Programas de Exemplo
Programa: ZABAP740_DEMO01 - Inline Declaration - Jeito Antigo
Programa: ZABAP740_DEMO05 - Inline Declaration - Novo Jeito + Table Expressions + Criação em Tempo de
Execução
Programa: ZABAP740_DEMO06 - Inline Declaration - Novo Jeito + Table Expressions + Operador NEW para Classes
Programa: ZABAP740_DEMO07 - Inline Declaration - Novo Jeito + Table Expressions + Operador NEW para
Objetos em Memória
Referências
Alguns livros que são muito bons e trazem as novidades da linguagem e sobre o Hana: