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: 

Layout in ALV Grid in OO ABAP

former_member188001
Active Participant
0 Kudos

Hello friends,

I want the ALV Grid to be displayed with a default layout. I am able to get the saved layout on the selection screen but when I select that layout still the output layout is not taking it.

Please refer the code which I have written.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_layout.

PERFORM variant_search CHANGING p_layout.

FORM variant_search CHANGING p_layout TYPE slis_vari.

DATA : lv_exit TYPE c,

ls_variant TYPE disvariant.

ls_variant-report = syst-repid.

CALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTING

is_variant = ls_variant

i_save = 'A'

IMPORTING

e_exit = lv_exit

es_variant = ls_variant

EXCEPTIONS

not_found = 1

program_error = 2

OTHERS = 3.

IF sy-subrc EQ 0 AND lv_exit IS INITIAL.

p_layout = ls_variant-variant.

ENDIF.

ENDFORM. " variant_search

*-------The above piece of code helps me to save a layout.

Now when I enter the saved layout in my parameter, I want the output to take this layout and display the grid, but I dont know why it is not taking this layout. Please refer the code which I have written.

lr_layout = gr_alv->get_layout( ).

key-report = sy-repid.

lr_layout->set_key( key ).

lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).

Please let me know how can I achieve this.

Regards,

Salil

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

Please check out sample report BCALV_GRID_10!

Hope this helps (please reward me if it does...).

Regards, Joerg

6 REPLIES 6

Former Member
0 Kudos

Salil,

Here is some code that uses a default variant.

*&----


*& SELECTION-SCREEN

*&----


SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS: s_werks FOR marc-werks,

s_matnr FOR mara-matnr,

s_uname FOR sy-uname,

s_datum FOR sy-datum,

s_uzeit FOR sy-uzeit,

s_mtart FOR mara-mtart,

s_matkl FOR mara-matkl.

PARAMETERS: p_toler(3) TYPE n.

SELECTION-SCREEN: END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK v1 WITH FRAME.

PARAMETERS: p_vari LIKE disvariant-variant.

SELECTION-SCREEN END OF BLOCK v1.

*&----


*& Event INITIALIZATION

*&----


INITIALIZATION.

PERFORM set_defaults.

PERFORM default_variant CHANGING p_vari.

----


  • Event AT SELECTION-SCREEN ON VALUE-REQUEST

----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.

PERFORM f4_for_variant CHANGING p_vari.

&----


*& Form default_variant

&----


  • text

----


  • <--PL_VARI variant

----


FORM default_variant CHANGING pl_vari.

g_repid = sy-repid.

  • set options: save variants userspecific or general

g_save = 'A'. " 'A' = standard and user-specific saving

  • initialize variant

CLEAR gs_variant.

gs_variant-report = g_repid.

  • get default variant

gs_xvariant = gs_variant.

CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'

EXPORTING

i_save = g_save

CHANGING

cs_variant = gs_xvariant

EXCEPTIONS

not_found = 2.

IF sy-subrc = 0.

pl_vari = gs_xvariant-variant.

ENDIF.

ENDFORM. " default_variant

&----


*& Form f4_for_variant

&----


  • text

----


  • <--PL_VARI variant

----


FORM f4_for_variant CHANGING pl_vari.

  • display variant selection dialog box

CALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTING

is_variant = gs_variant

i_save = g_save

  • it_default_fieldcat =

IMPORTING

e_exit = g_exit

es_variant = gs_xvariant

EXCEPTIONS

not_found = 2.

IF sy-subrc = 2.

MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ELSE.

IF g_exit = space.

pl_vari = gs_xvariant-variant.

ENDIF.

ENDIF.

ENDFORM. " f4_for_variant

----


  • MODULE status_0100 OUTPUT

----


*

----


MODULE status_0100 OUTPUT.

SET PF-STATUS '100'.

SET TITLEBAR '100'.

IF o_container IS INITIAL.

REFRESH: t_fieldcat,

t_sortcat,

t_groupcat,

gt_exclude.

CREATE OBJECT o_container

EXPORTING container_name = 'CONTAINER'.

  • Create TOP-Document

CREATE OBJECT o_dyndoc_id

EXPORTING style = 'ALV_GRID'.

  • Create Splitter for custom_container

CREATE OBJECT o_splitter

EXPORTING parent = o_container

rows = 2

columns = 1.

CALL METHOD o_splitter->get_container

EXPORTING

row = 1

column = 1

RECEIVING

container = o_parent_top.

CALL METHOD o_splitter->get_container

EXPORTING

row = 2

column = 1

RECEIVING

