您的位置:首页 > 其它

运用类CL_SALV_TABLE实现alv

2012-06-20 21:48 225 查看
以前一直运用container的方式来显示alv,现在介绍一种不太常用的方法来显示alv,希望可以提供一种新的思路。但是一直没有找到怎样运用此方法在Toolbar上增加一个按钮,或者响应某些事件。


REPORT ZPRO_D***ID_ALV_CL.

*----------------------------------------------------------------------*

* CLASS lcl_report DEFINITION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS LCL_REPORT DEFINITION.

PUBLIC SECTION.

*----------------------------------------------------------------------*

* Final Output Table

*----------------------------------------------------------------------*

TYPES: BEGIN OF TY_MARA,

MATNR TYPE MATNR,

ERSDA TYPE ERSDA,

MATKL TYPE MATKL,

MTART TYPE MTART,

LVORM TYPE LVORM,

END OF TY_MARA.

DATA: O_ALV TYPE REF TO CL_SALV_TABLE, " ALV Reference

T_MARA TYPE STANDARD TABLE OF TY_MARA.

*----------------------------------------------------------------------*

* Methods to Fetch Data and Generate Output

*----------------------------------------------------------------------*

METHODS: GET_DATA, "Data Selection

GENERATE_OUTPUT. "Generating Output PRIVATE SECTION.

*----------------------------------------------------------------------*

* Methods to Set PF-Status, Header and Footer

*----------------------------------------------------------------------*

METHODS: SET_PF_STATUS

CHANGING

CO_ALV TYPE REF TO CL_SALV_TABLE, " Default Pf Status

SET_TOP_OF_PAGE

CHANGING

CO_ALV TYPE REF TO CL_SALV_TABLE, " Set Top of page

SET_END_OF_PAGE

CHANGING

CO_ALV TYPE REF TO CL_SALV_TABLE. " Set End of page

ENDCLASS.

"lcl_report DEFINITION*----------------------------------------------------------------------*

* CLASS lcl_report IMPLEMENTATION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS LCL_REPORT IMPLEMENTATION.

*----------------------------------------------------------------------*

* Data selection

*----------------------------------------------------------------------*

METHOD GET_DATA.

SELECT MATNR ERSDA MATKL MTART LVORM INTO TABLE T_MARA

FROM MARA UP TO 20 ROWS.

ENDMETHOD.

"get_data*----------------------------------------------------------------------*

* Generating Output

*----------------------------------------------------------------------*

METHOD GENERATE_OUTPUT.

*Exception Class

DATA: LC_MSG TYPE REF TO CX_SALV_MSG.

*----------------------------------------------------------------------*

* We are calling the static Factory method which will give back

* the ALV object reference.

*----------------------------------------------------------------------*

TRY.

CALL METHOD CL_SALV_TABLE=>FACTORY

IMPORTING

R_SALV_TABLE = O_ALV

CHANGING

T_TABLE = T_MARA.

CATCH CX_SALV_MSG INTO LC_MSG .

ENDTRY.

************************************************************************

* In this area we will call the methods which will set the

* different properties to the ALV

************************************************************************

* Calling Set PF status method

CALL METHOD SET_PF_STATUS

CHANGING

CO_ALV = O_ALV. "set_end_of_page* Calling the top of page method

CALL METHOD SET_TOP_OF_PAGE

CHANGING

CO_ALV = O_ALV.

* Calling the End of page method

CALL METHOD SET_END_OF_PAGE

CHANGING

CO_ALV = O_ALV.

************************************************************************

* Displaying the ALV

* Here we will call the DISPLAY method to get the output on the screen

************************************************************************

O_ALV->DISPLAY( ).

ENDMETHOD. "generate_output************************************************************************

* In this area we will implement the methods which are defined in

* the class definition

************************************************************************

* Setting Default PF-Status

METHOD SET_PF_STATUS.

DATA: LO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST.

* Default functions

LO_FUNCTIONS = CO_ALV->GET_FUNCTIONS( ).

LO_FUNCTIONS->SET_DEFAULT( ABAP_TRUE ).

ENDMETHOD. "set_pf_status

* Setting Top_of_page

METHOD SET_TOP_OF_PAGE.

DATA: LO_HEADER TYPE REF TO CL_SALV_FORM_LAYOUT_GRID,

