Modularização ABAP: Macro, Sub-rotina e Módulo de Função

⚡ Resumo Inteligente

A modularização em ABAP coloca uma sequência de instruções em uma unidade reutilizável que o programa principal simplesmente chama. Esta página explica macros, programas de inclusão, sub-rotinas, módulos de função e grupos de funções, com sintaxe, exemplos e critérios de seleção para cada técnica.

  • 🧩 Princípio fundamental: Uma unidade de modularização é gerada como se seu código-fonte estivesse fisicamente presente no programa que a invoca, de modo que a estrutura melhora sem custo em tempo de execução.
  • ⚡ Macro: Definido com DEFINE e END-OF-DEFINITION, utilizável apenas dentro do programa que o define e somente após a linha de definição.
  • 📄 Incluir programa: Não possui interface de parâmetros e existe unicamente para compartilhar código-fonte, como longas declarações de dados, entre vários programas.
  • 🔁 Sub-rotina: Declarada com FORM e ENDFORM, chamada com PERFORM e adequada para lógica reutilizada localmente dentro de um programa.
  • 🧱 Módulo de Função: Uma rotina sistêmica com uma interface tipada para importar, exportar, alterar parâmetros de tabela e lidar com exceções.
  • 📦 Grupo Funcional: Um contêiner cujos dados globais são compartilhados por todos os módulos de função dentro dele, gerado automaticamente com seus includes TOP e UXX.
  • 🧭 Regra de seleção: Escolha uma macro para abreviações locais, uma sub-rotina para lógica local e um módulo de função quando a rotina precisar ser reutilizada em todo o sistema.

Modularização em ABAP

O que é modularização em ABAP?

Ao modularizar o código-fonte, você coloca uma sequência de instruções ABAP em um módulo. Então, em vez de colocar todas as instruções no programa principal, você simplesmente chama o módulo. Quando o programa é gerado, o código-fonte na unidade de modularização é tratado como se estivesse fisicamente presente no programa principal.

Necessidade de Modularização

  • Melhorar a estrutura do programa.
  • Fácil de ler o código
  • Fácil de manter o código
  • Evite redundância e promova a reutilização de código

Várias técnicas de modularização

  • Uso de macros
  • Uso de arquivos de inclusão
  • Sub-rotinas
  • Módulos de Função

Vamos examinar cada um deles em detalhes:

SAP- Macro ABAP

Se quiser reutilizar o mesmo conjunto de instruções mais de uma vez em um programa, você poderá incluí-las em uma macro.

Você só pode usar uma macro dentro do programa em que ela está definida, e ela só pode ser chamada nas linhas do programa que seguem sua definição.

As macros podem ser úteis para cálculos longos ou instruções WRITE complexas.

Sintaxe

DEFINE <macro_name>

'Macro Statements

END-OF-DEFINITION

Macros podem usar parâmetros &N onde N = 1,2,3…

Exemplo:-

DATA: number1 TYPE I VALUE 1.

DEFINE increment.

ADD 1 to &1.

WRITE &1.

END-OF-DEFINITION.

Increment number1.

WRITE number1.

Saída: 2

Uma macro é expandida em tempo de compilação dentro de um único programa. Quando o mesmo código precisa ser compartilhado entre programas, utiliza-se um programa de inclusão (include program).

Incluir programas

Os programas de inclusão destinam-se exclusivamente à modularização do código-fonte e não possuem interface de parâmetros.

Os programas de inclusão permitem que você use o mesmo código-fonte em programas diferentes. Eles podem ser úteis se você tiver declarações de dados extensas que deseja usar em programas distintos.

Sintaxe

Include <include program Name>

Pontos a serem observados

  • Os programas incluídos não podem se autodenominar.
  • Os programas incluídos devem conter declarações completas.

Exemplo:

INCLUDE ZILX0004.

WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM.

================================

PROGRAM ZRPM0001.

INCLUDE ZILX0004.

Os programas incluídos compartilham código, mas não podem receber parâmetros. As sub-rotinas adicionam essa interface de parâmetros ausente.

Sub-rotinas

