[SAP] Vamos desenvolver um software (simples) em ABAP
Olha só... depois de tanto tempo...
Primeiramente, gostaria de explicar o motivo de eu ter ficado tanto tempo sem postar os conteúdos de ABAP: eu virei pai! Sim, meu menino nasceu e tomou todo o meu tempo só para ele kkkkk
Mas agora, com a rotina mais organizada, consigo voltar a postar conteúdos aqui!
Se você, caro leitor, não está acompanhando a saga, dá uma olhada neste agrupador aqui
A promessa do próximo post era a de desenvolver um software (simples) em ABAP, para poder exemplificar algo mais concreto, real, do dia a dia. Então vamos lá!
A ideia aqui é desenvolver um relatório que exiba uma lista de pedidos de compras criados no ano de 2023, com recursos de filtro, ordenação e até mesmo exportar para Excel.
Segue o código (utilizando a nova sintaxe do ABAP, veja mais sobre aqui):
REPORT z_lista_pedidos.
SELECT *
FROM ekko
INTO TABLE @DATA(lt_ekko)
WHERE aedat GE '20230101'.
IF sy-subrc IS INITIAL.
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_salv)
CHANGING
t_table = lt_ekko ).
DATA(lo_functions) = lo_salv->get_functions( ).
lo_functions->set_all( abap_true ).
lo_salv->display( ).
ELSE.
MESSAGE 'Não há pedidos de compras disponíveis em 2023' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
E o resultado é:
Percebam que é um trecho pequeno de código, mas que nos diz muitas coisas, como:
- A busca no banco de dados acontece direto no código, validando a sintaxe da query, e podemos utilizar todas as vantagens do SQL e ainda inserir o resultado em uma tabela interna declarada dinamicamente;
- O ABAP permite a utilização de orientação a objetos, como no caso do método FACTORY, da classe CL_SALV_TABLE, que nos retorna um objeto do tipo ALV (Advanced List Viewer), qual nos permite determinar quais funcionalidades essa lista terá (filtros, ordenação, exportar para Excel, etc.) por meio do objeto LO_FUNCTIONS;
- Podemos disparar mensagens sem complexidade. Inclusive, uma mensagem com o comportamento de sucesso, porém, disfarçada de erro (uma mensagem de erro faria com que o programa fosse "cancelado").
Claro que é possível desenvolver programas muito mais interessantes. Por exemplo, vamos melhorar essa data de corte, fazendo com que o usuário possa determinar a data. E também vamos melhorar os campos a serem exibidos, qual queremos somente o número do pedido, a data de criação, quem criou, qual é o fornecedor e qual é o valor total do pedido.
Segue o novo código:
REPORT z_lista_pedidos.
PARAMETERS p_aedat TYPE ekko-aedat.
START-OF-SELECTION.
SELECT ebeln AS pedido,
aedat AS data_criacao,
ernam AS criador,
lifnr AS fornecedor,
rlwrt AS valor
FROM ekko
INTO TABLE @DATA(lt_ekko)
WHERE aedat EQ @p_aedat.
IF sy-subrc IS INITIAL.
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_salv)
CHANGING
t_table = lt_ekko ).
DATA(lo_functions) = lo_salv->get_functions( ).
lo_functions->set_all( abap_true ).
lo_salv->display( ).
ELSE.
MESSAGE 'Não há pedidos de compras disponíveis em 2023' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
E o resultado foi:
No código, podemos perceber que eu criei um PARAMETER, mas poderia ser um range de datas (SELECT-OPTIONS). E também foi necessário adicionar o evento START-OF-SELECTION, que separa o que vem antes da seleção e o que vem depois.
Tem MUITAS OUTRAS FORMAS de se desenvolver um software em ABAP. Este foi o exemplo mais simples que consegui encontrar para "dar um gostinho", mas é possível fazer muito mais, com muito mais recursos.
Segue acompanhando meus posts que com o tempo irei mostrar mais e mais sobre o ABAP ;)