Similar às funções em outras linguagens de programação. Fornece encapsulamento de funcionalidade. Permite a passagem de parâmetro usando métodos diferentes.
A declaração FORM define uma sub-rotina e sua interface. Convenções de nomenclatura se aplicam ao nome da sub-rotina. As funções da sub-rotina são implementadas entre as declarações FORM e ENDFORM. As adições definem os parâmetros formais da sub-rotina e declaram a propagação das exceções de classe até a instrução que a invocou.
Você pode usar o comando PERFORM para chamar uma sub-rotina ABAP (FORM) a partir de qualquer programa, sujeito à verificação normal de autorização ABAP em tempo de execução. Você pode usar essas chamadas a sub-rotinas para a realização de cálculos, para a obtenção de dados a partir do banco de dados, formatação de dados, e assim por diante.
Métodos de Parâmetros
Apesar de uma sub-rotina poder operar em dados globais, este é um design pobre e nunca deve ser feito. O risco de erros de manutenção é muito maior.
Escolha o método mais conservador de passagem de parâmetros com base em objetivos de design:
- Chamada por valor tem a vantagem de proporcionar segurança do objeto de dados. Mudanças na variável na sub-rotina não afetará o principal objeto de dados.
- Chamada por valor e chamada por valor e resultado têm a desvantagem de sobrecarga associada ao fazer cópias de objetos de dados. Evite para grandes objetos de dados.
Sintaxe:
Escreve uma sub-rotina basica:
FORM minhasubrotina.
[instruções]
ENDFORM.
Chama uma sub-rotina basica:
PERFORM minhasubrotina.
Mais informações sobre sub rotinas: http://help.sap.com/abapdocu_702/en/abapform.htm
Exemplo:
Neste exemplo criamos três sub-rotinas, a primeira com uma sintaxe básica, a segunda enviando parâmetros e a terceira usando uma troca de valores dentro da sub-rotina.
Abap
*&---------------------------------------------------------------------* *& Report ZSUBROTINA *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Sub Rotinas *&---------------------------------------------------------------------* REPORT ZSUBROTINA. * Declara variavel DATA : menssagem TYPE c LENGTH 100, num1 TYPE i, num2 TYPE i, resultado TYPE i. * Alimenta variáveis menssagem = 'Enviando Menssagem Com Parametro'. num1 = 10. num2 = 2. resultado = 0. * Chama Sub Rotina PERFORM basico. PERFORM msg USING menssagem. * Troca valores depois da execução da Sub Rotina PERFORM multiplica USING num1 num2 CHANGING resultado. WRITE : / 'Depois da Sub Rotina', / 'Reultado =' UNDER 'Resultado =', resultado. * Cria Sub Rotina * Sub Rotina Comum FORM basico. WRITE : / 'Menssagem de uma Sub Rotina Basica'. ENDFORM. * Utiliza Parametros FORM msg USING messagem TYPE any. WRITE : / menssagem. ENDFORM. FORM multiplica USING VALUE(x1) TYPE any VALUE(x2) TYPE any CHANGING VALUE(x) TYPE any. x = x1 * x2. WRITE : / 'Multiplica X pelos parametros e troca pelo resultado', / ' Dentro da Sub Rotina :', / ' X = ', x , ' Resultado = ', resultado. ENDFORM.
Objetivo e instrutivo, muito obrigado