"
Supported by

APPEND LINES OF class->method() TO itbl

ABAP is getting smarter all the time. Back in my day, no one did anything with it. And now, slowly, more than a fifth of a century late, it’s trying to imitate C and Java, and becoming more flexible.

I was going to do something like this:


DATA: t_t001 TYPE STANDARD TABLE OF t001,
            t_t001_aux LIKE t_t001.

t_t001_aux = ZCL_T001=>GET_LINES( 'A' ).
APPEND LINES OF t_t001_aux TO t_t001.

REFRESH t_t001_aux[].

t_t001_aux = zcl_t001=>get_lines( 'A' ).
APPEND LINES OF t_t001_aux TO t_t001.

But then I thought… maybe… this might work:


DATA: t_t001 TYPE STANDARD TABLE OF t001.

APPEND LINES OF zcl_t001=>get_lines( 'A' ) TO t_t001.
APPEND LINES OF zcl_t001=>get_lines( 'B' ) TO t_t001.

And it did!

Did you understand? The GET_LINES method returns an internal T001-type table. Instead of saving the result in an internal auxiliary table and then adding the table’s lines to the final table, the method’s result is input directly to the final table. This is simpler and more elegant, and saves an internal auxiliary table.

Thanks to pollovf for the photo.

Greetings from Abapinho.

6 comentários a “APPEND LINES OF class->method() TO itbl”

  1. Custodio Diz:

    Ola Nuno,

    Ca estou eu outra vez pra dar meus pitacos. Isso eh sem duvida muito interessante, e se nao me engano existe desde ABAP 7.02. Lembrando que devemos seguir as regras de tabelas internas, por exemplo, se sua tabela interna for do tipo HASHED, devera usar INSERT LINES OF ao inves de APPEND LINES OF. E se seu metodo retornar uma estrutura ao inves de tabela interna, devera usar apenas APPEND zcl_t001=>get_line( ‘B’ ) TO t_t001.

    Grande abraco,

  2. nmr Diz:

    Olá Nuno,

    Pois é, o nosso ABAP está cada vez mais evoluído. E este é um belo exemplo disso mesmo.

    Julgo que é importante referir que este tipo de instruções só funciona com os chamados FUNCTIONAL METHODS, isto é, com métodos que têm um parâmetro RETURNING.

    E ainda que podem ser usados em vários contextos diferentes, como por exemplo:

    IF zcl_t001=>number_of_lines(“A”) > 0.

    ENDIF.

    Abraço.

  3. Bruno Diz:

    Boas,

    Eu tentei usar um functional method num IF e não funcionou :(

    Será por ser um método de instância e não estático?…

    Abraços,
    Bruno

  4. Nuno Godinho Diz:

    Bruno, e esse método devolve algum valor? É que tem de devolver. Eu farto-me de usar métodos em IFs. Tipo: IF o_mundo_e_redondo( ) = ‘X’. da_volta_ao_mundo( ). ENDIF.

  5. Custodio Diz:

    Bruno, o unico requisito para usar metodo funcional em IF eh esse mesmo: que seja um metodo funcional, como ja explicado por NMR, um metodo que tenha um parametro do tupo RETURNING. Nao importa se eh INSTANCE ou STATIC.

  6. Vinícius Diz:

    Bruno,

    O motivo de não funcionar para você a utilização do método funcional no IF é que a versão do EHP do SAP que você deve estar trabalhando ainda não suporta esse tipo de comando, ou seja, a partir da versão 6 do Enhancement Package SAP que é permitido utilizar esse tipo de comando.
    Inclusive, nessa versão do EHP, é possível você utilizar o famoso CTRL + SPACE do Eclipse, Visual Studio, etc. para ver os métodos que um objeto lhe oferece, ver os campos de uma Workarea e muito mais.

    Abraços,
    Vinícius

Deixe um comentário


About Abapinho
Abapinho runs on WordPress
Articles (RSS) e Comments (RSS).