How to make ALV report much more easily? As we know there are about 3 ways to implement ALV report, that is REUSE_ALV, ALV_GRID classs, and SALV, in this section, I will show you on how to use SALV with a common include that makes ALV Report as simple as possible.
First, I list some classes that combine with SALV_TABLE to fit most of your requirements.
1.1 CL_SALV_DISPLAY_SETTINGS — Setting display options
1.2 CL_SALV_COLUMNS_TABLE — All columns table
1.3 CL_SALV_COLUMN_TABLE — Single column table
1.4 CL_SALV_EVENTS_TABLE — Events table
1.5 CL_SALV_SORTS — Sorts options
1.6 CL_SALV_AGGREGATIONS — Aggregations for many fields
1.7 CL_SALV_AGGREGATION —-Single aggregation
1.8 CL_SALV_FUNCTIONS_LIST —Function code list
1.9 CL_SALV_DROPDOWN —single dropdown event processing
1.10 CL_SALV_DROPDOWNS
1.11 CL_SALV_FILTER —Filter option
1.12 CL_SALV_FILTERS
1.13 CL_SALV_HEADER —Header config
1.14 CL_SALV_FOOTER —Footer config
Now the main part comes, an include that makes SALV ustilities:
*&---------------------------------------------------------------------* *& Author: 翱翔云天 *& Web Site: www.abaptech.com *& Mail: bob.xu@abaptech.com *& Desc: This utilities is used for ALV report programming *& The one who not used to CL_SALV* utilities could reference *& this document, and make it include in your main program, *& call the methods in this utilities *& 中文描述:ALV大概分成3种实现方式,在这里我们使用CL_SALV*去实现, *& 这个和工厂模式非常匹配,也算是工厂模式在sap中的典型应用吧 *&---------------------------------------------------------------------* *& Include ZBOBO_SALV_UTILITIES *&---------------------------------------------------------------------* * 定义一个全局的field-symbol,传输数据使用 * Define global data FIELD-SYMBOLS TYPE ANY TABLE. *----------------------------------------------------------------------* * CLASS lcl_alv DEFINITION *----------------------------------------------------------------------* * Main utilities class definition *----------------------------------------------------------------------* CLASS LCL_ALV_UTL DEFINITION. PUBLIC SECTION. *-->Set ALV output table contents 设置alv输出表 METHODS SET_ALV IMPORTING IN_ALV_TAB TYPE ANY TABLE. *-->Show ALV 显示ALV METHODS DISPLAY_ALV. *-->Handle hotspot event 事件处理 METHODS ON_LINK_CLICK "Hotspot click FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE IMPORTING ROW COLUMN. *-->Handle double click event METHODS ON_DOUBLE_CLICK "双击 FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE IMPORTING ROW COLUMN. *-->Hand user defined event METHODS ON_USER_COMMAND "自定义功能 FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS IMPORTING E_SALV_FUNCTION. PROTECTED SECTION. *-->ALV related object definition DATA: O_TABLE TYPE REF TO CL_SALV_TABLE, O_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS, O_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE, O_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE, O_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE, O_SORTS TYPE REF TO CL_SALV_SORTS, O_AGGREGATIONS TYPE REF TO CL_SALV_AGGREGATIONS, O_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST. *-->Display table contents DATA T_ALV TYPE REF TO DATA. ENDCLASS. "lcl_alv DEFINITION *----------------------------------------------------------------------* * CLASS lcl_alv IMPLEMENTATION *----------------------------------------------------------------------* * Main utilities class implementation *----------------------------------------------------------------------* CLASS LCL_ALV_UTL IMPLEMENTATION. METHOD SET_ALV. *-->Table type DATA: O_TABLE_NEW TYPE REF TO CL_ABAP_TABLEDESCR. TRY. *----->Get table type 获取结构类型 O_TABLE_NEW ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( IN_ALV_TAB ). CATCH CX_SY_TABLE_CREATION. ENDTRY. *--->Create table type CREATE DATA T_ALV TYPE HANDLE O_TABLE_NEW. *--->Assign structure ASSIGN T_ALV->* TO . *--->Value assign [] = IN_ALV_TAB. ENDMETHOD. "SET_ALV METHOD DISPLAY_ALV. TRY. *------>Get salv_table object with table contents CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = O_TABLE CHANGING T_TABLE = ). CATCH CX_SALV_MSG. ENDTRY. TRY. *------>Turn on the standard gui status *------>For status, please check function group: SALV_METADATA_STATUS O_TABLE->SET_SCREEN_STATUS( PFSTATUS = 'SALV_STANDARD' REPORT = SY-REPID SET_FUNCTIONS = O_TABLE->C_FUNCTIONS_ALL ). *---------Funciton process, here you can deactive some funciton *------>Get function code in alv *--->关于function的详细内容,请参考CL_SALV_FUNCTIONS_LIST O_FUNCTIONS = O_TABLE->GET_FUNCTIONS( ). O_FUNCTIONS->SET_ALL( ABAP_TRUE ). O_FUNCTIONS->SET_EXPORT_SPREADSHEET( ABAP_FALSE ). *----------------------------------------------------------------------* *---------Column process, you can determine column property as your request *-->关于column的更多选项,请参考CL_SALV_COLUMNS_TABLE O_COLUMNS = O_TABLE->GET_COLUMNS( ). O_COLUMNS->SET_OPTIMIZE( ABAP_TRUE ). *----------------------------------------------------------------------* CATCH CX_SALV_OBJECT_NOT_FOUND. ENDTRY. *-->Set display options *-->关于更多display选项,请参考CL_SALV_DISPLAY_SETTINGS O_DISPLAY = O_TABLE->GET_DISPLAY_SETTINGS( ). O_DISPLAY->SET_STRIPED_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ). *-->Edit single column property *-->下面部分相当于修改fieldcat TRY. O_COLUMN ?= O_COLUMNS->GET_COLUMN( 'EBELN' ). O_COLUMN->SET_CELL_TYPE( IF_SALV_C_CELL_TYPE=>HOTSPOT ). CATCH CX_SALV_NOT_FOUND. ENDTRY. *-->How to set currency * TRY. * O_COLUMN ?= O_COLUMNS->GET_COLUMN( 'STPRS' ). * O_COLUMN->SET_CURRENCY_COLUMN( 'T001-WAERS' ). * * CATCH CX_SALV_NOT_FOUND. * ENDTRY. *-->Set column text on display * TRY. * O_COLUMN ?= O_COLUMNS->GET_COLUMN( 'MATCH_TEXT' ). * O_COLUMN->SET_SHORT_TEXT( 'TEXT' ). * O_COLUMN->SET_MEDIUM_TEXT( 'MATCHING TEXT' ). * O_COLUMN->SET_LONG_TEXT( 'MATCHING TEXT' ). * CATCH CX_SALV_NOT_FOUND. * ENDTRY. *-->Get and set sort options O_SORTS = O_TABLE->GET_SORTS( ). O_SORTS->ADD_SORT( COLUMNNAME = 'BSART' POSITION = 1 SUBTOTAL = 'X' GROUP = IF_SALV_C_SORT=>GROUP_WITH_UNDERLINE ). O_SORTS->ADD_SORT( COLUMNNAME = 'BUKRS' POSITION = 2 GROUP = IF_SALV_C_SORT=>GROUP_WITH_UNDERLINE ). *-->Get and set aggregation options TRY. O_AGGREGATIONS = O_TABLE->GET_AGGREGATIONS( ). CATCH CX_SALV_NOT_FOUND. ENDTRY. TRY. O_AGGREGATIONS->ADD_AGGREGATION( 'WKURS' ). CATCH CX_SALV_NOT_FOUND CX_SALV_DATA_ERROR CX_SALV_EXISTING. "#EC NO_HANDLER ENDTRY. *-->Get events for list O_EVENTS = O_TABLE->GET_EVENT( ). *-->Set handler for ALV events *-->注册事件 SET HANDLER: ME->ON_LINK_CLICK FOR O_EVENTS, ME->ON_DOUBLE_CLICK FOR O_EVENTS, ME->ON_USER_COMMAND FOR O_EVENTS. *-->Display whole list O_TABLE->DISPLAY( ). ENDMETHOD. "display_alv *---------------------------------------------------------------------* * 以下部分可以根据自己的功能需要修改 *---------------------------------------------------------------------* METHOD ON_LINK_CLICK. *-->这里为具体的数据处理,注意要定义自己的alv显示结构 DATA: ITAB TYPE TABLE OF EKKO. FIELD-SYMBOLS LIKE LINE OF ITAB. *-->Assign display table value ITAB[] = []. *-->Get selected row READ TABLE ITAB ASSIGNING INDEX ROW. CHECK SY-SUBRC = 0. IF -EBELN IS NOT INITIAL. *---->Hotspot click SET PARAMETER ID 'BES' FIELD -EBELN. CALL TRANSACTION 'ME23N'. ENDIF. UNASSIGN . ENDMETHOD. "on_single_click METHOD ON_DOUBLE_CLICK. *-->Do something on double click events ENDMETHOD. "on_double_click METHOD ON_USER_COMMAND. *-->Do something on double click events CASE E_SALV_FUNCTION. WHEN 'MYFUNCTION'. "ADD *---Add you own cotrol code WHEN 'MYREFRESH'. "REFRESH Contents *---Add you own cotrol code and then CALL METHOD O_TABLE->REFRESH( ). WHEN OTHERS. ENDCASE. ENDMETHOD. "on_user_command ENDCLASS. "lcl_alv IMPLEMENTATIONDefining Objects
How to use utilities as below:
*&---------------------------------------------------------------------* *& Report ZBOBO_SALV_DEMO *& *&---------------------------------------------------------------------* *& Desc: Demo on how to use ZBOBO_SALV_UTILITIES *& *&---------------------------------------------------------------------* REPORT ZBOBO_SALV_DEMO. * Include the utilities INCLUDE: ZBOBO_SALV_UTILITIES. * Define type data: itab type STANDARD TABLE OF ekko. * Define salv utilities object data: o_alv type ref to lcl_alv_utl. START-OF-SELECTION. *data extraction select * from ekko UP TO 30 ROWS into table itab. *Init object CREATE OBJECT o_alv. *Set displayed object o_alv->set_alv( in_alv_tab = itab ). *Display object o_alv->display_alv( ).
大哥,我进http://www.abaptech.com/bbs/read.php?tid-10.html 这种网址的时候,都是报
404 Error – Not found
Sorry, but you are looking for something that isn’t here.
大哥给我个邀请码吧!多多学习啊!
yangjun0519@163.com
Amiable dispatch and this post helped me alot in my college assignement. Thank you seeking your information.
this post is very usefull thx!
Welcome and thanks for your support!
Pretty nice post. I just stumbled upon your blog and wanted to say that I have really enjoyed browsing your blog posts. In any case I’ll be subscribing to your feed and I hope you write again soon!