Search on this Website

Thursday, September 4, 2008

SELECTING THE VARIANTS FOR INITIAL ALV LIST DISPLAY



The variants in the list display can be both user-specific and general. The user can programmatically set the initial (default) variant for list display.
The default variant can be found using the function module 'REUSE_ALV_VARIANT_DEFAULT_GET'.

Sample code:

CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = variant save condition (A=all, U = user-specific)
CHANGING
cs_variant = internal table containing the program name (and the default variant---optional)
EXCEPTIONS
not_found = 2.
The user can also choose from the list of existing variants using the function module ‘REUSE_ALV_VARIANT_F4’.


Example:


Initialization.
v_repid = sy-repid.
* Display default variant
PERFORM SUB_VARIANT_INIT.

AT SELECTION-SCREEN ON P_VAR.
* Once the user has entered variant, check about its existence
PERFORM SUB_CHECK_PVAR.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VAR.
* Display a list of various variants of the report when the User presses F4 key in the variant field
PERFORM SUB_VARIANT_F4.


*&---------------------------------------------------------------------*
*& Form SUB_VARIANT_INIT
*&---------------------------------------------------------------------*
* Display default variant
*&---------------------------------------------------------------------*
Form SUB_VARIANT_INIT.
I_VARIANT1-REPORT = SY-REPID.

* Search default variant for the report
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = i_variant1
EXCEPTIONS
not_found = 2.
* If default variant is found, use it as default.
* Else, use the variant LAYOUT1.
IF sy-subrc = 0.
p_var = i_variant1-variant.
ELSE.
p_var = 'LAYOUT1'.
ENDIF.
endform. “SUB_VARIANT_INIT

*&---------------------------------------------------------------------------------*
*& Form SUB_CHECK_PVAR
*&---------------------------------------------------------------------------------*
* Once the user has entered variant, check about its existence
*&---------------------------------------------------------------------------------*

FORM SUB_CHECK_PVAR.
* If the name of the variable is not blank, check about its existence
if not p_var is initial.
clear i_variant.
i_variant-report = sy-repid.
i_variant-variant = p_var.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = 'A'
CHANGING
CS_VARIANT = I_VARIANT.
* If no such variant found, flash error message
If sy-subrc ne 0 .
Message e398(00) with 'No such variant exists'.
Else.
* If variant exists, use the variant name to populate structure
* I_VARIANT1 which will be used for export parameter: IS_VARIANT
* in the function module : REUSE_ALV_GRID_DISPLAY
Clear i_variant1.
Move p_var to i_variant1-variant.
Move sy-repid to i_variant1-report.
endif.
Else.
Clear i_variant.
endif.
ENDFORM. “SUB_CHECK_PVAR

*&---------------------------------------------------------------------------------*
*& Form SUB_VARIANT_F4
*&---------------------------------------------------------------------------------*
* Display a list of various variants of the report when the User presses F4 key in the variant field
*&---------------------------------------------------------------------------------*
Form SUB_VARIANT_F4.
i_variant-report = sy-repid.
* Utilizing the name of the report, this function module will search for a list of
* variants and will fetch the selected one into the parameter field for variants
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = I_VARIANT
I_SAVE = 'A'
I_DISPLAY_VIA_GRID = 'X'
IMPORTING
ES_VARIANT = I_VARIANT1
EXCEPTIONS
NOT_FOUND = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC = 0.
P_VAR = I_VARIANT1-VARIANT.
ENDIF.
endform. “SUB_VARIANT_F4

No comments: