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.
10 de Julho de 2013 às 17:37
PARAMETER-TABLE could be used also with FUNCTION CALL same with EXCEPTION-TABLE
15 de Janeiro de 2014 às 8:10
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
15 de Janeiro de 2014 às 12:25
Obrigado Bruno, concordo contigo e acrescentei uma nota ao artigo a dizer isso.