SIMPLE TREE MODEL

SAP uygulama geliştirme sırasında ekran tasarımı ve kolaylık açısından fayda sağlayacak olan bir yapı simple tree view model…

Bu yapı sayesinde, hiyerarşik bir ağaç yapısı ile oluşturacağınız bir liste ile liste elemanlarına ait alt listeler oluşturarak, kısa ve kolay yoldan istediğiniz veriye erişim sağlayacak bir menü gibi tasarım sunmaktadır.

Örnek olarak, Üretim yerleri altında hangi malzemelerin olacağına dair bir ağaç yapısı oluşturmak istersek aşağıdaki gibi CL_SIMPLE_TREE_MODEL yapısını kullanarak gerçekleştirebiliriz.

İlk olarak module pool ekranı tasarlayarak ekran üzerine sadece bir custom container ekliyoruz. Daha sonra bu container içerisine oluşturacağımız ağaç yapısını model üzerinden ekleyeceğiz.

Ekranı oluşturduktan sonra, Process Before Ouput kısmında yer alan Module status_001 alanı içerisinde program çalıştığı ve ilgili ekran numarası çağırıldığında, ağaç yapısını oluşturup container içerisine atamasını yapacağız.

Yukarıda senaryodan bahsettiğim gibi, ZDEMO_TABLE içerisinde malzemeler ve malzemelere ait üretim yerleri listesi bulunmakta. Yani üretim yerine göre malzeme bilgisini hiyerarşik olarak ağaç yapısına giydirmemiz gerekiyor. Bunun için ilk olarak treeview model yapısını oluşturup bu yapı içerisinde NODE olarak üretim yeri ve eklenen NODE altına malzeme numarası bilgisini ekleyerek ilerleyeceğiz.

REPORT ZLRNG_P_DEMO1.

CLASS CL_GUI_CFW DEFINITION LOAD.

DATA: G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      G_TREE             TYPE REF TO CL_SIMPLE_TREE_MODEL,
      G_OK_CODE          TYPE SY-UCOMM.

DATA: ITEM_TABLE TYPE TREEMLITAB,
      ITEM       TYPE TREEMLITEM.

DATA: OK_CODE_CHART TYPE SY-UCOMM, FIRST_CALL TYPE I,
      VALUES        TYPE TABLE OF GPRVAL WITH HEADER LINE,
      COLUMN_TEXTS  TYPE TABLE OF GPRTXT WITH HEADER LINE.

DATA: EVENT  TYPE CNTL_SIMPLE_EVENT,
      EVENTS TYPE CNTL_SIMPLE_EVENTS.


CALL SCREEN 0001.


*&---------------------------------------------------------------------*
*&      Module  STATUS_0001  OUTPUT
*&---------------------------------------------------------------------*
MODULE STATUS_0001 OUTPUT.
  IF G_TREE IS INITIAL.
    CREATE OBJECT G_TREE
      EXPORTING
        NODE_SELECTION_MODE         = CL_SIMPLE_TREE_MODEL=>NODE_SEL_MODE_SINGLE
      EXCEPTIONS
        ILLEGAL_NODE_SELECTION_MODE = 1.

    CREATE OBJECT G_CUSTOM_CONTAINER
      EXPORTING
        CONTAINER_NAME              = 'TREE_CONTAINER'
      EXCEPTIONS
        CNTL_ERROR                  = 1
        CNTL_SYSTEM_ERROR           = 2
        CREATE_ERROR                = 3
        LIFETIME_ERROR              = 4
        LIFETIME_DYNPRO_DYNPRO_LINK = 5.

    CALL METHOD G_TREE->CREATE_TREE_CONTROL
      EXPORTING
        PARENT                       = G_CUSTOM_CONTAINER
      EXCEPTIONS
        LIFETIME_ERROR               = 1
        CNTL_SYSTEM_ERROR            = 2
        CREATE_ERROR                 = 3
        FAILED                       = 4
        TREE_CONTROL_ALREADY_CREATED = 5.


    EVENT-EVENTID = CL_SIMPLE_TREE_MODEL=>EVENTID_NODE_DOUBLE_CLICK.
    EVENT-APPL_EVENT = ABAP_TRUE.
    APPEND EVENT TO EVENTS.

    CALL METHOD G_TREE->SET_REGISTERED_EVENTS
      EXPORTING
        EVENTS                    = EVENTS
      EXCEPTIONS
        ILLEGAL_EVENT_COMBINATION = 1
        UNKNOWN_EVENT             = 2.

    PERFORM ADD_NODES.

    CALL METHOD G_TREE->EXPAND_NODE
      EXPORTING
        NODE_KEY       = 'F-WERKS'
      EXCEPTIONS
        NODE_NOT_FOUND = 1.
  ENDIF.
