TRANSLATION:
Create an ALV TREE. Easy to use and has a function as close to an ALV GRID (Buttons Sort, Filter, Graphics, etc, etc) and also use its properties with only an 'X', then follow the steps.

PARTE 4 - FINAL - PART 4 - END


EJEMPLO DE COMO ASOCIAR EL ALV TREE CON UN PROGRAMA

Tenemos un programa el cuál un almacén tiene asignado muchas plantillas.
El caso es que deseamos que el ALV TREE nos permita seleccionar todos ó solamente una plantilla, para grabar. También poderlo ordenar ascendente ó descendente, en fin como deseemos. Así mismo filtrarlo,  Exportarlo a excel, etc etc..

****************TRANSLATION*********************
EXAMPLE OF HOW TO REGISTER WITH THE CMA PROGRAM TREE

We have a program on which a store has many templates assigned.

The fact is that we want the ALV TREE allows us to select all or only a template for recording. Also being able to sort ascending or descending, in short as we wish. If we can include a graphic button, filter, export to Excel, etc etc. ..


**********************************************************

COMO LO HACEMOS?

DEFINIMOS: PERFORM INIT_TREE.
EN ALGUNA PARTE DEL PROGRAMA.

****************************TRANSLATION*************************
HOW WE DO IT?
DEFINE: PERFORM INIT_TREE.
IN ANY PORTION OF THE PROGRAM.
***********************************************************************
FORM INIT_TREE.

CALL SCREEN 200.

ENDFORM.

******************************************************************************
SCREEN 200:

PROCESS BEFORE OUTPUT.

  MODULE pbo.

PROCESS AFTER INPUT.

  CHAIN.
  ENDCHAIN.

  MODULE exit_command_0100 AT EXIT-COMMAND.
  MODULE pai.


****************************************************************************

MODULE pbo OUTPUT.
  SET PF-STATUS 'SUBDIV' EXCLUDING fcode.  
  SET TITLEBAR 'MAINTITLE'.  "TITULO
  PERFORM init.
ENDMODULE.     
MODULE pai INPUT.

  DATAanswer TYPE c.

  save_ok ok_code.
  CLEAR ok_code.

  CASE save_ok.

    WHEN 'EXIT'.
      PERFORM exit_program.

    WHEN 'BACK'.
      PERFORM exit_program2.

    WHEN OTHERS.

  ENDCASE.

ENDMODULE.                    "pai INPUT 

*********************************************************************************
** 
YA EN EL PROGRAMA
DEFINIMOS LAS VARIABLES GLOBALES


****************************TRANSLATION******************************
AND IN THE PROGRAM
DEFINE GLOBAL VARIABLES
****************************************************************************
DATA:
       ao_tree              TYPE REF TO zcl_alv_tree_mainp,
       ao_tree1             TYPE REF TO zcl_alv_tree_mainp,
       ao_container        TYPE REF TO cl_gui_custom_container,
       ao_container1       TYPE REF TO cl_gui_custom_container,
       ao_toolbar          TYPE REF TO cl_gui_toolbar,
       ao_toolbar1         TYPE REF TO cl_gui_toolbar,
       ao_graphic          TYPE REF TO cl_alv_graphics.

DATAat_nodetab TYPE zwplant OCCURS WITH HEADER LINE,
       l_top_key TYPE lvc_nkey.

** tablas

INCLUDE <icon>.

** dynpro
* Defino una clase local para los eventos del toolbar
CLASS lcl_toolbar_event_receiverx DEFINITION.

  PUBLIC SECTION.
    METHODSon_function_selected
              FOR EVENT function_selected OF cl_gui_toolbar
              IMPORTING fcode.

ENDCLASS.                    "lcl_toolbar_event_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_toolbar_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
** DEFINIMOS UNA CLASE PARA ADICIONAR EL BOTON DE GRABAR
CLASS lcl_toolbar_event_receiverx IMPLEMENTATION.

  METHOD on_function_selected.
    DATAflag_s TYPE c.

    CASE fcode.

      WHEN '&GRE'.
        PERFORM graba_eliminacion.
    ENDCASE.

  ENDMETHOD.                    "on_function_selected

ENDCLASS.                    "lcl_toolbar_event_receiver IMPLEMENTATION


*&---------------------------------------------------------------------*
*&      Form  GRABA_ELIMINACION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM graba_eliminacion.

  FIELD-SYMBOLS<te> TYPE table.
  FIELD-SYMBOLS<we> TYPE zwplant.
  DATAanswer TYPE c.

  DATAt_table TYPE REF TO data.
  CREATE DATA t_table TYPE TABLE OF zwplant.
  ASSIGN t_table->TO <te>.

  CALL METHOD zcl_msg=>popup_to_confirm
    EXPORTING
      ps_line1              'Está seguro que desea eliminar '
      ps_line2              'las plantillas seleccionadas ?'
      ps_titel              'ELIMINACION DE PLANTILLAS'
      pc_hide_cancel_button 'X'
    IMPORTING
      ps_respuesta          answer.

  IF answer 'J'.
** AQUI ASIGNAMOS LA INFORMACION DEL ARBOL (TABLA)
    ASSIGN ao_tree->ao_nodetab->TO <te>.

    DATAsent TYPE string.
    LOOP AT <te> ASSIGNING <we>.
      IF <we>-checkbox 'X' AND <we>-type '02'.
.........
........
........
.......
    ENDLOOP.

  ENDIF.

ENDFORM.                    "GRABA_ELIMINACION

** AQUI DEFINO UNA ESTRUCTURA PARA EL ALV TREE. En este caso es ZWPLANT.
** SIEMPRE nuestra estructura debe INCLUIR LA ESTRUCTURA ZTREE que tiene los componentes
** del árbol. El resto podemos definir lo que deseemos para el fieldcatalog.
**
ESTRUCTURA ZWPLANT:

***********TRANSLATION*****************************************
** Here I am defining a structure for ALV TREE. In this case is ZWPLANT.
ALWAYS ** our structure should include the structure that has the components ZTREE
Tree **. The rest we can define what we want for fieldcatalog.
**
ZWPLANT STRUCTURE:

**********************************************************************
CHECKBOX  XFELD CHAR 1
.INCLUDE ZTREE
0
TKEY LVC_NKEY CHAR 12
TYPE SEU_TYPE CHAR 4
TSCREEN SEU_LOCK  CHAR 1
TSAVE ZESAVE CHAR 1
TPAGE ZEPAGINA INT2 5
TCOM CHAR1 CHAR 1
TEXT1 CHAR10 CHAR 10
TEXT2 ZEDESCP CHAR 20
NUMBER2 INT4 INT4 10
TEXT3 ZEELIM CHAR 1

******************************************************************************

