SAP SALV #2 Ağaç Alv Yapısı

sap

Merhaba SAP SALV yazı serimizde bu yazıda ağaç alv yapısına bir örnek yapacağız. Bir önceki yazıya buradan ulaşabilirsiniz.

Örnek Rapor

Raporumuzda projeye ait Pyp öğelerini ağaç yapısı şekline uygun göstereceğiz. Basit bir ağaç alv olmasını istediğim için BAPI_PROJECT_GETINFO fonksiyonundan dönen veriyi sıralayıp direkt olarak göstereceğiz. İlk olarak sınıfımızı oluşturuyoruz. Değişken tanımlamalarımızı yapıyoruz. get_data methodu ile verimizi çekiyoruz. Çekilen verimizi ağaç yapısına uygun bir şekilde düğümler halinde oluşturuyoruz. Show_alv methodu içerisinde ise raporumuzu ekranda gösteriyoruz.

Ağaç alvlerde factory methodumuza verdiğimiz internal table kesinlikle boş olması gerekiyor. Değilse runtime error hatası alırsınız.

ağaç yapısı selection screen
ağaç

Örnek Kod


*&---------------------------------------------------------------------*
*& Report ZMOP_DENEME3
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmop_deneme3.

"Proje
PARAMETERS: p_pspnr TYPE proj-pspnr OBLIGATORY.

*----------------------------------------------------------------------*
*       CLASS lcl_class DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_class DEFINITION.
*
  PUBLIC SECTION.

    DATA: gv_proj          TYPE bapipr-project_definition,
          gt_wbs_element   TYPE TABLE OF bapi_wbs_element_exp,
          gt_wbs_h_element TYPE TABLE OF bapi_wbs_hierarchie,
          gt_alv           TYPE TABLE OF bapi_wbs_hierarchie.

*   ALV reference
    DATA: gr_container TYPE REF TO cl_gui_custom_container,
          gr_tree      TYPE REF TO cl_salv_tree.

    METHODS:
*     Veriler çekiliyor.
      get_data,

*      Alv oluşturuluyor.
      create_tree,

*     Alv ekranda gösteriliyor.
      show_alv.

ENDCLASS.                    "lcl_class DEFINITION

START-OF-SELECTION.
  DATA: lo_report TYPE REF TO lcl_class.

  CREATE OBJECT lo_report.
  lo_report->get_data( ).
  lo_report->show_alv( ).

