Criando Objetos / Chamando Métodos Dinamicamente

Na busca pela solução de um problema, debugando, debugando e debugando novamente, me deparei com a criação dinâmica de objetos.

Estudando mais a fundo, eis que surge assunto para mais um post! Afinal, quanto mais dinâmicos forem os programas e API´s, melhor será sua performance e re-usabilidade.

O que faz com que consigamos criar o objeto / chamar o método dinamicamente, é a utilização de uma tabela, na qual informamos todos os parâmetros necessários (seja de importing, exporting, changing, etc), ou seja, podemos popular esta tabela de acordo com nossa necessidade em determinado ponto do programa.

Utilizei como exemplo, a criação de um objeto com referência à classe ‘CL_GUI_ALV_GRID’, o qual chamei de r_grid.

Para facilitar o entendimento, segue abaixo o Pattern (modelo) da criação estática deste objeto:

 

OBS: o objeto r_container é do ripo CL_GUI_CUSTOM_CONTAINER , criado estaticamente no código abaixo.

Vamos criar o objeto apenas informando o parâmetro obrigatório ‘I_PARENT’, e para isso, utilizaremos uma workarea do tipo abap_parmbind, e uma tabela tipo abap_parmbind_tab, denominadas lwa_param e lt_param respectivamente.

Na propriedade ‘Name’ sempre informaremos o parâmetro, neste caso ‘I_PARENT’.

Na propriedade ‘Kind’, o tipo (Exporting, conforme modelo estático).

Para informar o tipo, precisamos utilizar os atributos da classe ‘CL_ABAP_OBJECTDESCR’, com isso, teremos:

Por fim, necessitamos informar o valor atribuído a este parâmetro, e conforme podemos verificar no código abaixo, o valor é o objeto r_container (objeto de referência a classe CL_GUI_CUSTOM_CONTAINER).

Desta forma, necessitamos incluir a referência do objeto na tabela:

Agora é só inserirmos nossa workarea na tabela e criarmos o objeto / chamarmos o método (não se esqueça de utilizar o try-catch, de forma a tratar possíveis exceções).

Obs: Verifique a sintax de chamada do método / criação do objeto. Observe que cria-se o objeto do tipo de uma classe (informada na variável lv_type) com os parâmetros inseridos na tabela.

Fica o desafio: que tal chamar um método dinamicamente e utilizar uma tabela de excessão? Ela funciona da mesma maneira para recuperar as exceções lançadas pelos métodos. Pesquise, tente fazer e em caso de dúvidas, entre em contato!

You may also like...