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.