ENDMODULE.



FORM ADD_NODES.

  CALL METHOD G_TREE->ADD_NODE
    EXPORTING
      NODE_KEY = 'F-WERKS'
      ISFOLDER = ABAP_TRUE
      TEXT     = 'Üretim Yerleri'
    EXCEPTIONS
      OTHERS   = 1.

  SELECT * INTO TABLE @DATA(LT_WERKS) FROM ZDEMO_TABLE.

  SORT LT_WERKS BY WERKS.
  DELETE ADJACENT DUPLICATES FROM LT_WERKS COMPARING WERKS.

  DATA : LV_WERKS_KEY TYPE TM_NODEKEY,
         LV_WERKS_TXT TYPE TM_NODETXT.
  DATA : LV_MATNR_KEY TYPE TM_NODEKEY,
         LV_MATNR_TXT TYPE TM_NODETXT.

  LOOP AT LT_WERKS ASSIGNING FIELD-SYMBOL(<FS_WERKS>).
    CLEAR : LV_WERKS_KEY, LV_WERKS_TXT.
    LV_WERKS_KEY  = 'F-' && <FS_WERKS>-WERKS.
    LV_WERKS_TXT  = <FS_WERKS>-WERKS.

    CALL METHOD G_TREE->ADD_NODE
      EXPORTING
        NODE_KEY          = LV_WERKS_KEY
        RELATIVE_NODE_KEY = 'F-WERKS'
        RELATIONSHIP      = CL_SIMPLE_TREE_MODEL=>RELAT_LAST_CHILD
        ISFOLDER          = ABAP_TRUE
        TEXT              = LV_WERKS_TXT
      EXCEPTIONS
        OTHERS            = 1.


    SELECT * INTO TABLE @DATA(LT_MATNR) FROM ZDEMO_TABLE WHERE WERKS EQ @<FS_WERKS>-WERKS.

    LOOP AT LT_MATNR ASSIGNING FIELD-SYMBOL(<FS_MATNR>).
      CLEAR : LV_MATNR_KEY, LV_MATNR_TXT.

      LV_MATNR_KEY = <FS_MATNR>-MATNR.
      LV_MATNR_TXT = <FS_MATNR>-MATNR.

      CALL METHOD G_TREE->ADD_NODE
        EXPORTING
          NODE_KEY          = LV_MATNR_KEY
          RELATIVE_NODE_KEY = LV_WERKS_KEY
          RELATIONSHIP      = CL_SIMPLE_TREE_MODEL=>RELAT_LAST_CHILD
          ISFOLDER          = ABAP_FALSE
          TEXT              = LV_MATNR_TXT
        EXCEPTIONS
          OTHERS            = 1.
    ENDLOOP.

  ENDLOOP.

ENDFORM.

Folder olarak eklenecek node başına F- etiketini yerleştiriyorum ki karışıklığa yol açmasın. Her bir node KEY-TEXT ilişkisine dayanmaktadır. Yani seçilen bir node, gözüken adı ne olursa olsun belirtilen bir key’e tekabül etmektedir.

Yukarıda ki kod çıktısında aşağıdaki şekilde ağaç yapısını görebilirsiniz.

Reklam

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s