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

getting column headers dynamically from input parameters in alv.

Former Member
0 Likes
2,815

Hi all,

I am new to abap, can any one help me in getting column header dynamically through parameters in alv ?

Eg:-

i Have parametars for days field ,

user inputs days as 10 20 30 40.

Now I want to display in alv column headers as:-

1st column- 'FROM 0 TO 10'

2nd column- 'FROM 10 TO 20 '

3rd column- 'FROM 20 TO 30'

4th column- 'FROM 30 TO 40'

5th column- 'FROM 40 TO 50'

6th column- 'FROM 50 TO 60'

thanks in advance........

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,517

Hi Deven,

You need to create the column header by concatenating the parameters and then pass it to the field catalog as follows :

e.g. If user enters,

param1 = 10

param2 = 20

param3 = 30

Use,

CONCATENATE 'FROM' '0' 'TO' param1 INTO var1 SEPARATED BY space.

CONCATENATE 'FROM' param1 'TO' param2 INTO var2 SEPARATED BY space.

CONCATENATE 'FROM' param2 'TO' param3 INTO var3 SEPARATED BY space. and so on....

pass every header to field catalog ,

wa_fieldcat_brand_org-fieldname = <fieldname>.

wa_fieldcatalog-seltext_l = var1.

APPEND wa_fieldcatalog to it_fieldcatalog.

......

wa_fieldcat_brand_org-fieldname = <fieldname>.

wa_fieldcatalog-seltext_l = var2.

APPEND wa_fieldcatalog to it_fieldcatalog.

.......

wa_fieldcat_brand_org-fieldname = <fieldname>.

wa_fieldcatalog-seltext_l = var3.

APPEND wa_fieldcatalog to it_fieldcatalog. and so on....

Hope this helps.

V Joshi

6 REPLIES 6
Read only

Former Member
0 Likes
1,517

Hi Deven

Welcome to SDN

u will get the values to want to diplay in column header fill those values in a work area and display as following

WA_FIELDCAT-ROW_POS = 1.

WA_FIELDCAT-COL_POS = 9.

WA_FIELDCAT-FIELDNAME = 'W_DAY1'.

WA_FIELDCAT-TABNAME = 'IT_OUTPUT'.

WA_FIELDCAT-COLTEXT = WA_WEEK-DAY1. *dynamic header as per value

WA_FIELDCAT-OUTPUTLEN = 09.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-ROW_POS = 1.

WA_FIELDCAT-COL_POS = 10.

WA_FIELDCAT-FIELDNAME = 'W_DAY2'.

WA_FIELDCAT-TABNAME = 'IT_OUTPUT'.

WA_FIELDCAT-COLTEXT = WA_WEEK-DAY2. *dynamic header as per value

WA_FIELDCAT-OUTPUTLEN = 09.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-ROW_POS = 1.

WA_FIELDCAT-COL_POS = 11.

WA_FIELDCAT-FIELDNAME = 'W_DAY3'.

WA_FIELDCAT-TABNAME = 'IT_OUTPUT'.

WA_FIELDCAT-COLTEXT = WA_WEEK-DAY3. *dynamic header as per value

WA_FIELDCAT-OUTPUTLEN = 09.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-ROW_POS = 1.

WA_FIELDCAT-COL_POS = 12.

WA_FIELDCAT-FIELDNAME = 'W_DAY4'.

WA_FIELDCAT-TABNAME = 'IT_OUTPUT'.

WA_FIELDCAT-COLTEXT = WA_WEEK-DAY4. *dynamic header as per value

WA_FIELDCAT-OUTPUTLEN = 09.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-ROW_POS = 1.

WA_FIELDCAT-COL_POS = 13.

WA_FIELDCAT-FIELDNAME = 'W_DAY5'.

WA_FIELDCAT-TABNAME = 'IT_OUTPUT'.

WA_FIELDCAT-COLTEXT = WA_WEEK-DAY5. *dynamic header as per value

WA_FIELDCAT-OUTPUTLEN = 09.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

Edited by: gaurav.singh on Jun 3, 2010 11:19 AM

Read only

Former Member
0 Likes
1,518

Hi Deven,

You need to create the column header by concatenating the parameters and then pass it to the field catalog as follows :

e.g. If user enters,

param1 = 10

param2 = 20

param3 = 30

Use,

CONCATENATE 'FROM' '0' 'TO' param1 INTO var1 SEPARATED BY space.

CONCATENATE 'FROM' param1 'TO' param2 INTO var2 SEPARATED BY space.

CONCATENATE 'FROM' param2 'TO' param3 INTO var3 SEPARATED BY space. and so on....

pass every header to field catalog ,

wa_fieldcat_brand_org-fieldname = <fieldname>.

wa_fieldcatalog-seltext_l = var1.

APPEND wa_fieldcatalog to it_fieldcatalog.

......

wa_fieldcat_brand_org-fieldname = <fieldname>.

wa_fieldcatalog-seltext_l = var2.

APPEND wa_fieldcatalog to it_fieldcatalog.

.......

wa_fieldcat_brand_org-fieldname = <fieldname>.