Sub-rotinas são procedimentos que você pode definir em qualquer Programa ABAP e também ligue de qualquer programa. As sub-rotinas normalmente são chamadas internamente, ou seja, contêm seções de código ou algoritmos que são usados ​​com frequência localmente. Se você deseja que uma função seja reutilizável em todo o sistema, use um módulo de função.

Sintaxe-

FORM <Subroutine> [<pass>].

<Statement block>.

ENDFORM.

= Nome da sub-rotina

= Parâmetros sendo passados

Tipos de Sub-rotinas

  1. Interno
    • Sub-rotina definida no mesmo programa que está sendo chamado.
    • Pode acessar todos os objetos de dados declarados no programa ABAP/4 principal.
  2. Externo
    • Sub-rotina definida fora do programa que está sendo chamado.
    • Precisa usar o opção ou declarar objetos de dados em partes comuns da memória.

Chamando uma sub-rotina

Sub-rotinas internas

PERFORM <subroutine> [<pass>]

= Nome da sub-rotina

= Parâmetros sendo passados

Os dados declarados no programa principal ficam automaticamente disponíveis.

Sub-rotinas externas

PERFORM <subroutine>(<Program>) [<pass>].

PERFORM <subroutine> (<Program>) [<pass>] [IF FOUND].

PERFORM (<subroutine>) IN PROGRAM  (<Program>) [<pass>] [IF FOUND].

PERFORM <index> OF <subroutine1> <subroutine2> <subroutine3> [<pass>].

Pontos a serem observados

  • Chamadas aninhadas são permitidas em sub-rotinas (ou seja, PERFORM dentro de um FORM… ENDFORM ).
  • Chamadas recursivas também são possíveis.
  • Para definir dados locais, use a instrução DATA após FORM . Cada vez que você entra na sub-rotina, os dados são recriados (com um valor inicial) e liberados no final (da pilha).
  • Para definir os dados globais usados ​​em uma sub-rotina, use a instrução LOCAL após FORM . Os valores são salvos quando você entra na sub-rotina e depois liberados no final (da pilha)

💡 Dica: Sub-rotinas são consideradas obsoletas em ABAP Objects. Em novos desenvolvimentos, a lógica reutilizável deve ser colocada em métodos de uma classe, e módulos de função devem ser usados ​​quando uma interface remota ou de sistema for necessária.

Módulos de Função

Módulos de função são rotinas ABAP/4 de uso geral que qualquer pessoa pode usar. Na verdade, há um grande número de módulos de função padrão disponíveis.

Os Módulos de Função são organizados em Grupos de Função: Coleções de funções relacionadas logicamente. Um módulo de função sempre pertence a um grupo de funções.

Sintaxe-

FUNCTION <function module>

<Statements>

ENDFUNCTION.

Informações importantes associadas ao módulo de função

  • Administração
  • Parâmetros de importação/alteração/exportação.
  • Parâmetros/Exceções da Tabela.
  • Documentação
  • Código fonte – L U01. é o grupo de funções
  • Dados Globais – L TOP .Dados globais para o grupo de funções - Acessíveis através de módulos de função no grupo de funções.
  • Programa Principal – SAPeu . Contém a lista de todos os arquivos incluídos para esse grupo de funções

Chame um módulo de função

Para chamar um módulo de função, use a instrução CALL FUNCTION:

CALL FUNCTION <module>

[EXPORTING  f1 = a 1.... f n = a n]

[IMPORTING  f1 = a 1.... f n = a n]

[CHANGING   f1 = a 1.... f n = a n]

[TABLES     f1 = a 1.... f n = a n]

[EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E]

[OTHERS = ro]].

Cada módulo de função reside dentro de um grupo de funções, portanto, a próxima seção explica como esse contêiner funciona.

Grupos de funções

Grupos de funções são contêineres para módulos de função. Na verdade, há um grande número de grupos de funções padrão.
Todos os módulos de função em um grupo de funções podem acessar os dados globais do grupo.

Como programas executáveis ​​(tipo 1) e conjuntos de módulos (tipo M), os grupos de funções podem conter telas, telas de seleção e listas.

