ABAP Tree List – Primeiro Programa

Em todos os projetos por onde eu passei, relatórios do tipo ALV Grid são sempre campeões de popularidade. Dada a sua facilidade de programação e uso, ele é usado em muitas aplicações dentro do sistema, sendo amplamente encontrado em programas standard.

Eu não vejo essa mesma popularidade no caso do ABAP Tree List, também encontrado em muitos programas standard, mas raramente marca presença em programas customizados (programas Z). Não sei se isso ocorre porque poucos sabem usar ou os programadores não usam por não ser popular.

No entanto, venho observando um certo interesse em usuários e programadores em usar esse tipo de controle para organização de dados. Sendo assim, nesse artigo iremos explorar um programa bem simples usando o ATL (ABAP Tree List).

A saída desse programa será o mesmo apresentado na figura abaixo:

ABAP Tree List - Resultado Final

A árvore terá um nó Raiz, dois nós, Filho 1 e Filho 2, sendo que o nó Filho 1 terá dois itens. Com isso já será possível aprender boa parte da mecânica do ATL.

Preparação da Tela

Assim como o ALV Grid, o a Tree List precisa estar em um container dentro de uma tela. Para isso, é necessário criar essa tela e incluir o elemento Custom Control nela. Veja na figura abaixo, como ficará a sua tela com o esse elemento:

ABAP Tree List - Screen Painter

Na aba Flow Logic, teremos os seguintes módulos, cada um com sua funcionalidade específica e explicada logo mais abaixo.

Precisamos programar algum botão de saída do programa. Para isso precisamos criar uma GUI Status para habilitar o botão BACK. Isso é feito no módulo STATUS_0100, descrito abaixo:

O comando SET PF-STATUS define o uso do Status GUI de nome STATUS100, onde habilitaremos o botão BACK, definindo a function code de mesmo nome:

GUI Status

O título para nossa aplicação será “ABAP101 – List Tree”, definido pelo GUI Title com nome TITLE100.

Agora que já temos o botão BACK habilitado para nosso programa, temos que programar o PAI para que o nosso novo botão passe a ter vida. Para isso devemos criar o módulo USER_COMMAND_0100 com o seguinte tratamento da ação do usuário:

Partiremos agora para a programação da nossa Tree List.

Programando a Tree List

Voltamos para o programa principal, declare as referências para os objetos que usaremos para mostrar a árvore:

Não colocaremos nenhuma lógica no programa principal, nesse exemplo colocarei toda lógica para preenchimento da árvore nos módulos do PBO.

Vamos começar pelo módulo CREATE_TREE:

Como primeira tarefa criamos o container e o associamos ao Custom Control criado anteriormente na tela. Esse container tem o nome de TREE_CONTAINER e precisa ser exatamente como foi colocado na tela, em letras maiúsculas. Se for dessa forma, o controle não será mostrado na tela, sem nenhum aviso de erro.

Agora precisamos criar o objeto Tree List propriamente dito, usando o comando descrito acima.

Essa foi a parte mais fácil, agora vem a parte divertida.

Preenchendo a Tree List

Com os objetos necessários criados, precisamos preencher a Tree List com seus dados. Para fazer o preenchimento da árvore, vamos estudar todo o módulo FILL_TREE passo a passo:

Declaração iniciais:

Nas declarações iniciais criamos primeiro um tipo tabela do tipo MTREEITM, que será usada para a criação da tabela interna com os itens da árvore. Também criamos uma segunda tabela interna que será usada para estruturar os nós da nossa árvore. Por último podemos criar uma constante que será na verdade uma estrutura onde os campos representam nós e itens da árvore. Tabela de Nós:

O trecho de código acima é responsável por preencher a tabela com os nós que farão parte da árvore. Os nós são representados por ícones amarelos no formato de pastas, sendo alteradas quando o nós está selecionado, para pastas abertas.

Para que um nó seja adicionado (node-node_key = c_nodekey-child1), é necessário informar em qual nó ele estará associado (node-relatkey = c_nodekey-root.). O primeiro nó a ser criado é o raiz, que não precisa estar associado a nenhum outro (node-node_key = c_nodekey-root). Já para os outros nós é necessário informar qual o nó pertencente. Estude o código, pois esta estrutura é bem simples.

Tabela de Itens:

Finalmente podemos preencher a tabela interna de itens, que é responsável pelo conteúdo dos textos que serão mostrados na árvore. Detalhe importante aqui é que para cada elemento do item, temos uma entrada na tabela interna. Por exemplo,  para o primeiro item chamado do nó “Filho 1”, temos um ícone, um título e um comentário. Para cada elemento, uma linha dessa tabela interna deve ser criada. Novamente aqui, estude o código e você entenderá o que estou falando. Adiciona Nós e Itens à Árvore:

Como último passo adicionamos as duas tabelas de nós e itens à árvore que já poderá ser mostrada para o usuário.

Nesse ponto você já pode ativar e rodar seu programa.

Considerações Finais

Como você pode ver é relativamente fácil construir listas no formato de árvore. Elas são excelentes para enriquecer os programas, sendo uma ótima ferramenta para organização dos dados para o usuário. As árvores são geralmente usadas em conjunto com outros controles, como por exemplo ALV ou caixa de texto (vide a transação SE80).

Neste arquivo NUGG você encontra o programa completo para você estudar e modificá-lo.

Próximos Passos

Uma ótima oportunidade para incrementar o programa dado, é adicionar os nós com informações provenientes de uma tabela transparente. Como sugestão, faça um programa que mostre como nó raiz a palavra “Flights Info”. Como nós, temos as seguintes empresas aéreas “AA”, “LH” e “UA”, com seus respectivos nomes (tabela SPFLI). Como itens, dados da tabela SFLIGHT, como data do vôo, cidade partida e cidade destino.

Se você conseguiu fazer, você pode me mandar o arquivo NUGG e servirá de base para meu próximo post sobre Tree List, com seus devidos créditos. Agora, você quiser ganhar alguns pontos extras, faça o programa e um artigo, nos moldes desse que você acabou de ler. Se estiver bem escrito e bem explicado, publicaremos aqui, e claro com seus devidos créditos.

Bom trabalho e divirta-se!

You may also like...

4 Responses

  1. Marcelo Lopes says:

    Obrigado por esse tutorial, me ajudou muito!

  2. Luis Chacon says:

    Fiz um programa recentemente parecido, é do estilo dnd (drop and down) só que em cada nó que se dava doble click aparecia ao lado um layout de entrada de dados diferente, fiz com mais de 50 layouts diferentes para o SPED ECF.
    Não consegui colar a tela senão mostraria como ficou. Abraço

  1. January 3, 2012

    […] ABAP Tree List – Primeiro Programa […]