Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Passing Internal Table values into dropdown list in oops

Former Member
0 Likes
4,134

Hi,

How to pass internal table values into dropdown list in an alv grid.I want to display the values retrieved from database fields & not the hard coded ones.

Regards,

Ravi S.

4 REPLIES 4
Read only

Former Member
0 Likes
1,536

Hi ravi,

LIST BOX

Drop down list box can be created in a dialog screen(SE51) as well as selection screen.

The sap list box allows to select a value from the list but we cannot enter our own value in the list box .The value list that will be displayed consists of two

fields TEXT field of TYPE 80(C) and internal KEY field of TYPE 40(C).

In screen painter to create a input/output field into list box we use

'L" as a value for dropdown attribute for the i/o field.

In screen painter to determine the type of method that will be used to fill the value

list we use the attribute value list.

If it is blank the value list will be filled by the first column of the input help assigned to the screen field.This input help can be defined in the ABAP Dictionary, on screen using SELECT,VALUES screen statements or in event POV (PROCESS ON VALUE-REQUEST ) and the input help that will be passed to the field should consists of 2 columns ,the key column is filled automatically by the system.SAP recommends value list field should be blank.

or

The value can be 'A' meaning that the value list will be filled in the event PBO(PROCESS BEFORE OUTPUT) or before the screen is displayed.In this method we use function module VRM_SET_VALUES to fill the values and pass it to the i/o field.

If a function code is attached to the list box the selection of a value triggers a PAI

otherwise PAI will not trigger.

LIST BOX in SELECTION SCREEN

List Box is created in selection screen using PARAMETERS staement

with AS LISTBOX addition other attributes like VISIBLE LENGTH (width of listbox)

can be specified with the declaration.

PARAMETERS name(n) AS LISTBOX VISIBLE LENGTH n.

Here n is an integer and name is the name of parameter.

To populate the value list we use the FM VRM_SET_VALUES and the

selection screen event AT SELECTION-SCREEN OUTPUT is used to write the code to fill it.

VRM_SET_VALUES

The function module VRM_SET_VALUES is used to fill the value list associated with a List Box .This FM uses types which are declared in type group VRM. So

we should declare TYPE-POOLS VRM before using this FM.

Some important types declared in the VRM type group are

VRM_ID

It refers to the name of the input/output field associated with list box

VRM_VALUES

It refers to the internal table consisting of two fields TEXT(80C) and KEY(40)C

that will be used to create the list values.

CALL FUNCTION 'VRM_SET_VALUES'

EXPORTING

ID = name of screen element ,it is of TYPE VRM_ID

VALUES = internal table containing values,of TYPE VRM_VALUES

LIST BOX with value list from input help

In this example the screen element attribute value list is set to blank as such the value list will be filled with the 1st column of the input help,We use PROCESS ON VALUE-REQUEST event to pass the value list to the listbox.In the MODULE call used to fill the value list we can use FM like F4IF_INT_TABLE_VALUE_REQUEST to create input help as explained in the input help.The value of first column will be shown in the field when selected.

PROCESS ON VALUE-REQUEST

FIELD list MODULE fill_list_100

FIELD list MODULE fill_list_100 INPUT

SELECT f1 f2 FROM table INTO int

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

retfield = 'input/output screen field'

value_org = 'S'

TABLES

value_tab = itab "it contains 2 fields that will be shown in the list box

EXCEPTIONS

parameter_error = 1

no_values_found = 2

OTHERS = 3.

IF sy-subrc <> 0.

...

ENDIF.

ENDMODULE.

VALUE LIST CREATED IN PBO

In this method we set the value list attribute to 'A'.The value list will be filled in the PBO by using FM VRM_SET_VALUES .

TYPE-POOLS : VRM

DATA : field_id TYPE VRM_ID ,

values TYPE VRM_VALUES,

value LIKE LINE OF values.

PROCESS BEFORE OUTPUT