Pontos a serem observados

  • Grupos de funções não podem ser executados.
  • O nome de um grupo de funções pode ter até 26 caracteres.
  • Ao criar um grupo de funções ou módulo de função, o programa principal e os programas incluídos são gerados automaticamente.
  • Os grupos de funções encapsulam dados.

Como criar um grupo de funções

  1. Vá para a transação SE80.
  2. Selecione Programa no menu suspenso.
  3. Escreva o nome do grupo de funções que você deseja criar. Geralmente os grupos de funções criados pelo usuário começam com “Z”. por exemplo - . Pressione a tecla Enter.
  4. Observe que o TOP Include é criado por padrão se o usuário marcar a opção de criar um TOP include.

Como criar um Módulo de Função

  1. Crie um grupo de funções (diga “ZCAL”).
  2. Crie um módulo de função, defina os atributos como (Grupo de funções, Aplicativo, Texto breve e Tipo de processo) e salve.
  3. O arquivo incluído “LZCALU01” terá o código fonte do primeiro módulo de função.
  4. Incluir arquivo “LZCALTOP” terá dados globais.
  5. Programa principal “SAPLZCAL” contém
    • Dados globais incluem arquivo “LZCALTOP”
    • Os módulos de função incluem o arquivo “LZCALUXX”
    • Arquivos de inclusão definidos pelo usuário “LZCALF..”, “LZCALO..” e “LZCALI..”
  6. Definir parâmetros de interface e exceções
  7. Escreva o código fonte
  8. Ativar módulo de função
  9. Testando o Módulo de Função – Teste Único e Depuração
  10. Documentando e liberando um módulo de função

Como escolher a técnica de modularização correta

As quatro técnicas se sobrepõem, portanto a decisão depende do escopo da reutilização e se uma interface de parâmetros é necessária.

Técnica Âmbito de reutilização Interface de parâmetros Melhor usado para
Macro Um programa, após a linha de definição Marcadores posicionais de &1 a &9 Instruções curtas e repetidas, cálculos longos, saída WRITE complexa
Incluir programa Qualquer programa que nomeie o include nenhum Declarações de dados compartilhados e código-fonte compartilhado
Sub-rotina (FORM) Local ou externo com EXECUTAR… NO PROGRAMA USANDO, ALTERANDO, TABELAS Lógica reutilizada frequentemente dentro de um programa
Módulo de função Sistema completo, incluindo chamadas remotas. IMPORTAÇÃO, EXPORTAÇÃO, ALTERAÇÃO, TABELAS, EXCEÇÕES Rotinas compartilhadas entre aplicativos e encapsuladas em um grupo de funções.

Uma regra simples abrange a maioria dos casos: use uma macro para abreviações dentro de um programa, um include para declarações compartilhadas, uma sub-rotina para lógica local e um módulo de função sempre que a rotina precisar ser chamada de qualquer lugar do sistema. Isso é tudo sobre modularidade em ABAP.

Perguntas Frequentes

Uma macro é expandida no momento da geração e funciona apenas dentro do programa que a define. Uma sub-rotina é um procedimento real com uma interface de parâmetros tipada que também pode ser chamada de outro programa com PERFORM.

Um módulo de função cujo tipo de processamento está definido como Módulo Habilitado para Acesso Remoto pode ser chamado a partir de outro. SAP sistema ou de uma aplicação externa. Seus parâmetros devem ser passados ​​por valor, e as exceções são tratadas como falhas do sistema.

Não é possível depurar uma macro passo a passo, pois ela é expandida antes de ser gerada. Mova a lógica para uma sub-rotina ou um método quando a depuração linha por linha for necessária e limite as macros a instruções curtas.

Assistentes de código com IA, integrados em ferramentas de desenvolvimento ABAP, podem criar a estrutura básica de um módulo de função, sua interface de parâmetros e suas exceções a partir de uma descrição simples. O desenvolvedor ainda revisa a lógica, ativa o módulo e o testa antes do transporte.

As ferramentas de IA analisam um programa, detectam blocos repetidos e sugerem onde uma sub-rotina, método ou módulo de função deve ser executado.tracA sugestão acelera a refatoração, embora os testes unitários continuem sendo necessários para confirmar o comportamento idêntico.

Resuma esta postagem com: