SAP_ABAP_FI

ALV_USE_CLASS_TREE_GRID 본문

SAP_ABAP_Source/ALV_Tree_Grid

ALV_USE_CLASS_TREE_GRID

abapjun 2021. 12. 16. 16:52
728x90
반응형

 

- TOP

DATABEGIN OF gs_info,
        subrc TYPE sy-subrc,
        title TYPE sy-title,
        func  TYPE ui_functions,
        str   TYPE tabname,
        tree  TYPE REF TO zcl_tree_handler,
        alv   TYPE REF TO zcl_alv_handler,
      END   OF gs_info.
DATAgv_ok_code TYPE sy-ucomm.

 

- Call Screen ALV Object Call

- DEFINITION

- ZCL_TREE_EVENT를 상속 받았으므로 REDEFINTION 쓰면됨

- IMPLEMENTATION.

CLASS lcl_tree IMPLEMENTATION.
  METHOD set_fieldcatlog.
    set_fieldcatlog_2(
                       EXPORTING lt_data ct_tab
                       CHANGING  et_fcat mt_fcat
                      ).

    LOOP AT mt_fcat ASSIGNING FIELD-SYMBOL(<fs_fcat>).
      <fs_fcat>-col_opt 'A'."--->필드글자에 따라 필드길이가 자동 조절

      CASE <fs_fcat>-fieldname.
        WHEN 'LV_NKEY' OR
             'LV_MAIN' OR
             'LV_SUBMAIN'.
*          <fs_fcat> = VALUE #( BASE <fs_fcat> key = abap_true ).
      ENDCASE.

    ENDLOOP.
  ENDMETHOD.

  METHOD create_hierarchy.
*check
    DATAlv_text   TYPE lvc_value,
          lv_main   TYPE lvc_nkey,
          lv_nowk   TYPE lvc_nkey,
          lv_relat2 TYPE lvc_nkey,
          lv_relat3 TYPE lvc_nkey.
    DATAls_layi TYPE lvc_s_layn,
          lt_layi TYPE lvc_t_layi.

    DATAlv_num    TYPE VALUE 1,
          lv_subnum TYPE VALUE 1,
          lv_nkey   TYPE VALUE 1.

    DATAlt_data TYPE ty_t_tree.
    CHECK mr_lcl_object->mr_tree IS BOUND.

    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE lt_data
      FROM sflight.
    CHECK lt_data IS NOT INITIAL.

    lv_text 'MAIN'.
    add_node(
                      IMPORTING node_text       =  lv_text
                      CHANGING   l_now_key      lv_main
    ).


    LOOP AT lt_data INTO DATA(ls_data).

      AT NEW carrid.
        DATA(lv_newabap_true.

        lv_text            ls_data-carrid.
        ls_layi-isfolder   abap_true.
        ls_layi-n_image    icon_businav_entity.
        ls_layi-exp_image  icon_businav_entity.
        CLEARls_data.
        ls_data-lv_main lv_num.
        ls_data-lv_nkey lv_nkey.


        add_node(
                          IMPORTING l_key          lv_main " MAIN NODW KEY
                                    node_text      lv_text
                                    ls_layi        ls_layi
                                    ls_item        ls_data
                                    lt_layi        lt_layi
                         CHANGING   l_now_key      lv_nowk " 신규 노트키
        ).
      ENDAT.
      CASE lv_new.
        WHEN abap_true.
          lv_relat2 lv_nowk.
          lv_text   ls_data-fldate.

          ls_data-lv_nkey    lv_nkey.
          ls_data-lv_main    lv_num.
          ls_data-lv_submain lv_subnum.
          add_node(
                            IMPORTING l_key          lv_relat2 " MAIN NODW KEY
                                      node_text      lv_text
                                      ls_layi        ls_layi
                                      ls_item        ls_data
                                      lt_layi        lt_layi
                           CHANGING   l_now_key      lv_relat3 " 신규 노트키
          ).
      ENDCASE.

      ADD TO lv_subnum.
      ADD TO lv_nkey.

      AT END OF carrid.
        lv_num lv_num + 1.
        lv_subnum 1.
        CLEARlv_new.
      ENDAT.

    ENDLOOP.
    CALL METHOD mr_lcl_object->mr_tree->frontend_update.
    mr_lcl_object->mr_tree->expand_node(
      EXPORTING
        i_node_key           lv_main
        ).
  ENDMETHOD.

  METHOD set_toolbar.

    "Button Type은 Domain값을 통해확인할수 있다.[ 3 : 구분선임]
    "cntb_btype_menu : Sub Menu가 존재하는 경우 선택
    "cntb_btype_button : Sub Menu없이 자기자신이 버튼인 경우.

    mr_lcl_object->mr_toolbar->add_buttonEXPORTING fcode      'ADD'
                                                     icon       icon_insert_row
                                                     butn_type  cntb_btype_button
                                                     text       'ADD'
                                                     quickinfo  'ADD'
                                          ).

    mr_lcl_object->mr_toolbar->add_buttonEXPORTING fcode      'DEL'
                                                     icon       icon_delete_row
                                                     butn_type  cntb_btype_button
                                                     text       'DEL'
                                                     quickinfo  'DEL'
                                          ).
  ENDMETHOD.

  METHOD add_node.
    mr_lcl_object->mr_tree->add_node(
                      EXPORTING
                        i_relat_node_key  l_key
                        i_relationship    cl_gui_column_tree=>relat_last_child
                        i_node_text       node_text
                        is_node_layout    ls_layi
                        is_outtab_line    ls_item
                        it_item_layout    =  lt_layi
                      IMPORTING
                        e_new_node_key    l_now_key
                     ).

  ENDMETHOD.

  METHOD handle_function_selected.
    CASE fcode.
      WHEN 'ADD'.
      WHEN 'DEL'.
    ENDCASE.
  ENDMETHOD.



  METHOD handle_item_cm_request.
    menu->clear).
    CALL METHOD menu->add_function
      EXPORTING
        fcode 'ADD'
        text  '추가'.

    CALL METHOD menu->add_function
      EXPORTING
        fcode 'DEL'
        text  '삭제'.
  ENDMETHOD.

  METHOD handle_item_cm_selected.
    DATAlv_key         TYPE ty_tree,
          lv_node_text   TYPE lvc_value,
          lt_item_layout TYPE lvc_t_layi,
          ls_node_layout TYPE lvc_s_layn.
    DATAlt_f TYPE lvc_t_nkey.
    mr_lcl_object->mr_tree->get_outtab_line(
      EXPORTING
        i_node_key       node_key
      IMPORTING
        e_outtab_line    lv_key
        e_node_text      lv_node_text
        et_item_layout   lt_item_layout
        es_node_layout   ls_node_layout

        ).