MODULE list_fill_100

MODULE list_fill_100 OUTPUT

SELECT f1 f2 f3 FROM tab WHERE condition.

value-KEY = f1.

value-TEXT = f2

APPEND value TO VALUES

CALL FUNCTION 'VRM_SET_VALUES'

EXPORTING

id = 'i/o screen field'

values = values.

ENDMODULE.

LIST BOX with Selection Screen

For this the FM VRM_SET_VALUES is used to fill the value table and is passed to the parameter created with TYPE LISTBOX in the selection screen event

AT SELECTION-SCREEN.

PROGRAM zlist

TYPE-POOLS : VRM.

DATA: param TYPE vrm_id,

values TYPE vrm_values,

value LIKE LINE OF values.

PARAMETERS: p_name(10) AS LISTBOX VISIBLE LENGTH 10.

AT SELECTION-SCREEN OUTPUT.

param = 'P_NAME'.

value-key = '1'.

value-text = 'JOHN'.

APPEND value TO values.

value-key = '2'.

value-text = 'PETER'.

APPEND value TO values.

CALL FUNCTION 'VRM_SET_VALUES'

EXPORTING id = param

values = values.

see this links tooo

https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/e8a1d690-0201-0010-b7ad-d9719a41...

http://www.sap-partner.hu/ABAP_HELP_INFO/An%20Easy%20Reference%20for%20ALV%20Grid%20Control.pdf

thanks

abdul

Edited by: shaik abdul on Jun 2, 2008 3:57 PM

Read only

Former Member
0 Likes
1,536

Hi Ravi,

Following code can help you.This is sample code for editable Dropdown list in Grid.

Award points if useful..


REPORT zalv_editf4display.*Type pools for alv
TYPE-POOLS : slis.*structure for t582a tbale
TYPES : BEGIN OF ty_table,
        infty TYPE infty,
        pnnnn TYPE pnnnn_d,
        zrmkz TYPE dzrmkz,
        zeitb TYPE dzeitb,
        dname TYPE dianm,
         davo TYPE davo,
        davoe TYPE davoe,
        END OF ty_table.*Structure for infotype text
TYPES : BEGIN OF ty_itext,
        infty TYPE infty,
        itext TYPE intxt,
        sprsl TYPE sprsl,
        END OF ty_itext.*Structure for output display
TYPES : BEGIN OF ty_output,
        infty TYPE infty,
        itext TYPE intxt,
        pnnnn TYPE pnnnn_d,
        zrmkz TYPE dzrmkz,
        zeitb TYPE dzeitb,
        dname TYPE dianm,
        davo TYPE davo,
        davoe TYPE davoe,
       END OF ty_output.*internal table and work area declarations
DATA : it_table TYPE STANDARD TABLE OF ty_table INITIAL SIZE 0,
       it_output TYPE STANDARD TABLE OF ty_output INITIAL SIZE 0,
       it_pbo TYPE STANDARD TABLE OF ty_output INITIAL SIZE 0,
       it_ittext TYPE STANDARD TABLE OF ty_itext INITIAL SIZE 0,
       wa_table TYPE ty_table,
       wa_output TYPE ty_output,
       wa_ittext TYPE ty_itext.*Data declarations for dropdown lists for f4
DATA: it_dropdown TYPE lvc_t_drop,
      ty_dropdown TYPE lvc_s_drop,
*data declaration for refreshing of alv
      stable TYPE lvc_s_stbl.*Global variable declaration
DATA: gstring TYPE c.
*Data declarations for ALV
DATA: c_ccont TYPE REF TO cl_gui_custom_container,         "Custom container object
      c_alvgd         TYPE REF TO cl_gui_alv_grid,         "ALV grid object
      it_fcat            TYPE lvc_t_fcat,                  "Field catalogue
      it_layout          TYPE lvc_s_layo.                  "Layout*ok code declaration
DATA:
  ok_code       TYPE ui_func.