container = o_parent_grid.

  • Set height for g_parent_html

CALL METHOD o_splitter->set_row_height

EXPORTING

id = 1

height = 12.

CREATE OBJECT o_grid

EXPORTING i_parent = o_parent_grid.

gs_layout-smalltitle = 'X'.

gs_layout-no_rowmark = ' '.

gs_layout-cwidth_opt = 'X'.

gs_layout-zebra = 'X'.

gs_layout-sel_mode = 'D'.

gs_variant-report = sy-cprog.

gs_variant-variant = p_vari.

gs_exclude = cl_gui_alv_grid=>mc_fc_info.

APPEND gs_exclude TO gt_exclude.

gs_exclude = cl_gui_alv_grid=>mc_fc_graph.

APPEND gs_exclude TO gt_exclude.

CALL METHOD o_grid->set_3d_border

EXPORTING

border = 1.

SET HANDLER lcl_event_handler=>hotspot_click FOR o_grid.

SET HANDLER lcl_event_handler=>top_of_page FOR o_grid.

SET HANDLER lcl_event_handler=>print_top_of_page FOR o_grid.

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'

EXPORTING

i_structure_name = 'Z1271'

CHANGING

ct_fieldcat = t_fieldcat.

LOOP AT t_fieldcat INTO h_fieldcat.

CASE h_fieldcat-fieldname.

WHEN 'MATNR'.

h_fieldcat-hotspot = 'X'.

WHEN 'VBELN'.

h_fieldcat-hotspot = 'X'.

WHEN 'UNAME'.

h_fieldcat-coltext = 'Maint. By'.

h_fieldcat-tooltip = 'Material maintained by'.

WHEN 'DATUM'.

h_fieldcat-coltext = 'Maint. Date'.

h_fieldcat-tooltip = 'Material maintenance date'.

WHEN 'UZEIT'.

h_fieldcat-coltext = 'Maint. Time'.

h_fieldcat-tooltip = 'Material maintenance time'.

WHEN 'EDAYS'.

h_fieldcat-coltext = 'EDays'.

h_fieldcat-tooltip = 'Elapsed days'.

WHEN 'ETIME'.

h_fieldcat-coltext = 'ETime'.

h_fieldcat-tooltip = 'Elapsed time same day'.

WHEN 'EDATU'.

h_fieldcat-coltext = 'Delivery Date'.

h_fieldcat-tooltip = 'Delivery date'.

ENDCASE.

MODIFY t_fieldcat FROM h_fieldcat.

CLEAR h_fieldcat.

ENDLOOP.

CALL METHOD o_grid->set_table_for_first_display

EXPORTING

is_layout = gs_layout

i_save = 'A'

is_variant = gs_variant

it_toolbar_excluding = gt_exclude

CHANGING

it_fieldcatalog = t_fieldcat

it_sort = t_sortcat

it_outtab = t_rpt.

CALL METHOD o_grid->list_processing_events

EXPORTING

i_event_name = 'TOP_OF_PAGE'

i_dyndoc_id = o_dyndoc_id.

ENDIF.

ENDMODULE. "status_0100 OUTPUT

Former Member
0 Kudos

Hi,

Please check out sample report BCALV_GRID_10!

Hope this helps (please reward me if it does...).

Regards, Joerg

0 Kudos

Hi Fred and Joerg,

The answers given by both of you are useful. But it still havent solved my problem. Actually i am not using a custom container to display my grid and hence i am not using the method set_table_for_first_display. Instead i am using OO concept. Here goes the piece of code. Please let me know, what changes should I do to get the expected output.

DATA: gr_alv TYPE REF TO cl_salv_table,

lr_layout TYPE REF TO cl_salv_layout.

CALL METHOD cl_salv_table=>factory

IMPORTING

r_salv_table = gr_alv

CHANGING

t_table = i_output. "output internal table

lr_layout = gr_alv->get_layout( ).

key-report = sy-repid.

lr_layout->set_key( key ).

lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).

gr_alv->display( ).

Thanks & Regards,

Salil

0 Kudos

Hi. Please add the code as you see here.




 *--- This code is to get the layout,save the layout and display the layout
        lr_layout = gr_alv->get_layout( ).
        key-report = sy-repid.
        lr_layout->set_key( key ).
        lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).

        data: init_layout type slis_vari.                          " This Line
        init_layout = p_layout.                                      " This Line
        lr_layout->SET_INITIAL_LAYOUT( init_layout ).   " This Line


*--- display report
        gr_alv->display( ). 

Regards.

Rich Heilman

0 Kudos

Thanks Rich for you efforts. My problem got solved.

0 Kudos

This message was moderated.