Application Development 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: 

Dynamic select options

Former Member
0 Kudos

Hi,

I need help in creating dynamic selections.

I am working on a report program. My requirement is to generate the dynamic selection fields based on the

name of table.

There is a selection parameter as table name. When user enter table name and hit enter first 3 fields in the

table should appear as select-options below the table name.

Am not able to figure it out, plz help me.

Thanks,

1 ACCEPTED SOLUTION

oleg_sukharenko
Explorer
0 Kudos

Are the possible values of the table name limited? Other words, could it be just several tables? If not I would suggest write a FM to call popup or regular screen where you can do dynamic fields assignments like in SE16.

thanks

5 REPLIES 5

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

This is sort of dynamic, but not 100%. But still maybe useful to you. Here this program, excepts the table name, user hits F8, and a selection screen in a window will then appear with the first 20 fields of the table as SELECT-OPTIONS. Of course, you could expand this to allow for more fields.

DATA: lt_dd03p TYPE TABLE OF dd03p.
DATA: ls_dd03p LIKE LINE OF lt_dd03p.

DATA: lv_field01 TYPE string.
DATA: lv_field02 TYPE string.
DATA: lv_field03 TYPE string.
DATA: lv_field04 TYPE string.
DATA: lv_field05 TYPE string.
DATA: lv_field06 TYPE string.
DATA: lv_field07 TYPE string.
DATA: lv_field08 TYPE string.
DATA: lv_field09 TYPE string.
DATA: lv_field10 TYPE string.
DATA: lv_field11 TYPE string.
DATA: lv_field12 TYPE string.
DATA: lv_field13 TYPE string.
DATA: lv_field14 TYPE string.
DATA: lv_field15 TYPE string.
DATA: lv_field16 TYPE string.
DATA: lv_field17 TYPE string.
DATA: lv_field18 TYPE string.
DATA: lv_field19 TYPE string.
DATA: lv_field20 TYPE string.

DATA: lv_sgrp TYPE string.
DATA: lv_field_name TYPE string.
DATA: lv_field_number TYPE numc2.

FIELD-SYMBOLS: <lv_field> TYPE ANY.



Regards,

Rich Heilman

Splitting source code

Edited by: Rich Heilman on Dec 8, 2009 2:39 PM

Edited by: Rich Heilman on Dec 8, 2009 2:40 PM

0 Kudos

Part 2

PARAMETERS: p_table TYPE ddobjname DEFAULT 'T000'.
SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW.
SELECT-OPTIONS: s_fld01 FOR (lv_field01) MODIF ID f01.
SELECT-OPTIONS: s_fld02 FOR (lv_field02) MODIF ID f02.
SELECT-OPTIONS: s_fld03 FOR (lv_field03) MODIF ID f03.
SELECT-OPTIONS: s_fld04 FOR (lv_field04) MODIF ID f04.
SELECT-OPTIONS: s_fld05 FOR (lv_field05) MODIF ID f05.
SELECT-OPTIONS: s_fld06 FOR (lv_field06) MODIF ID f06.
SELECT-OPTIONS: s_fld07 FOR (lv_field07) MODIF ID f07.
SELECT-OPTIONS: s_fld08 FOR (lv_field08) MODIF ID f08.
SELECT-OPTIONS: s_fld09 FOR (lv_field09) MODIF ID f09.
SELECT-OPTIONS: s_fld10 FOR (lv_field10) MODIF ID f10.
SELECT-OPTIONS: s_fld11 FOR (lv_field11) MODIF ID f11.
SELECT-OPTIONS: s_fld12 FOR (lv_field12) MODIF ID f12.
SELECT-OPTIONS: s_fld13 FOR (lv_field13) MODIF ID f13.
SELECT-OPTIONS: s_fld14 FOR (lv_field14) MODIF ID f14.
SELECT-OPTIONS: s_fld15 FOR (lv_field15) MODIF ID f15.
SELECT-OPTIONS: s_fld16 FOR (lv_field16) MODIF ID f16.
SELECT-OPTIONS: s_fld17 FOR (lv_field17) MODIF ID f17.
SELECT-OPTIONS: s_fld18 FOR (lv_field18) MODIF ID f18.
SELECT-OPTIONS: s_fld19 FOR (lv_field19) MODIF ID f19.
SELECT-OPTIONS: s_fld20 FOR (lv_field20) MODIF ID f20.
SELECTION-SCREEN END OF SCREEN 500 .

Regards,

Rich Heilman

Edited by: Rich Heilman on Dec 8, 2009 2:41 PM

Edited by: Rich Heilman on Dec 8, 2009 2:41 PM

0 Kudos

Part 3

AT SELECTION-SCREEN OUTPUT.

  IF sy-dynnr = '0500'.

    CALL FUNCTION 'DDIF_TABL_GET'
      EXPORTING
        name      = p_table
      TABLES
        dd03p_tab = lt_dd03p.

    CLEAR lv_field_number.
    LOOP AT lt_dd03p INTO ls_dd03p.

      lv_field_number = lv_field_number + 1.

      CONCATENATE 'LV_FIELD' lv_field_number INTO lv_field_name.
      ASSIGN (lv_field_name) TO <lv_field>.
      IF sy-subrc = 0.
        CONCATENATE ls_dd03p-tabname ls_dd03p-fieldname INTO <lv_field> SEPARATED BY '-'.
      ENDIF.

    ENDLOOP.

    CLEAR  lv_field_number .
    DO.
      lv_field_number = lv_field_number + 1.
      CONCATENATE 'F' lv_field_number INTO lv_sgrp.
      CONCATENATE 'LV_FIELD' lv_field_number INTO lv_field_name.
      ASSIGN (lv_field_name) TO <lv_field>.
      IF sy-subrc = 0 .
        IF  <lv_field> IS INITIAL.
          LOOP AT SCREEN.
            IF screen-group1 = lv_sgrp.
              screen-active = 0.
              MODIFY SCREEN.
            ENDIF.
          ENDLOOP.
        ENDIF.
      ELSE.
        EXIT.
      ENDIF.
    ENDDO.

  ENDIF.

START-OF-SELECTION.

  CALL SELECTION-SCREEN 500 STARTING AT 10 5 ENDING AT 120 30.
* Do all other logic here, and display the report results.

Regards,

Rich Heilman

oleg_sukharenko
Explorer
0 Kudos

Are the possible values of the table name limited? Other words, could it be just several tables? If not I would suggest write a FM to call popup or regular screen where you can do dynamic fields assignments like in SE16.

thanks

Clemenss
Active Contributor
0 Kudos

Hi Prasad,

check blogs regarding

CALL FUNCTION 'FREE_SELECTIONS_INIT'

  • Display free selection dialog

CALL FUNCTION 'FREE_SELECTIONS_DIALOG'

Regards,

Clemens