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.