25 Kasım 2017 Cumartesi

ALV'de Dinamik Dropdown List Doldurmak

Merhabalar,

Yeni oluşturulacak bir ekran için Dropdown List sütunu olan bir ALV oluşturdum. Ancak bu listelerin değerlerinin sabit değil dinamik olarak doldurulması gerekiyordu. Birkaç saatlik araştırma sonunda kayda değer bir sonuca rastlamadım ve hatta bazıları mümkün değil yazmıştı. Kendim yaptım ve paylaşmak istedim :)

SAP'nin demo tabloları  SFLIGHT ve SBOOK'u kullandım. ALV'de uçuşları listelerken, her bir uçuş için kayıtlı olan yolcu listesini de Dropdown ile getirdim. Aşağıda ne demek istediğimi daha rahat görebilirsiniz. :)

Dinamik Dropdown List Görsel 1

Dinamik Dropdown List Görsel 2

Dinamik Dropdown List Görsel 3

Kodu okuyarak anlamak zaman alır, çalıştırmak bu süreyi oldukça kısaltır. En azından bu süreç benim için böyle işliyor. Bu yüzden kodu kolayca ve değiştirmeden çalışabilir olması için düzenledim. Kullandığınız herhangi bir Report'da Screen '0100' ve içinde de Custom Container 'CONT100' oluşturarak kodu çalıştırabilirsiniz.


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
REPORT z_xxxx.
"Flight tablosu genişletimiş versiyonu. Result sonuçlar için, Keyc ise satır ayrımı için
DATA: BEGIN OF gt_flights_extended OCCURS 0.
            INCLUDE STRUCTURE sflight.
            DATA:  result(15).
            DATA:   keyc TYPE int4,
      END OF gt_flights_extended.
*Container tanımlamaları
DATA: r_container100 TYPE REF TO cl_gui_custom_container,
      r_grid100      TYPE REF TO cl_gui_alv_grid.
*Dropdown list datasının tutulacağı yapı
DATA: gt_dropdown  TYPE lvc_t_drop,
      gs_dropdown  TYPE lvc_s_drop.
*Her bir satırı saydırmak için int
DATA: gv_counter TYPE int4 VALUE 0.
*Catalog/layout için
DATA: gt_fieldcat  TYPE lvc_t_fcat WITH HEADER LINE,
      gs_layout    TYPE lvc_s_layo.

INITIALIZATION.

  PERFORM retrieve_data.
  PERFORM create_catalog.
  PERFORM show_alv_and_screen.

*&---------------------------------------------------------------------*
*&      Form  retrieve_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM retrieve_data.

  SELECT * FROM sflight INTO CORRESPONDING FIELDS OF gt_flights_extended UP TO 50 ROWS.
*Her bir satır için counter'ı koy
    gv_counter = gv_counter + 1.
    gt_flights_extended-keyc = gv_counter.
    APPEND gt_flights_extended.
*Ve her bir satır için müşteri çek
    SELECT customid FROM sbook INTO (gs_dropdown-value) UP TO 10 ROWS
      WHERE carrid = gt_flights_extended-carrid AND connid = gt_flights_extended-connid AND  fldate = gt_flights_extended-fldate.
*Her bir satır için yine counter'ı işaretle
      gs_dropdown-handle = gv_counter.
      APPEND gs_dropdown TO gt_dropdown.

    ENDSELECT.

  ENDSELECT.

ENDFORM.                    "retrieve_data

*&---------------------------------------------------------------------*
*&      Form  create_catalog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_catalog.

  gt_fieldcat-fieldname  = 'CARRID'.
  gt_fieldcat-coltext = 'CARRID'.
  APPEND gt_fieldcat .

  gt_fieldcat-fieldname  = 'CONNID'.
  gt_fieldcat-coltext = 'CONNID'.
  APPEND gt_fieldcat .

  gt_fieldcat-fieldname  = 'FLDATE'.
  gt_fieldcat-coltext = 'DATE'.
  APPEND gt_fieldcat .
*Dropdown list tanımı böyle yapılmalı
  gt_fieldcat-fieldname  = 'RESULT'.
  gt_fieldcat-coltext = 'Results'.
  gt_fieldcat-checktable = '!'.
  gt_fieldcat-edit  = 'X'.
  gt_fieldcat-drdn_hndl = 1.
  gt_fieldcat-drdn_field = 'KEYC'.
  APPEND gt_fieldcat .

  gs_layout-zebra = 'X'.
  gs_layout-no_toolbar = 'X'.

ENDFORM.                    "create_catalog

FORM show_alv_and_screen.

 CREATE OBJECT r_container100
    EXPORTING
      container_name = 'CONT100'.

  CREATE OBJECT r_grid100
    EXPORTING
      i_parent = r_container100.
*Dropdown list olacağını set ediyoruz ve table ı söylüyoruz
  CALL METHOD r_grid100->set_drop_down_table
    EXPORTING
      it_drop_down = gt_dropdown.

  CALL METHOD r_grid100->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.

  CALL METHOD r_grid100->set_table_for_first_display
    EXPORTING
      i_structure_name = 'GT_FLIGHTS_EXTENDED'
      is_layout        = gs_layout
    CHANGING
      it_outtab        = gt_flights_extended[]
      it_fieldcatalog  = gt_fieldcat[].

  CALL SCREEN '0100'.

ENDFORM.

Hiç yorum yok:

Yorum Gönder

Heyyyy !!!!

Merhabalar,

Blogumu ziyaret edip, yazımı okuduktan sonra yorum yazmanıza çok sevindim ancak lütfen kırıcı, ayrımcı, ırkçı davranmayın siyasi ve dini tartışmalara girmeyin.