Executando verificação de segurança...
2

[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 ;)

Carregando publicação patrocinada...
2

É bacana você postar essas coisas para as pessoas terem um pouco mais de contato com algo diferente. Acho que nã oserá muito relevante para outras pessoas, mas também acho que o objetivo nem é ensinar as pessoas de fato (se não tinha percebido isso, é algo para pensar). O grosso das pessoas verão isso aqui só como curiosidade.

Minha sugestão é mostrar o que a linguagem tem de diferente. Ressalte que usa o . que vem do COBOL (digamos, irmã mais velha ou uma tia de ABAP), o que é o DATA() (rapidamente, já que tem explicação mais detalhada em outra postagem) e as outras (possíveis) palavras-chave que as pessoas podem não saber o que é (acho que MESSAGE todo mundo entendeu). Faça as pessoas entenderem o código mesmo sem nunca ter visto ABAP.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

A ideia é essa mesmo, matar um pouquinho da curiosidade (para quem tiver a curiosidade) do que é o ABAP, antes de a pessoa cair de cabeça estudando. Não tenho (ainda) o intuito de ensinar a linguagem, só mesmo a vontade de trazer o ABAP um pouco mais para perto da comunidade de desenvolvedores :)

2

Olá Murilo, te conheci através de uma live que fez com o Marcos Alencar, fico feliz em ver que continua postando conteúdos aqui no TabNews, como disse que ia fazer na live. Estou estudando ABAP, ainda estou no início e conteúdos assim são essenciais, muito obrigado!

1
2

Olá Murilo, muito legal essa "Saga" SAP aqui, estou começando a me envolver no setor de SAP e gostaria de criar aplicações SAP, mais precisamente criar APIs dentro do SAP porém sinto dificuldade em encontrar materiais valiosos como esse aqui.
O negócio é uma Ferrari e eu quero andar como se fosse um fusca rsrs

Mas parabéns pelo POST, muito bom.

Abs

1

Fala mano! Fico muito feliz que esteja gostando :)

APIs no SAP é algo meio "obscuro" para os brasileiros, pois só tem conteúdo gringo falando sobre. Mas não é tão complexo quanto parece. Vou me programar para fazer um post desmistificando um pouco este assunto, tanto de consumir APIs de dentro do SAP (sem nenhum middleware), quanto usar o SAP como o back-end das APIs. Da para fazer isso pelo SAP ECC (mais "antigo") e também pelo S/4HANA de forma muuuito mais otimizada.

Segue acompanhando ;)

2
0