Visual – SAP Tree – Treeview – cl_simple_tree_model – node_double_click – Abap

Publicado: 16 de abril de 2014 em Abap

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:

  1. Crie um novo programa chamado ztreeview.
  2. Crie uma tela 100 para este programa.
  3. Preencha o elemento tipo OK para OK_CODE para a tela 100.
  4. Em Layout, arraste para o design um Text Field, um Custom Control e um Input/Output Field.
  5. Nomeie o Custom Control de: DISCO.
  6. Nomeie o Input/Output Field de: RODAPE.
  7. Use a figura abaixo para criar o seu Layout:

    SAP Tree- Layout

    SAP Tree- Layout

  8. Em Flow Logic crie os elementos PBO e PAI default.
  9. Ative a tela 100.
  10. Digite o código abaixo no seu programa, ative e teste.
SAP Tree - Programa

SAP Tree – Programa

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.
Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s