*----------------------------------------------------------------------*
*       CLASS lcl_class IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_class IMPLEMENTATION.
*
  METHOD get_data.

    "Dçnüşüm yapıyoruz.
    CALL FUNCTION 'CONVERSION_EXIT_KONPD_OUTPUT'
      EXPORTING
        input  = p_pspnr
      IMPORTING
        output = gv_proj.

    "Fonksiyonumuzdan verimizi çekiyoruz.
    CALL FUNCTION 'BAPI_PROJECT_GETINFO'
      EXPORTING
        project_definition     = gv_proj
      TABLES
        e_wbs_element_table    = gt_wbs_element
        e_wbs_hierarchie_table = gt_wbs_h_element.

  ENDMETHOD.                    "get_data
  METHOD show_alv.

    DATA: lr_columns   TYPE REF TO cl_salv_columns_tree,
          lr_column    TYPE REF TO cl_salv_column,
          lr_functions TYPE REF TO cl_salv_functions_tree,
          lr_settings  TYPE REF TO cl_salv_tree_settings.

    "GT_ALV boş olması gerekiyor. Değilse hata verir.
    TRY.
        cl_salv_tree=>factory(
          IMPORTING
            r_salv_tree = gr_tree
          CHANGING
            t_table      = gt_alv ).
      CATCH cx_salv_no_new_data_allowed cx_salv_error.
        EXIT.
    ENDTRY.

    "Düğümler oluşturuluyor.
    create_tree( ).

    gr_tree->set_screen_status(
    pfstatus      =  'SALV_STANDARD'
    report        =  'SALV_DEMO_TREE_SIMPLE'
    set_functions =  gr_tree->c_functions_all ).

    lr_functions = gr_tree->get_functions( ).
    lr_functions->set_all( abap_true ).
    lr_functions->set_layout_change( abap_true ).

    "Stunların genişlikleri optimize ediliyor.
    lr_columns = gr_tree->get_columns( ).
    lr_columns->set_optimize( abap_true ).

    "Fieldcat değiştiriliyor.
    LOOP AT lr_columns->get( ) REFERENCE INTO DATA(lr_colum) .
      lr_column = lr_columns->get_column( lr_colum->columnname ).
      CASE lr_colum->columnname.
        WHEN 'WBS_ELEMENT'.
          lr_column->set_tooltip( 'Pyp Öğesi' ).
          lr_column->set_long_text( 'Pyp Öğesi' ).
          lr_column->set_medium_text( 'Pyp Öğesi' ).
          lr_column->set_short_text( 'Pyp Öğesi' ).
        WHEN 'POJECT_DEFINITION'.
          lr_column->set_tooltip( 'Tanım' ).
          lr_column->set_long_text( 'Tanım' ).
          lr_column->set_medium_text( 'Tanım' ).
          lr_column->set_short_text( 'Tanım' ).
        WHEN 'DOWN'.
          lr_column->set_technical(
              value = if_salv_c_bool_sap=>true
          ).
        WHEN 'LEFT'.
          lr_column->set_technical(
              value = if_salv_c_bool_sap=>true
          ).
        WHEN 'RIGHT'.
          lr_column->set_technical(
              value = if_salv_c_bool_sap=>true
          ).
      ENDCASE.
    ENDLOOP.

    "Başlığı değiştiriliyor.
    lr_settings = gr_tree->get_tree_settings( ).
    lr_settings->set_header( value = 'Teknopati' ).

    gr_tree->display( ).

  ENDMETHOD.                    "show_alv
  METHOD create_tree.
    DATA: nodes TYPE REF TO cl_salv_nodes,
          node  TYPE REF TO cl_salv_node,
          item  TYPE REF TO cl_salv_item.

    TYPES: BEGIN OF ty_nodes,
             kod TYPE ps_posid,
             key TYPE salv_de_node_key,
           END OF ty_nodes.
    DATA:lt_nodes TYPE TABLE OF ty_nodes,
         ls_nodes TYPE ty_nodes.

    DATA: lv_text_value TYPE lvc_value .
    DATA: lv_node_key   TYPE salv_de_node_key .

    FIELD-SYMBOLS:   TYPE bapi_wbs_hierarchie,
                     TYPE ps_posid,
                    TYPE ps_posid.

    nodes = gr_tree->get_nodes( ).

    SORT gt_wbs_h_element BY wbs_element.
    LOOP AT gt_wbs_h_element ASSIGNING .

      ASSIGN COMPONENT 'UP' OF STRUCTURE  TO .

      ASSIGN COMPONENT 'WBS_ELEMENT' OF STRUCTURE  TO .
      lv_text_value = .

      lv_node_key = VALUE #( lt_nodes[ kod =  ]-key OPTIONAL ).

      node = nodes->add_node( related_node = lv_node_key
                                  text = lv_text_value
                                  data_row     = 
                                  relationship = cl_gui_column_tree=>relat_last_child ).

      "Düğüm Pyp öğesi key ile birlikte tabloya ekleniyor.
      APPEND VALUE ty_nodes( kod = lv_text_value key = node->get_key( ) ) TO lt_nodes.
    ENDLOOP.
  ENDMETHOD.

ENDCLASS.                    "lcl_class IMPLEMENTATION

Bu serimizde gelecek olan diğer yazılarımızı  takip etmeyi unutmayın. Bir sonraki yazımızda görüşmek dileğiyle.

E-bültene Abone Ol Merak etmeyin. Spam yapmayacağız.

Yazar

Merhaba, Kocaeli Üniversitesi Bilişim Sistemleri Mühendisliği Bölümü'nden 2019 yılında mezun oldum. Daha sonra Sap sektöründe çalışma hayatına başladım. Burada elimden geldiğince tecrübelerimi sizinle paylaşacağım.

İlgili Yazılar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Hızlı yorum için giriş yapın.

Başka Yazı Yok

Kayıt Ol

Zaten üye misiniz? Giriş Yap

Giriş Yap

Henüz üyeliğiniz yok mu? Kayıt Ol