Em computação, um tree view (literalmente do inglês vista de árvore) é um elemento de interface gráfica (isto é um componente widget) que permite ao usuário mostrar dados hierárquicos em forma de árvore, expandir ou recolher os ramos e nós. Dependendo do wiget toolkit ou aplicação em uso, existem muitos estilos de apresentação gráfica de tree views.
SAP Tree
É um controle que permite que você exiba estruturas de árvore em uma tela. Ele foi desenvolvido pela SAP, e enquanto ela cumpre os requisitos básicos de um controle de árvore (Treeview), não foi adaptado para aplicações individuais. Existem três versões diferentes do SAP Tree:
Classes do SAP Tree
- CL_GUI_SIMPLE_TREE – Classe que instancia um Treeview tradicional com uma única coluna.
- CL_GUI_COLUMN_TREE – Classe que instancia um Treeview com exibição de colunas.
- CL_GUI_LIST_TREE – Classe que instancia um Treeview com uma exibição de listas.
Screen Painter
Para usar o SAP Tree siga os seguintes passos:
- Crie um novo programa chamado ztreeview.
- Crie uma tela 100 para este programa.
- Preencha o elemento tipo OK para OK_CODE para a tela 100.
- Em Layout, arraste para o design um Text Field, um Custom Control e um Input/Output Field.
- Nomeie o Custom Control de: DISCO.
- Nomeie o Input/Output Field de: RODAPE.
- Use a figura abaixo para criar o seu Layout:
- Em Flow Logic crie os elementos PBO e PAI default.
- Ative a tela 100.
- Digite o código abaixo no seu programa, ative e teste.
Exemplo:
Neste exemplo usamos uma visão de arvore para exibir uma discografia musical, você pode abrir e fechar os nós do modelo de dados em visão de árvore, um duplo clique do mouse em cada nó dispara um evento para que exibe a chave do nó corrente em um rodapé. No código abaixo os comentários completam a explicação do componente SAP Tree e o evento duplo clique.
Abap
*&---------------------------------------------------------------------*
*& Report ZTREEVIEW
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Treeview
*&---------------------------------------------------------------------*
REPORT ZTREEVIEW.
* Declara componentes e eventos de botões
DATA: DISCO TYPE REF TO cl_gui_custom_container,
Arvore TYPE REF TO cl_simple_tree_model,
g_ok_code TYPE sy-ucomm.
DATA rodape TYPE string.
* Declara eventos para duplo clique
CLASS duploclique DEFINITION.
PUBLIC SECTION.
METHODS:
handle_node_double_click
FOR EVENT node_double_click
OF cl_simple_tree_model
IMPORTING node_key.
ENDCLASS.
* Implementação da classe de eventos
CLASS duploclique IMPLEMENTATION.
METHOD handle_node_double_click.
RODAPE = node_key.
ENDMETHOD.
ENDCLASS.
* Chama evento em um ponto particular do programa.
CLASS cl_gui_cfw DEFINITION LOAD.
* Instacia da classe eventos.
DATA eventos TYPE REF TO duploclique.
START-OF-SELECTION.
* Cria objeto da classe
CREATE OBJECT Eventos.
CALL SCREEN 100.
MODULE STATUS_0100 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
* Cria o SAP Tree
IF ARVORE IS INITIAL.
PERFORM criaArvore.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
MODULE USER_COMMAND_0100.
* Declara variavel de captura do evento
DATA: return_code TYPE i.
* chama o evento.
CALL METHOD cl_gui_cfw=>dispatch
IMPORTING
return_code = return_code.
* Caso nennhum evento seja detectado limpa OK_CODE.
IF return_code <> cl_gui_cfw=>rc_noevent.
CLEAR g_ok_code.
EXIT.
ENDIF.
CASE g_ok_code.
* Termina o programa e destroi os componentes
WHEN 'BACK'.
IF NOT DISCO IS INITIAL.
CALL METHOD DISCO->free
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2.
CLEAR DISCO.
CLEAR ARVORE.
ENDIF.
LEAVE PROGRAM.
ENDCASE.
* Limpa o ok_code
CLEAR g_ok_code.
ENDMODULE.
FORM criaArvore.
* Declara eventos
DATA: event TYPE cntl_simple_event,
events TYPE cntl_simple_events.
* Cria Objeto da classe SAP Tree
CREATE OBJECT ARVORE
EXPORTING
NODE_SELECTION_MODE = cl_simple_tree_model=>node_sel_mode_single
EXCEPTIONS
illegal_node_selection_mode = 1.
* Cria objeto Custom Control
CREATE OBJECT DISCO
EXPORTING
CONTAINER_NAME = 'DISCO'.
CALL METHOD ARVORE->CREATE_TREE_CONTROL
EXPORTING
PARENT = DISCO.
* Adicona nodes
PERFORM adicionaNodes.
* Cria eventos
event-eventid = cl_simple_tree_model=>eventid_node_double_click.
event-appl_event = 'X'. " process PAI if event occurs
* Adiciona Eventos
APPEND event TO events.
* Registra Eventos
CALL METHOD ARVORE->set_registered_events
EXPORTING
events = events
EXCEPTIONS
illegal_event_combination = 1
unknown_event = 2.
* Adicina eventos na classe da aplicação para capturar evento duplo clique
SET HANDLER eventos->handle_node_double_click FOR ARVORE.
CALL METHOD ARVORE->EXPAND_NODE
EXPORTING
NODE_KEY = 'Root'.
ENDFORM.
FORM adicionaNodes.
* Insere node principal
CALL METHOD ARVORE->ADD_NODE
EXPORTING
NODE_KEY = 'Root'
ISFOLDER = 'X'
TEXT = 'Discografia'.
* Insere nodes para as bandas
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'BANDA1'
relative_node_key = 'Root'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = 'X'
text = 'Beatles'.
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'BANDA2'
relative_node_key = 'Root'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = 'X'
text = 'Rolling Stones'.
* Insere Nodes para os Albuns
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'ALBUM1'
relative_node_key = 'BANDA1'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = 'X'
text = 'Please, Please Me'.
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'ALBUM2'
relative_node_key = 'BANDA2'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = 'X'
text = 'The Rolling Stones'.
* Insere nodes para o Album 1
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'MUSICA1'
relative_node_key = 'ALBUM1'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = ''
text = 'I Saw Her Standing There'.
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'MUSICA2'
relative_node_key = 'ALBUM1'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = ''
text = 'Misery'.
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'MUSICA3'
relative_node_key = 'ALBUM1'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = ''
text = 'Anna (Go to Him)'.
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'MUSICA4'
relative_node_key = 'ALBUM1'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = ''
text = '...'.
* Insere node para o Album 2
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'MUSICA5'
relative_node_key = 'ALBUM2'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = ''
text = 'Route 66'.
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'MUSICA6'
relative_node_key = 'ALBUM2'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = ''
text = 'I Just Want to Make Love to You'.
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'MUSICA7'
relative_node_key = 'ALBUM2'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = ''
text = 'Honest I Do'.
CALL METHOD ARVORE->ADD_NODE
EXPORTING
node_key = 'MUSICA8'
relative_node_key = 'ALBUM2'
relationship = cl_simple_tree_model=>relat_last_child
isfolder = ''
text = '...'.
ENDFORM.



