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.