*    mr_lcl_object->mr_tree->get
    CASE fcode.
      WHEN 'ADD'.

      WHEN 'DEL'.
    ENDCASE.
  ENDMETHOD.
  METHOD handle_tree_node_cm_req.
    menu->clear).
    CALL METHOD menu->add_function
      EXPORTING
        fcode 'ADD'
        text  '추가'.

    CALL METHOD menu->add_function
      EXPORTING
        fcode 'DEL'
        text  '삭제'.
  ENDMETHOD.

  METHOD handle_tree_node_cm_sel.
    DATAlv_key         TYPE ty_tree,
          lv_node_text   TYPE lvc_value,
          lt_item_layout TYPE lvc_t_layi,
          ls_node_layout TYPE lvc_s_layn.
    DATAlt_f TYPE lvc_t_nkey.
    mr_lcl_object->mr_tree->get_outtab_line(
      EXPORTING
        i_node_key       node_key
      IMPORTING
        e_outtab_line    lv_key
        e_node_text      lv_node_text
        et_item_layout   lt_item_layout
        es_node_layout   ls_node_layout

        ).
    CASE fcode.
      WHEN 'ADD'.
      WHEN 'DEL'.
    ENDCASE.
  ENDMETHOD.

  METHOD add_tree_addnode.
  ENDMETHOD.

  METHOD add_tree_delnode.
  ENDMETHOD.

ENDCLASS.
CLASS lcl_event DEFINITION INHERITING FROM zcl_alv_event.
  PUBLIC SECTION.

    METHODSset_fieldcatlog REDEFINITION.
    METHODShandle_top_of_page REDEFINITION.

ENDCLASS.

CLASS lcl_event IMPLEMENTATION.
  METHOD set_fieldcatlog.

    set_fieldcatlog_1(
                       EXPORTING i_str   i_str
                                 i_repid sy-repid
                       IMPORTING et_fcat mt_fcat
                       CHANGING  ct_tab  ct_tab
                      ).

  ENDMETHOD.


  METHOD handle_top_of_page.

    DATAlt_comment TYPE slis_t_listheader,
          l_length   TYPE i.

*    lt_comment = VALUE #(
*                      ( typ = 'S' key = %_p_bukrs_%_app_%-text info = p_bukrs )
*                      ( typ = 'S' key = %_p_spmon_%_app_%-text info = p_spmon )
*                    ).

    EXPORT it_list_commentary FROM lt_comment
                            TO MEMORY ID 'DYNDOS_FOR_ALV'.

    e_dyndoc_id->initialize_document).

*    e_dyndoc_id ?= mr_object->mr_document.

    CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
      EXPORTING
        document e_dyndoc_id
        bottom   abap_false
      IMPORTING
        length   l_length.


    mr_object->mr_splitter->set_row_heightid height l_length ).


    e_dyndoc_id->merge_document).

    e_dyndoc_id->display_document(
                             EXPORTING
                               parent         mr_object->mr_top
                             EXCEPTIONS
                               html_display_error 1
                             ).

  ENDMETHOD.
ENDCLASS.

728x90
반응형

'SAP_ABAP_Source > ALV_Tree_Grid' 카테고리의 다른 글

Class_Tree_Grid  (0) 2021.12.16