wa_fieldcatalog-seltext_l = var3.

APPEND wa_fieldcatalog to it_fieldcatalog. and so on....

Hope this helps.

V Joshi

Read only

0 Likes
1,517

hi there,

ur suggestion solve dmy problem........

thanks a lot.

loking forward for more inputs from u..

thanks again..

Read only

SuhaSaha
Product and Topic Expert
Product and Topic Expert
0 Likes
1,517

Check this code snippet:

Step 1: Create a dynamic table based on the input in the selection screen.


TYPE-POOLS: abap.

DATA:
  lr_structdescr    TYPE REF TO cl_abap_structdescr,
  lr_tabledescr     TYPE REF TO cl_abap_tabledescr,
  lr_datadescr      TYPE REF TO cl_abap_datadescr,
  lt_components     TYPE abap_component_tab,
  ls_component      TYPE abap_componentdescr,
  lr_wa             TYPE REF TO data,
  lr_tab            TYPE REF TO data.

DATA: lv_index TYPE sy-index.
DATA: lv_index_num(5) TYPE n.
DATA: lv_index_char(5) TYPE c,
      lv_iter TYPE i,
      lv_low TYPE numc2 VALUE 0,
      lv_high TYPE numc2 VALUE 10.


DATA: lr_alv TYPE REF TO cl_salv_table.

FIELD-SYMBOLS: <fs_field> TYPE ANY.
FIELD-SYMBOLS: <fs_wa> TYPE ANY.
FIELD-SYMBOLS: <fs_tab> TYPE table.

PARAMETERS p_numcol(2) TYPE n DEFAULT 50.

START-OF-SELECTION.

  lv_iter = p_numcol DIV 10.

  DO lv_iter TIMES.

    IF sy-index > 1.
      lv_low = lv_low + 10.
      lv_high = lv_high + 10.
    ENDIF.

    lv_index_num = sy-index.
    lv_index_char = lv_index_num.
    CONCATENATE 'FROM' lv_low 'TO' lv_high INTO ls_component-name
    SEPARATED BY '_'.
    ls_component-type =
    cl_abap_elemdescr=>get_p( p_length = 10 p_decimals = 2 ).
    INSERT ls_component INTO TABLE lt_components.
  ENDDO.

* get structure descriptor -> lr_STRUCTDESCR
  lr_structdescr
  = cl_abap_structdescr=>create( p_components = lt_components
                                 p_strict = space ).

* create work area of structure lr_STRUCTDESCR -> lr_WA
  CREATE DATA lr_wa TYPE HANDLE lr_structdescr.
  ASSIGN lr_wa->* TO <fs_wa>.

  lr_datadescr = lr_structdescr.
  lr_tabledescr
  = cl_abap_tabledescr=>create( lr_datadescr ).

* Create dynamic internal table
  CREATE DATA lr_tab TYPE HANDLE lr_tabledescr.
  ASSIGN lr_tab->* TO <fs_tab>.


* Populate the internal table
  DO 10 TIMES.
    DO.
      lv_index = sy-index.
      ASSIGN COMPONENT  lv_index  OF STRUCTURE <fs_wa> TO <fs_field>.
      IF sy-subrc <> 0.
        EXIT.
      ENDIF.
      <fs_field> = sy-index.
    ENDDO.
    APPEND <fs_wa> TO <fs_tab>.
  ENDDO.

Read only

SuhaSaha
Product and Topic Expert
Product and Topic Expert
0 Likes
1,517

Step 2: Display the dynamic table as an ALV using the factory method of SALV:

* Create the ALV using the Factory Method
  cl_salv_table=>factory(
  IMPORTING
    r_salv_table = lr_alv
  CHANGING
    t_table      = <fs_tab> ).

  DATA: lr_functions TYPE REF TO cl_salv_functions_list.

  lr_functions = lr_alv->get_functions( ).
  lr_functions->set_default( abap_true ).

  DATA: lr_columns TYPE REF TO cl_salv_columns.

  lr_columns = lr_alv->get_columns( ).
  lr_columns->set_optimize( abap_true ).

  PERFORM set_column_names USING lr_columns.

  lr_alv->display( ).
*&---------------------------------------------------------------------*
*&      Form  SET_COLUMN_NAMES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_column_names
  USING ir_columns TYPE REF TO cl_salv_columns.

  DATA: lr_column TYPE REF TO cl_salv_column,
        lt_column TYPE salv_t_column_ref,
        ls_column TYPE salv_s_column_ref,
        lv_coltxt TYPE scrtext_m.

  lt_column = ir_columns->get( ).

  LOOP AT lt_column INTO ls_column.
    lv_coltxt = ls_column-columnname.
    REPLACE ALL OCCURRENCES OF '_' IN lv_coltxt WITH ` `.
    ls_column-r_column->set_medium_text( lv_coltxt ).
  ENDLOOP.

Hope this helps.

BR,

Suhas

Read only

bilal_zafar
Explorer
0 Likes
1,517

i ve a same question but i need to concatenate the select option low and high value , how do i do that .