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.

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
- Interno
- Sub-rotina definida no mesmo programa que está sendo chamado.
- Pode acessar todos os objetos de dados declarados no programa ABAP/4 principal.
- 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
- Vá para a transação SE80.
- Selecione Programa no menu suspenso.
- 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.
- 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
- Crie um grupo de funções (diga “ZCAL”).
- Crie um módulo de função, defina os atributos como (Grupo de funções, Aplicativo, Texto breve e Tipo de processo) e salve.
- O arquivo incluído “LZCALU01” terá o código fonte do primeiro módulo de função.
- Incluir arquivo “LZCALTOP” terá dados globais.
- 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..”
- Definir parâmetros de interface e exceções
- Escreva o código fonte
- Ativar módulo de função
- Testando o Módulo de Função – Teste Único e Depuração
- 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.