LO_H_LABEL TYPE REF TO CL_SALV_FORM_LABEL,

LO_H_FLOW TYPE REF TO CL_SALV_FORM_LAYOUT_FLOW.

* Header object

CREATE OBJECT LO_HEADER.

*----------------------------------------------------------------------*

* To create a Label or Flow we have to specify the target

* row and column number where we need to set up the output

* text.

*----------------------------------------------------------------------*

* Information in Bold

LO_H_LABEL = LO_HEADER->CREATE_LABEL( ROW = 1 COLUMN = 1 ).

LO_H_LABEL->SET_TEXT('Header of the ALV Output in Bold').

* Information in tabular format

LO_H_FLOW = LO_HEADER->CREATE_FLOW( ROW = 2 COLUMN = 1 ).

LO_H_FLOW->CREATE_TEXT( TEXT = 'This is text of flow in Header' ).

LO_H_FLOW = LO_HEADER->CREATE_FLOW( ROW = 3 COLUMN = 1 ).

LO_H_FLOW->CREATE_TEXT( TEXT = 'Date of List Generation' ).

LO_H_FLOW = LO_HEADER->CREATE_FLOW( ROW = 3 COLUMN = 2 ).

LO_H_FLOW->CREATE_TEXT( TEXT = sy-datum ).

* Set the top of list using the header for Online

CO_ALV->SET_TOP_OF_LIST( LO_HEADER ).

* Set the top of list using the header for Print

CO_ALV->SET_TOP_OF_LIST_PRINT( LO_HEADER ). ENDMETHOD. "set_top_of_page

* Setting End_Of_page

METHOD SET_END_OF_PAGE.

DATA: LO_FOOTER TYPE REF TO CL_SALV_FORM_LAYOUT_GRID,

LO_F_LABEL TYPE REF TO CL_SALV_FORM_LABEL,

LO_F_FLOW TYPE REF TO CL_SALV_FORM_LAYOUT_FLOW.

* Footer Object

CREATE OBJECT LO_FOOTER.

* Information in Bold

LO_F_LABEL = LO_FOOTER->CREATE_LABEL( ROW = 1 COLUMN = 1 ).

LO_F_LABEL->SET_TEXT('Footer of the ALV in Bold').

* Tabular Information

LO_F_FLOW = LO_FOOTER->CREATE_FLOW( ROW = 2 COLUMN = 1 ).

LO_F_FLOW->CREATE_TEXT( TEXT = 'This is text of flow in footer' ).

* Set the end of list using the header for Online

CO_ALV->SET_END_OF_LIST( LO_FOOTER ).

* Set the End of list using the header for Print

CO_ALV->SET_END_OF_LIST_PRINT( LO_FOOTER ).

ENDMETHOD. "set_end_of_page

ENDCLASS.

"lcl_report IMPLEMENTATION*----------------------------------------------------------------------*

START-OF-SELECTION.

*----------------------------------------------------------------------*

DATA: LO_REPORT TYPE REF TO LCL_REPORT.

CREATE OBJECT LO_REPORT.

LO_REPORT->GET_DATA( ).

LO_REPORT->GENERATE_OUTPUT( ).



除此外,还可以和Container结合起来一起用:

DATA: GR_TABLE TYPE REF TO CL_SALV_TABLE.

DATA: GR_REPORT TYPE REF TO LCL_REPORT .

DATA: CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

CREATE OBJECT CONTAINER1

EXPORTING

CONTAINER_NAME = 'CONTMARA'.

TRY.

CL_SALV_TABLE=>FACTORY(

EXPORTING

R_CONTAINER = CONTAINER1

CONTAINER_NAME = 'CONTMARA'

IMPORTING

R_SALV_TABLE = GR_TABLE

CHANGING

T_TABLE = T_MARA ).

CATCH CX_SALV_MSG. "#EC NO_HANDLER

ENDTRY.

create object GR_REPORT.

GR_REPORT->SET_PF_STATUS( CHANGING CO_ALV = GR_TABLE ).

GR_REPORT->SET_TOP_OF_PAGE( CHANGING CO_ALV = GR_TABLE ).

GR_REPORT->SET_COLUMNS( CHANGING CO_ALV = GR_TABLE ).

GR_TABLE->DISPLAY( ).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: