Em ABAP existem técnicas especiais que permitem criar além de programas dinâmicos como vimos no post anterior como também sub-rotinas temporárias. Você pode usar a instrução GENERATE SUBROUTINE POOL para criar sub-rotinas temporárias.
Esta declaração cria um pool de sub-rotina na área de memória principal do programa em execução. Você passa o código fonte do pool de sub-rotina para a tabela interna. A instrução retorna o nome do pool de sub-rotina gerada em um campo <prog> que deve ter tipo C. Você usa o nome contido em <prog> para chamar as sub-rotinas externas definidas na tabela interna através de chamadas de sub-rotinas dinâmicas.
Exemplo:
Neste exemplo criamos uma sub-rotina temporária na memoria do programa em execução.
Abap
*&---------------------------------------------------------------------*
*& Report ZDINAMIC_INCLUDE
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Sub-rotinas Temporarias
*& Procedimento Dinamico - Tecnicas Especiais ABAP
*&---------------------------------------------------------------------*
REPORT ZDINAMIC_INCLUDE.
* Cria variavel para rotina
DATA Codigo(72) OCCURS 11.
* cria variaveis para menssagem
DATA : Programa(16),
Menssagem(150),
Linha(3),
Palavra(10),
Desvio(3).
* Cria código dinamico
APPEND '* Desenvolvimento Aberto' TO CODIGO.
APPEND '* ----------------------' TO CODIGO.
APPEND '* ABAP Special Techniques ' TO CODIGO.
APPEND '*' TO CODIGO.
APPEND '* Subrotina temporaria' TO CODIGO.
APPEND '' TO CODIGO.
APPEND 'PROGRAM SUBROTINA.' TO CODIGO.
APPEND 'FORM MINHASUB.' TO CODIGO.
APPEND 'WRITE : / ''Está é minha subrotina temporaria'' COLOR 6.' TO CODIGO.
APPEND 'ENDFORM.' TO CODIGO.
* Gera subrotina
GENERATE SUBROUTINE POOL CODIGO
NAME PROGRAMA
MESSAGE MENSSAGEM
LINE LINHA
WORD PALAVRA
OFFSET DESVIO.
* Verifica retorno
IF SY-SUBRC <> 0.
* Se houver erro:
WRITE: / 'ERRO na geração da linha', LINHA,
/ MENSSAGEM,
/ 'Word:', PALAVRA, 'at offset', DESVIO.
ELSE.
* Se houver sucesso:
WRITE: / 'Técnicas Especiais ABAP - Sub-rotinas temporarias'.
SKIP 1.
WRITE: / 'O nome da sub rotina é ' COLOR 3, PROGRAMA COLOR 5.
SKIP 2.
PERFORM MINHASUB IN PROGRAM (PROGRAMA).
ENDIF.