*initialization eventINITIALIZATION.*start of selection event
START-OF-SELECTION.*select the infotypes maintained
  SELECT infty
          pnnnn
          zrmkz
          zeitb
          dname
          davo
          davoe
          FROM t582a UP TO 10 ROWS
          INTO CORRESPONDING FIELDS OF TABLE it_table.* *Select the infotype texts
  IF it_table[] IS NOT INITIAL.
    SELECT itext
             infty
             sprsl
             FROM t582s
             INTO CORRESPONDING FIELDS OF TABLE it_ittext
             FOR ALL ENTRIES IN it_table
             WHERE infty = it_table-infty
             AND sprsl = 'E'.
  ENDIF.
*Apppending the data to the internal table of ALV output
  LOOP AT it_table INTO wa_table.    wa_output-infty = wa_table-infty.
    wa_output-pnnnn = wa_table-pnnnn.
    wa_output-zrmkz = wa_table-zrmkz.
    wa_output-zeitb = wa_table-zeitb.
    wa_output-dname = wa_table-dname.
    wa_output-davo = wa_table-davo.
    wa_output-davoe = wa_table-davoe.* For texts    READ TABLE it_ittext INTO wa_ittext WITH KEY infty = wa_table-infty.
    wa_output-itext = wa_ittext-itext.
    APPEND wa_output TO it_output.
    CLEAR wa_output.  ENDLOOP.* Calling the ALV screen with custom container  CALL SCREEN 0600.*On this statement double click  it takes you to the screen painter SE51.
*Enter the attributes
*Create a Custom container and name it CCONT and OK code as OK_CODE.
*Save check and Activate the screen painter.
*Now a normal screen with number 600 is created which holds the ALV grid.
* PBO of the actual screen ,
* Here we can give a title and customized menus
*create 2 buttons with function code 'SAVE' and 'EXIT'.
* GIVE A SUITABLE TITLE*&---------------------------------------------------------------------*
*&      Module  STATUS_0600  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0600 OUTPUT.
  SET PF-STATUS 'DISP'.
  SET TITLEBAR 'ALVF4'.
ENDMODULE.                 " STATUS_0600  OUTPUT
* calling the PBO module ALV_GRID.
*&---------------------------------------------------------------------*
*&      Module  PBO  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pbo OUTPUT.*Creating objects of the container
  CREATE OBJECT c_ccont
       EXPORTING
          container_name = 'CCONT'.*  create object for alv grid
  create object c_alvgd
  exporting
  i_parent = c_ccont.*  SET field for ALV
  PERFORM alv_build_fieldcat.* Set ALV attributes FOR LAYOUT
  PERFORM alv_report_layout.
  CHECK NOT c_alvgd IS INITIAL.* Call ALV GRID  CALL METHOD c_alvgd->set_table_for_first_display
    EXPORTING
      is_layout                     = it_layout
      i_save                        = 'A'
    CHANGING
      it_outtab                     = it_output
      it_fieldcatalog               = it_fcat
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.ENDMODULE.                 " PBO  OUTPUT*&---------------------------------------------------------------------*
*&      Form  alv_build_fieldcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_IT_FCAT  text
*----------------------------------------------------------------------*
*subroutine to build fieldcatFORM alv_build_fieldcat.  DATA lv_fldcat TYPE lvc_s_fcat.
  CLEAR lv_fldcat.  lv_fldcat-row_pos   = '1'.
  lv_fldcat-col_pos   = '1'.
  lv_fldcat-fieldname = 'INFTY'.
  lv_fldcat-tabname   = 'IT_OUTPUT'.
  lv_fldcat-outputlen = 8.
  lv_fldcat-scrtext_m = 'Infotype'.
  lv_fldcat-icon = 'X'.
  APPEND lv_fldcat TO it_fcat.
  CLEAR lv_fldcat.  lv_fldcat-row_pos   = '1'.
  lv_fldcat-col_pos   = '2'.
  lv_fldcat-fieldname = 'PNNNN'.
  lv_fldcat-tabname   = 'IT_OUTPUT'.
  lv_fldcat-outputlen = 15.
  lv_fldcat-scrtext_m = 'Structure'.
  lv_fldcat-icon = ''.
  APPEND lv_fldcat TO it_fcat.
  CLEAR lv_fldcat.  lv_fldcat-row_pos   = '1'.
  lv_fldcat-col_pos   = '3'.
  lv_fldcat-fieldname = 'ITEXT'.
  lv_fldcat-tabname   = 'IT_OUTPUT'.
  lv_fldcat-outputlen = 60.
  lv_fldcat-scrtext_m = 'Description'.
  lv_fldcat-icon = ''.
  APPEND lv_fldcat TO it_fcat.
  CLEAR lv_fldcat.
  lv_fldcat-row_pos   = '1'.
  lv_fldcat-col_pos   = '5'.
  lv_fldcat-fieldname = 'ZRMKZ'.
  lv_fldcat-tabname   = 'IT_OUTPUT'.
  lv_fldcat-outputlen = 1.
  lv_fldcat-scrtext_m = 'PERIOD'.
  lv_fldcat-icon = ''.
  APPEND lv_fldcat TO it_fcat.
  CLEAR lv_fldcat.  lv_fldcat-row_pos   = '1'.
  lv_fldcat-col_pos   = '6'.
  lv_fldcat-fieldname = 'ZEITB'.
  lv_fldcat-tabname   = 'IT_OUTPUT'.
  lv_fldcat-outputlen = 5.
  lv_fldcat-scrtext_m = 'Time constraint'.
  lv_fldcat-edit = 'X'.
