运用类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( ).
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( ).
相关文章推荐
- [ ABAP技术 ] - 使用CL_SALV_TABLE实现ALV报表(Traffic Light / ALV Functions / Set Column)
- ALV demo:cl_salv_table
- ALV demo:cl_salv_table&nbsp…
- ALV demo:cl_salv_table&nbs…
- ALV demo:cl_salv_table(Ap…
- ALV demo:cl_salv_table&nbs…
- ALV demo:cl_salv_table&nbs…
- 如何通过cl_dd_document来实现在ALV中输出标题头
- CL_SALV_TABLE
- ABAP--如何使用CL_SALV_TABLE 的代码样例(2004以后版本)
- ALV componenet SALV_WD_TABLE
- ABAP--如何使用CL_SALV_TABLE 的代码样例(2004以后版本)
- OO实现ALV TABLE 六:ALV的弹出窗口形式
- ABAP--如何使用CL_SALV_TABLE 的代码样例(2004以后版本)
- Function实现ALV Table 二:ALV的弹出窗口形式
- cl_salv_table
- ABAP--如何使用CL_SALV_TABLE 的代码样例(2004以后版本)
- ABAP--如何使用CL_SALV_TABLE 的代码样例(2004以后版本)
- ABAP--如何使用CL_SALV_TABLE 的代码样例(2004以后版本)
- OO实现ALV TABLE 六:ALV的弹出窗口形式