FORM init.

  DATAl_tree_container_name(30TYPE c.
  DATA  l_hierarchy_header TYPE treev_hhdr.
  DATAat_toolbar_excl TYPE ui_functions.
  DATAls_variant TYPE disvariant.

  IF ao_tree IS INITIAL.

    CREATE OBJECT ao_tree.

    ls_variant-report sy-repid.

    PERFORM build_hierarchy_header CHANGING l_hierarchy_header.

** PODEMOS DEFINIR CUALQUIER ATRIBUTO QUE QUERRAMOS Y QUE 
** NECESITEMOS EN ESTE CASO ESCONDEMOS CIERTOS BOTONES DE 
** CALCULOS, BOTONES GRAFICOS, ETC, ETC
************************TRANSLATION***************************************
We can define ** ANY AND ATTRIBUTE that we want
IN THIS CASE ** need to hide certain buttons on
CALCULATIONS **, graphical buttons, ETC, ETC
*********************************************************************************
    CALL METHOD ao_tree->init_tree
      EXPORTING
        p_program          sy-repid
        p_structure         'ZWPLANT'
        p_header            l_hierarchy_header
    p_alv_is_variant              ls_variant
    p_alv_i_save                  'A'
*    p_alv_i_default               = 'x'
*    p_alv_is_exception_field      =
*    p_alv_it_special_groups       =
*    p_alv_it_list_commentary      =
*    p_alv_i_logo                  =
*    p_alv_i_background_id         =
*    p_alv_it_except_qinfo         =
*    p_alv_it_filter               =
*    p_hide_mc_fc_f4               =
    p_hide_mc_fc_calculate        'X'
    p_hide_mc_fc_calculate_avg    'X'
    p_hide_mc_fc_calculate_max    'X'
    p_hide_mc_fc_calculate_min    'X'
    p_hide_mc_fc_calculate_sum    'X'
    p_hide_mc_fc_col_optimize     ' '
p_hide_ap_button_gr1 'X'
p_hide_ap_button_gr2 'X'
p_hide_ap_button_xxl ' '
p_hide_ap_button_crr 'X'
p_hide_ap_button_crl 'X'
p_hide_ap_button_ctl 'X'
p_hide_ap_button_ctr 'X'.

*    p_hide_ap_button_gr2 = 'X'
*    p_hide_mc_fc_collapse         =
*    p_hide_mc_fc_col_invisible    =
*    p_hide_mc_fc_col_optimize     =
*    p_hide_mc_fc_current_variant  =
*    p_hide_mc_fc_detail           =
*    p_hide_mc_fc_expand           =
*    p_hide_mc_fc_find             =
*    p_hide_mc_fc_graphics         =
*    p_hide_mc_fc_help             =
*    p_hide_mc_fc_load_variant     =
*    p_hide_mc_fc_maintain_variant =
*    p_hide_mc_fc_print_back       =
*    p_hide_mc_fc_print_back_all   =
*    p_hide_mc_fc_print_prev       =
*    p_hide_mc_fc_print_prev_all   =
*    p_hide_mc_fc_save_variant     =
*    p_hide_mc_fc_settop           =
*    p_hide_mc_fc_find_more        =
    .
* construyo cabecera

    PERFORM build_fieldcatalog.

* escondo funciones

    CALL METHOD ao_tree->display_alv.

** creo la jerarquia del arbol

    PERFORM select_data.

    CALL METHOD cl_gui_cfw=>flush.

  ENDIF.
ENDFORM.                    "init

*----------------------------------------------------------------------

FORM build_hierarchy_header CHANGING p_hierarchy_header TYPE treev_hhdr.

  p_hierarchy_header-heading '     C O D I G O'.
  p_hierarchy_header-tooltip ' CODIGO'.
  p_hierarchy_header-width 25.
  p_hierarchy_header-width_pix 'X'.
  p_hierarchy_header-t_image icon_partner.

ENDFORM.                    "build_hierarchy_header

*---------------------------------------------------------------------*

FORM build_fieldcatalog.

  DATAls_fieldcatalog TYPE lvc_s_fcat,
        ls_fcat TYPE lvc_s_fcat.

** ACCESAMOS AL FIELDCATALOG DEL ARBOL.

  LOOP AT ao_tree->at_fieldcatalog INTO ls_fieldcatalog.

    ls_fieldcatalog-no_out  'X'.

    IF ls_fieldcatalog-fieldname+0(3'NUM'.
      ls_fieldcatalog-do_sum 'X'.
    ENDIF.

    IF ls_fieldcatalog-fieldname 'TEXT3_ICON'.
      ls_fieldcatalog-icon  'X'.
      ls_fieldcatalog-outputlen 10.
    ENDIF.

    IF ls_fieldcatalog-fieldname 'TEXT3'.
      ls_fieldcatalog-outputlen 1.
    ENDIF.

    IF ls_fieldcatalog-fieldname 'TEXT1' OR ls_fieldcatalog-fieldname 'NUMBER1'.
      ls_fieldcatalog-no_out  'X'.
    ENDIF.

    ls_fieldcatalog-col_opt  'X'.

    MODIFY ao_tree->at_fieldcatalog FROM ls_fieldcatalog.

  ENDLOOP.

ENDFORM.                    "build_fieldcatalog

FORM select_data.

  DATAnode_tab TYPE zwplant.
  DATAconta TYPE lvc_nkey.
  DATAconta_g TYPE i.
  DATAconta_g2 TYPE i.
  DATAfecha_out(11TYPE c.
  DATAfecha_in TYPE datum.
  DATAcaden TYPE string.

  DATA:
        label_nodex TYPE lvc_value,
        item_imagex TYPE tv_image,
        item_image2x TYPE tv_image,
        node_imagex TYPE tv_image.

  FIELD-SYMBOLS <node_header> TYPE zwplant.
  FIELD-SYMBOLS <node_detail> TYPE zwplant.

  TYPESBEGIN OF t_date,
          year(4)  TYPE n,
          month(2TYPE n,
          day(2)   TYPE n,
        END OF t_date.

  FIELD-SYMBOLS <fecha> TYPE t_date.

  DATA sep TYPE c.

** inicializacion
  CLEARnode_tab.  REFRESHat_nodetab.
  CLEAR conta.
  REFRESH fcode.

  usuario sy-uname.
  conta 0.

** DEFINIMOS EL NODO RAIZ
  CALL METHOD ao_tree->layout_nivel_text
    EXPORTING
      p_key       conta
      p_node_text 'PLANTILLAS'.

  node_imagex icon_display.

  CALL METHOD ao_tree->layout_nivel_node
    EXPORTING
      p_key      conta
      p_isfolder 'X'
*        p_hidden   = 'X'
      p_style    cl_gui_column_tree=>style_emphasized_c  "ATRIBUTO DE COLORES
      p_n_image  node_imagex. "APARECERA UNA IMAGEN

** EN EL PROGRAMA HEMOS LLENADO ANTERIORMENTE DOS TABLAS INTERNAS ** EL CUAL CONTIENE LOS DATOS QUE VAMOS A PRESENTAR EN EL ALV TREE
** EN ESTE CASO SON:
TI_T508B - PADRE
TI_T508C - HIJO

****************************TRANSLATION****************************************
IN PROGRAM ** HAVE COMPLETED TWO ABOVE ** INTERNAL TABLES WHICH CONTAINS THE DATA THAT WE WILL FILE IN ALV TREE
IN THIS CASE ARE **:
TI_T508B - FATHER
TI_T508C - CHILD
**************************************************************************************
  IF ti_t508c[] IS NOT INITIAL.

    LOOP AT ti_t508b ASSIGNING <node_header>.

      MOVE-CORRESPONDING <node_header> TO node_tab.

      conta conta + 1.   "INDICE INTERNO - SIEMPRE DEBE IR - INTERNAL RATE - ALWAYS GO
      node_tab-type '01'"DEFINIMOS EL PRIMER NIVEL DEL ARBOL - EJEMPLO ES H003 .... DEFINE THE FIRST LEVEL OF THE TREE - H003 EXAMPLE IS

** a nivel de texto

      node_tab-name <node_header>-text1.  "EN EL EJEMPLO ES : HIPERSUR .. IN THE EXAMPLE IS: HIPERSUR

      CALL METHOD ao_tree->layout_nivel_text
        EXPORTING
          p_key       conta
          p_node_text node_tab-name.

** a nivel de nodo - at the node level.

      node_imagex icon_warehouse.

      CALL METHOD ao_tree->layout_nivel_node
        EXPORTING
          p_key      conta
*          p_isfolder = ' '
*            p_hidden   = 'X'
          p_style    cl_gui_column_tree=>style_intensified  "COLOR
          p_n_image  node_imagex. "ICONO

** a nivel de item - item-level

      CALL METHOD ao_tree->layout_nivel_item
        EXPORTING
          p_key       conta
          p_fieldname 'TEXT3_ICON'
          p_t_image   node_tab-text3_icon.   "ICONO TRAIDO DESDE LA TABLA INTERNA

      CALL METHOD ao_tree->layout_nivel_item
        EXPORTING
          p_key       conta
          p_class     cl_gui_column_tree=>item_class_checkbox
          p_editable  'X'
          p_fieldname ao_tree->ao_tree->c_hierarchy_column_name.  "NOMBRE DE LA COLUMNA 1

      APPEND node_tab TO at_nodetab.
      CLEAR node_tab.

      LOOP AT ti_t508c ASSIGNING <node_detail>
      WHERE btrtl <node_header>-text1.  
** EN EL EJEMPLO BUSCAMOS TODAS LAS PLANTILLAS DEL ALMACEN H003 - EXAMPLE LOOK AT ALL STORAGE TEMPLATES H003

        MOVE-CORRESPONDING <node_detail> TO node_tab.

        conta conta + 1.  "INDICE DEL ARBOL - TREE INDEX
        node_tab-type '02'.  "SEGUNDO NIVEL DEL ARBOL - SECOND LEVEL OF THE TREE

** a nivel de texto - text level

        node_tab-name node_tab-text1.

        CALL METHOD ao_tree->layout_nivel_text
          EXPORTING
            p_key       conta
            p_node_text node_tab-name.  "NOMBRE DE LA PLANTILLA

** a nivel de nodo - at the node level.
        node_imagex icon_plant.

        CALL METHOD ao_tree->layout_nivel_node
          EXPORTING
            p_key     conta
            p_style   cl_gui_column_tree=>style_emphasized  "COLOR
            p_n_image node_imagex. "ICONO

        IF node_tab-text3 'X'.  "eliminado
          caden 'ELIMINADO'.
        ELSE.
          caden 'NO ELIMINADO'.
        ENDIF.

** EN ESTA PARTE DESEAMOS COLOCARLE UN TEXTO AL ICONO - IN THIS PART WISH TO PLACE TEXT ICON

        CALL METHOD zcl_alv_tree_main=>change_icon
          EXPORTING
            p_text       caden
          CHANGING
            p_item_image node_tab-text3_icon.

        CALL METHOD ao_tree->layout_nivel_item
          EXPORTING
            p_key       conta
            p_fieldname 'TEXT3_ICON'
            p_t_image   node_tab-text3_icon.

** CHECBOX EN EL SEGUNDO NIVEL - CHECBOX AT SECOND LEVEL
        CALL METHOD ao_tree->layout_nivel_item
          EXPORTING
            p_key       conta
            p_class     cl_gui_column_tree=>item_class_checkbox
            p_editable  'X'
            p_fieldname ao_tree->ao_tree->c_hierarchy_column_name.

        APPEND node_tab TO at_nodetab.
        CLEAR node_tab.

** SI HUBIERAN MAS NIVELES.. SE LO HACE DE LA MISMA MANERA..
** ES DECIR:
** LOOP

        conta conta + 1.  "INDICE DEL ARBOL
        node_tab-type '03'.  "N NIVEL DEL ARBOL
......
.....
.....
.....
** ENDLOOP

** HIGHER LEVELS THEY ** .. ARE DOING THE SAME WAY ..
LOOP **

         conta = conta + 1. "TREE INDEX

         node_tab-type = '03 '. "N LEVEL TREE
      ENDLOOP.
    ENDLOOP.
*    ENDLOOP.

    PERFORM create_nodo USING conta.

  ELSE.
    MESSAGE ID 'ZHRMSG' TYPE 'S' NUMBER 080.  "NO HAY DATOS ALV
*    LEAVE TO LIST-PROCESSING and RETURN TO SCREEN 0.
  ENDIF.
ENDFORM.                    "select_data

*---------------------------------------------------------------------*

FORM create_nodo USING conta TYPE lvc_nkey.

  DATAflag_p TYPE c.
  DATAcadena TYPE string.
  DATAcadena2 TYPE seu_type.
  DATAcadena3 TYPE string.
  DATAcadena4 TYPE string.

* claves

  DATA:
        key_relative TYPE lvc_nkey,
        key_relative2 TYPE lvc_nkey,
        key_header TYPE lvc_nkey,
        key_detail TYPE lvc_nkey,
        key_subdetail TYPE lvc_nkey.

* node-layout

  DATA:
        label_node TYPE lvc_value,
        item_image TYPE tv_image,
        item_image2 TYPE tv_image,
        node_image TYPE tv_image,
        node_result TYPE zwtree3.

  DATA idx TYPE sytabix.

  CLEAR flag_p.
  CLEAR node_result.

** ASIGNAMOS LA TABLA INTERNA DEL ARBOL A MEMORIA

** Assigned ** INTERNAL TABLE TO MEMORY TREE

  DATAt_tabla TYPE REF TO data.
  FIELD-SYMBOLS<ta> TYPE table.
  CREATE DATA t_tabla TYPE TABLE OF zwplant.
  ASSIGN t_tabla->TO <ta>.
************************************************
  INSERT LINES OF at_nodetab INTO TABLE <ta>.
**************************************************

  CALL METHOD ao_tree->send_data
    EXPORTING
      p_nodetab          t_tabla
      p_update_calculations 'X'
*      p_nodetab_graph    t_tabla_g
      p_field_graphics   = '9,10,14'
*      p_nivel_graphics   '01'
      p_collect_graphics 'X'   "DEFINO QUE LOS VALORES NO SEAN REPETIDOS - GRAFICO - DeFinE VALUES THAT ARE NOT REPEATED - GRAPHIC
*      p_nodetab_graph2    t_tabla_g2
*      p_field_graphics2   = cadena
*      p_nivel_graphics2   = '02'
*      p_collect_graphics2 = 'X'
*      p_nodetab_excel    t_tabla_e
 *     p_nivel_excel      '02'
      p_field_out_excel  '8,9,10,11,12,13,19' "QUE POSICION DE CAMPOS APARECERAN EXCEL - FIELDS THAT APPEAR EXCEL POSITION
*      p_agroup_field      = '16'
*      p_screen_field     = 'P_SOCIEDAD'
*      p_screen_page_begin   = 'PAGE_MIN'
*      p_screen_page_end  = 'PAGE_MAX'
      p_sort             t_tabla_s
      p_ev_before_user_command          'X'
      p_ev_after_user_command           'X'
      p_ev_top_of_page                  'X'  "ACTIVO ESTOS EVENTOS - THESE ASSETS EVENTS
      p_ev_top_of_list                  'X'
*      p_ev_button_click  = 'X'.
*      p_ev_link_click                   = 'X'
      p_ev_checkbox_change              'X'.

  PERFORM change_toolbar"COMO NECESITAMOS UN BOTON DE GRABAR LO DEFINIMOS - AS WE NEED A RECORD BUTTON DEFINE IT

ENDFORM.                    "create_nodo

*&---------------------------------------------------------------------*
*&      Form  build_comment
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_LIST_COMMENTARY  text
*      -->P_LOGO              text
*----------------------------------------------------------------------*
FORM build_comment USING
      pt_list_commentary TYPE slis_t_listheader
      p_logo             TYPE sdydo_value.

  DATAls_line TYPE slis_listheader.

  CLEAR ls_line.
  ls_line-typ  'H'.
  ls_line-info 'PLANTILLAS X ALMACEN'.
  APPEND ls_line TO pt_list_commentary.

  ls_line-typ  'S'.
  ls_line-key  'USUARIO :'.
  ls_line-info usuario.
  APPEND ls_line TO pt_list_commentary.

*  p_logo = 'ENJOYSAP_LOGO'.
ENDFORM.                    "build_comment

*---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  change_toolbar
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM change_toolbar.

** creamos el toolbar

  CALL METHOD ao_tree->ao_tree->get_toolbar_object
    IMPORTING
      er_toolbar ao_toolbar.

  CHECK NOT ao_toolbar IS INITIAL.

** modifico toolbar
** adiciono el separador

  CALL METHOD ao_toolbar->add_button
    EXPORTING
      fcode            ''
      icon             ''
      butn_type        cntb_btype_sep
    EXCEPTIONS
      cntl_error       1
      cntb_btype_error 2
      cntb_error_fcode 3
      OTHERS           4.

  CALL METHOD ao_toolbar->add_button
    EXPORTING
      fcode     '&GRE'
*      icon      = ICON_EXPAND
      icon      icon_pm_insert
      butn_type cntb_btype_button
      text      'Grabar'
      quickinfo 'Grabar'
    EXCEPTIONS
      cntl_error       1
      cntb_btype_error 2
      cntb_error_fcode 3
      OTHERS           4.

* establezco comunicacion con el manejador de eventos de ao_toolbar
  DATAevents TYPE cntl_simple_events,
        event TYPE cntl_simple_event,
        l_event_receiver TYPE REF TO lcl_toolbar_event_receiverx.

  CREATE OBJECT l_event_receiver.
** DEFINO LA COMUNICACION CON EL ARBOL AL PRESIONAR UN BOTON DEL
** TOOLBAR
  SET HANDLER l_event_receiver->on_function_selected FOR ao_tree->ao_toolbar.

ENDFORM.                    "change_toolbar



*&---------------------------------------------------------------------*
*&      Form  exit_program
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM exit_program.

  CALL METHOD ao_tree->free_program.

  LEAVE TO SCREEN 0.

ENDFORM.                    "exit_program


*&---------------------------------------------------------------------*
*&      Form  exit_program2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM exit_program2.

  CALL METHOD ao_tree->free_program.

  LEAVE TO SCREEN 0.

ENDFORM.                    "exit_program2

**********************************************************************************
** AQUI SE DESCRIBEN TODOS LOS EVENTOS DEL ARBOL
** SE VAN A ACTIVAR LOS QUE DEFINI ANTERIORMENTE
** ES DECIR TOP_OF_PAGE, CHECBOX_CHANGE, ETC,ETC

 DESCRIBED HERE ** ALL EVENTS OF THE TREE
** WILL BE ON THE ABOVE I defined
IE ** TOP_OF_PAGE, CHECBOX_CHANGE, ETC, ETC

*&---------------------------------------------------------------------*
*&      Form  desbloqueo
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->WESTR      text
*----------------------------------------------------------------------*
FORM desbloqueo USING westr TYPE zwtree3.
ENDFORM.                    "desbloqueo

*&---------------------------------------------------------------------*
*&      Form  RIGHT_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM right_click.
ENDFORM.                    "RIGHT_CLICK

*&---------------------------------------------------------------------*
*&      Form  LEFT_CLICK_DESIGN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM left_click_design.
ENDFORM.                    "left_click_design
*&---------------------------------------------------------------------*
*&      Form  MOVE_CONTROL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM move_control.
ENDFORM.                    "move_control
*&---------------------------------------------------------------------*
*&      Form  SIZE_CONTROL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM size_control.
ENDFORM.                    "size_control
*&---------------------------------------------------------------------*
*&      Form  LEFT_CLICK_RUN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM left_click_run .
ENDFORM.                    "left_click_run
*&---------------------------------------------------------------------*
*&      Form  DEFAULT_CONTEXT_MENU_REQUEST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->MENU       text
*----------------------------------------------------------------------*
FORM default_context_menu_request USING menu .
ENDFORM.                    "default_context_menu_request
*&---------------------------------------------------------------------*
*&      Form  HEADER_CONTEXT_MENU_REQUEST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDNAME  text
*      -->MENU       text
*----------------------------------------------------------------------*
FORM header_context_menu_request USING fieldname menu .
ENDFORM.                    "header_context_menu_request
*&---------------------------------------------------------------------*
*&      Form  HEADER_CONTEXT_MENU_SELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDNAME  text
*      -->FCODE      text
*----------------------------------------------------------------------*
FORM header_context_menu_select USING fieldname fcode .
ENDFORM.                    "header_context_menu_select
*&---------------------------------------------------------------------*
*&      Form  BEFORE_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->UCOMM      text
*----------------------------------------------------------------------*
FORM before_user_command USING ucomm .

  DATAw_outtab1 TYPE zwtree3.
  DATAls_fieldcatalog TYPE lvc_s_fcat.
  DATAwlayout_node TYPE lvc_s_layn.


  IF ucomm '&PRINT_BACK' OR ucomm '&PRINT_PREV'
    OR ucomm '&PRINT_BACK_ALL' OR ucomm '&PRINT_PREV_ALL'.

    CALL METHOD ao_tree->print_normal_to_bold
      EXPORTING
        p_nivel '01'.

  ENDIF.

ENDFORM.                    "before_user_command
*&---------------------------------------------------------------------*
*&      Form  AFTER_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->UCOMM      text
*----------------------------------------------------------------------*
FORM after_user_command USING ucomm .

  DATAw_outtab1 TYPE zwtree3.
  DATAls_fieldcatalog TYPE lvc_s_fcat.
  DATAwlayout_node TYPE lvc_s_layn.

  IF ucomm '&PRINT_BACK' OR ucomm '&PRINT_PREV'
    OR ucomm '&PRINT_BACK_ALL' OR ucomm '&PRINT_PREV_ALL'.

** cambiamos las negritas a normal para el screen.

    CALL METHOD ao_tree->print_bold_to_normal
      EXPORTING
        p_nivel '01'.

  ENDIF.

ENDFORM.                    "before_user_command
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM top_of_page.

  PERFORM top_page USING fucomm.

*  CALL METHOD ao_tree->grabar_nodos_checkeados
*    EXPORTING
*      flag_g = '1'.
*
*
*CALL METHOD ao_tree->grabar_nodos_seleccionados
*    EXPORTING
*      flag_g = '1'.
*
*ULINE.
ENDFORM.                    "top_of_page
*&---------------------------------------------------------------------*
*&      Form  DEFAULT_CONTEXT_MENU_SELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FCODE      text
*----------------------------------------------------------------------*
FORM default_context_menu_select USING fcode .
ENDFORM.                    "default_context_menu_select
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM top_of_list.
ENDFORM.                    "top_of_list
*&---------------------------------------------------------------------*
*&      Form  BUTTON_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDNAME  text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM button_click USING fieldname node_key .
ENDFORM.                    "button_click
*&---------------------------------------------------------------------*
*&      Form  CHECKBOX_CHANGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->CHECKED    text
*      -->FIELDNAME  text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM checkbox_change USING checked fieldname node_key .
** AQUI SELECCIONO LOS CHECKS O  LOS DESELECCIONO
  IF checked 'X'.
    CALL METHOD ao_tree->mark_father
      EXPORTING
        p_key node_key.
  ELSE.
    CALL METHOD ao_tree->unmark_father
      EXPORTING
        p_key node_key.
  ENDIF.

ENDFORM.                    "checkbox_change
*&---------------------------------------------------------------------*
*&      Form  EXPAND_NC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM  expand_nc USING node_key .
ENDFORM.                    "expand_nc
*&---------------------------------------------------------------------*
*&      Form  HEADER_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDNAME  text
*----------------------------------------------------------------------*
FORM header_click USING fieldname .
ENDFORM.                    "header_click
*&---------------------------------------------------------------------*
*&      Form  HEADER_CONTEXT_MENU
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDNAME  text
*      -->UCOMM      text
*----------------------------------------------------------------------*
FORM header_context_menu USING fieldname ucomm .
ENDFORM.                    "header_context_menu
*&---------------------------------------------------------------------*
*&      Form  ITEM_CONTEXT_MENU_REQUEST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDNAME  text
*      -->MENU       text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM item_context_menu_request USING fieldname menu node_key .
ENDFORM.                    "item_context_menu_request
*&---------------------------------------------------------------------*
*&      Form  ITEM_CONTEXT_MENU_SELECTED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FCODE      text
*      -->FIELDNAME  text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM item_context_menu_selected USING fcode fieldname node_key .
ENDFORM.                    "item_context_menu_selected
*&---------------------------------------------------------------------*
*&      Form  ITEM_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDNAME  text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM item_double_click USING fieldname node_key .
ENDFORM.                    "item_double_click
*&---------------------------------------------------------------------*
*&      Form  ITEM_KEYPRESS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDNAME  text
*      -->KEY        text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM item_keypress USING fieldname key node_key .
ENDFORM.                    "item_keypress
*&---------------------------------------------------------------------*
*&      Form  LINK_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDNAME  text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM link_click USING fieldname node_key .







ENDFORM.                    "link_click
*&---------------------------------------------------------------------*
*&      Form  NODE_CONTEXT_MENU_REQUEST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->MENU       text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM node_context_menu_request USING menu node_key .
ENDFORM.                    "node_context_menu_request
*&---------------------------------------------------------------------*
*&      Form  NODE_CONTEXT_MENU_SELECTED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FCODE      text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM node_context_menu_selected USING fcode node_key .
ENDFORM.                    "node_context_menu_selected
*&---------------------------------------------------------------------*
*&      Form  ON_DRAG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->DRAG_DROP_OBJECT  text
*      -->FIELDNAME         text
*      -->NODE_KEY          text
*----------------------------------------------------------------------*
FORM  on_drag USING drag_drop_object fieldname node_key .
ENDFORM.                    "on_drag
*&---------------------------------------------------------------------*
*&      Form  ON_DRAG_MULTIPLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->DRAG_DROP_OBJECT  text
*      -->FIELDNAME         text
*      -->NODE_KEY_TABLE    text
*----------------------------------------------------------------------*
FORM  on_drag_multiple USING drag_drop_object  fieldname  node_key_table .
ENDFORM.                    "on_drag_multiple
*&---------------------------------------------------------------------*
*&      Form  ON_DROP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->DRAG_DROP_OBJECT  text
*      -->NODE_KEY          text
*----------------------------------------------------------------------*
FORM  on_drop USING drag_drop_object node_key.
ENDFORM.                    "on_drop
*&---------------------------------------------------------------------*
*&      Form  ON_DROP_COMPLETE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->DRAG_DROP_OBJECT  text
*      -->FIELDNAME         text
*      -->NODE_KEY          text
*----------------------------------------------------------------------*
FORM  on_drop_complete USING drag_drop_object fieldname node_key .
ENDFORM.                    "on_drop_complete
*&---------------------------------------------------------------------*
*&      Form  ON_DROP_COMPLETE_MULTIPLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->DRAG_DROP_OBJECT  text
*      -->FIELDNAME         text
*      -->NODE_KEY_TABLE    text
*----------------------------------------------------------------------*
FORM  on_drop_complete_multiple USING drag_drop_object fieldname node_key_table .
ENDFORM.                    "on_drop_complete_multiple
*&---------------------------------------------------------------------*
*&      Form  ON_DROP_GET_FLAVOR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->DRAG_DROP_OBJECT  text
*      -->NODE_KEY          text
*----------------------------------------------------------------------*
FORM  on_drop_get_flavor USING drag_drop_object node_key .
ENDFORM.                    "on_drop_get_flavor
*&---------------------------------------------------------------------*
*&      Form  SELECTION_CHANGED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM  selection_changed USING node_key .
ENDFORM.                    "selection_changed
*&---------------------------------------------------------------------*
*&      Form  NODE_KEYPRESS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->KEY        text
*      -->NODE_KEY   text
*----------------------------------------------------------------------*
FORM  node_keypress USING key node_key .
ENDFORM.                    "node_keypress

********************************************************************************

De alli se corre el programa y queda como el gráfico inicial.
Fácil de utilizar para cualquier programa. Defino los niveles que deseo, y puedo aplicar eventos que actualmente el árbol no permite, como ordenar, filtrar, gráficos de barras, etc, etc..Con sólo colocar un 'X' activo eventos, escondo botones, etc, etc..
Cualquier duda ó pregunta lo pueden hacer, me indican su mail y estaré presto a ayudarles.

TRANSLATION:
From there you run the program and remains the original graph.
Easy to use for any program. Define the levels you desire, and I can apply events currently does not allow the tree, such as sorting, filtering, bar graphs, etc, etc. .. Just put an 'X' active events, hide buttons, etc, etc. ..
Any doubt or question they can do, tell me your email and I'll be ready to help.





No hay comentarios:

Publicar un comentario