*To avail the existing F4 help these are to
*be given in the field catalogue
  lv_fldcat-f4availabl = 'X'.
  lv_fldcat-ref_table = 'T582A'.
  lv_fldcat-ref_field = 'ZEITB'.  APPEND lv_fldcat TO it_fcat.
  CLEAR lv_fldcat.  lv_fldcat-row_pos   = '1'.
  lv_fldcat-col_pos   = '7'.
  lv_fldcat-fieldname = 'DNAME'.
  lv_fldcat-tabname   = 'IT_OUTPUT'.
  lv_fldcat-outputlen = 15.
  lv_fldcat-scrtext_m = 'Dialogmodule'.
  lv_fldcat-icon = ''.
  APPEND lv_fldcat TO it_fcat.
  CLEAR lv_fldcat.  lv_fldcat-row_pos   = '1'.
  lv_fldcat-col_pos   = '8'.
  lv_fldcat-fieldname = 'DAVO'.
  lv_fldcat-tabname   = 'IT_OUTPUT'.
  lv_fldcat-outputlen = 15.
  lv_fldcat-scrtext_m = 'Start'.
  lv_fldcat-edit = 'X'.
  APPEND lv_fldcat TO it_fcat.
  CLEAR lv_fldcat.  lv_fldcat-row_pos   = '1'.
  lv_fldcat-col_pos   = '9'.
  lv_fldcat-fieldname = 'DAVOE'.
  lv_fldcat-tabname   = 'IT_OUTPUT'.
  lv_fldcat-outputlen = 15.
  lv_fldcat-scrtext_m = 'End'.
  lv_fldcat-icon = ''.
  APPEND lv_fldcat TO it_fcat.
  CLEAR lv_fldcat.
*To create drop down for the field 'DAVO'
* with our own f4 help
  ty_dropdown-handle = '1'.
  ty_dropdown-value = ' '.
  APPEND ty_dropdown TO it_dropdown.
  ty_dropdown-handle = '1'.
  ty_dropdown-value = '1'.
  APPEND ty_dropdown TO it_dropdown.
  ty_dropdown-handle = '1'.
  ty_dropdown-value = '2'.
  APPEND ty_dropdown TO it_dropdown.
  ty_dropdown-handle = '1'.
  ty_dropdown-value = '3'.
  APPEND ty_dropdown TO it_dropdown.  CALL METHOD c_alvgd->set_drop_down_table
    EXPORTING
      it_drop_down = it_dropdown.
  LOOP AT it_fcat INTO lv_fldcat.
    CASE lv_fldcat-fieldname.
