"
Apoiado por

Chama dinamicamente classes e métodos

Ora aprende lá como invocar dinamicamente um método.

Vamos a isso.

Como invocar um método de uma instância:


CALL METHOD ref->(f)

Como invocar um método estático:


CALL METHOD classe=>(f) 
CALL METHOD (c)=>metodo
CALL METHOD (c)=>(f) 

E como invocar um método da própria classe:


CALL METHOD (f)
CALL METHOD ME->(f) 

A variável f é alfanumérica e contém o nome do método.
A variável c também é alfanumérica e contém o nome da classe.

O manual de instruções disto está aqui.

Como se não bastasse, podes passar os parâmetros dinamicamente assim:


CALL METHOD (class)=>(meth) 
      PARAMETER-TABLE 
        t_param.

em que t_param é uma tabela interna do tipo ABAP_PARMBIND_TAB.

O manual de instruções disto está aqui.

E encontras um exemplo da coisa aqui.

Muito útil. Claro que, além de mais confuso, como o código não pode ser compilado será necessariamente mais lento do que as chamadas estáticas normais. Mas é bom saber porque pode dar jeito.

Nota adicional: O Bruno Esperança sugere, e com razão, que estas chamadas dinâmicas só devem ser feitas quando mesmo necessário, visto perder-se a funcionalidade “where-used”.

Obrigado José Faria por me mostrares isto.

O Abapinho saúda-vos.

3 comentários a “Chama dinamicamente classes e métodos”

  1. Programista ABAP Diz:

    PARAMETER-TABLE could be used also with FUNCTION CALL same with EXCEPTION-TABLE

  2. Bruno Diz:

    Boas!

    Um pequeno “à parte”… já visto utilizado em situações em que não era nada necessário… e uma desvantagem disto é que depois não se consegue utilizar a funcionalidade “where-used” no método invocado. Acho que vale a pena manter isto em mente!

    Abraço,
    Bruno

  3. Nuno Godinho Diz:

    Obrigado Bruno, concordo contigo e acrescentei uma nota ao artigo a dizer isso.

Deixe um comentário


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