"
Apoiado por

APPEND LINES OF classe->metodo() TO itbl

O ABAP anda cada vez mais esperto. Ainda sou do tempo em que não se fazia nada dele. E agora, lentamente, com mais de um quinto de século de atraso, lá vai tentado imitar o C e o Java e ficando mais flexível.

Eu ia fazer algo deste tipo:


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( 'B' ).
APPEND LINES OF t_t001_aux TO t_t001.

Mas depois pensei que… às tantas… talvez isto desse:


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.

E deu!

Percebeste? O método GET_LINES devolve uma tabela interna tipo T001. Em vez de guardar o resultado numa tabela interna auxiliar e em seguida adicionar as linhas da tabela à tabela final, assim adiciona-se directamente o resultado do método à tabela final. Fica mais simples, mais elegante, e poupa-se uma tabela interna auxiliar. Obrigado a pollovf pela foto. O Abapinho saúda-vos.

6 comentários a “APPEND LINES OF classe->metodo() 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


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).