** To assign dropdown in the fieldcataogue
      WHEN 'DAVO'.
        lv_fldcat-drdn_hndl = '1'.
        lv_fldcat-outputlen = 15.
        MODIFY it_fcat FROM lv_fldcat.
    ENDCASE.
  ENDLOOP.ENDFORM.                    " alv_build_fieldcat*&---------------------------------------------------------------------*
*&      Form  alv_report_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_IT_LAYOUT  text
*----------------------------------------------------------------------*
*Subroutine for setting alv layout
FORM alv_report_layout.
  it_layout-cwidth_opt = 'X'.
  it_layout-col_opt = 'X'.
  it_layout-zebra = 'X'.ENDFORM.                    " alv_report_layout* PAI module of the screen created. In case we use an interactive ALV or
*for additional functionalities we can create OK codes
*and based on the user command we can do the coding.
*&---------------------------------------------------------------------*
*&      Module  PAI  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pai INPUT.*To change the existing values and refresh the grid
*And only values in the dropdown or in the default
*F4 can be given , else no action takes place for the dropdown
*and error is thrown for the default F4 help and font changes to red
*and on still saving, value is not changed  c_alvgd->check_changed_data( ).*Based on the user input
*When user clicks 'SAVE;
  CASE ok_code.    WHEN 'SAVE'.*A pop up is called to confirm the saving of changed data
      CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
          titlebar       = 'SAVING DATA'
          text_question  = 'Continue?'
          icon_button_1  = 'icon_booking_ok'
        IMPORTING
          answer         = gstring
        EXCEPTIONS
          text_not_found = 1
          OTHERS         = 2.
      IF sy-subrc NE 0.
*       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.*When the User clicks 'YES'
      IF ( gstring = '1' ).
        MESSAGE 'Saved' TYPE 'S'.
*Now the changed data is stored in the it_pbo internal table
        it_pbo = it_output.
*Subroutine to display the ALV with changed data.
        PERFORM redisplay.
      ELSE.
*When user clicks NO or Cancel
        MESSAGE 'Not Saved'  TYPE 'S'.
      ENDIF.
**When the user clicks the 'EXIT; he is out
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.  CLEAR: ok_code.ENDMODULE.                 " PAI  INPUT
*&---------------------------------------------------------------------*
*&      Form  REDISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM redisplay .*Cells of the alv are made non editable after entering OK to save  CALL METHOD c_alvgd->set_ready_for_input
    EXPORTING
      i_ready_for_input = 0.*Row and column of the alv are refreshed after changing values  stable-row = 'X'.
  stable-col = 'X'.*REfreshed ALV display with the changed values
*This ALV is non editable and contains new values
  CALL METHOD c_alvgd->refresh_table_display
    EXPORTING
      is_stable = stable
    EXCEPTIONS
      finished  = 1
      OTHERS    = 2.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.ENDFORM.                    " REDISPLAY

Edited by: ravee on Jun 2, 2008 10:03 PM

Read only

Former Member
0 Likes
1,536

Hi,

Thanks for ur reply.

But

ty_dropdown-value = '1'.

How to Pass internal table field value in here instead of '1'. I need a sample code please.

Read only

0 Likes
1,536

Hi ravi,

I think loop statement can serve the purpose

if the internal table is it_table then

loop at it_table into wa_table.

ty_dropdown-value = wa_table-value ( pass the required field)

append ty_dropdown to it_dropdown.

endloop.

reward if useful.

Thanks & Regards,

M. Swarna