OO实现ALV TABLE 八:ALV的布局功能
在ALV的輸出結(jié)果中,我們可以利用ALV提供的標(biāo)準(zhǔn)功能(過濾,排序,匯總)對(duì)輸出結(jié)果正行操作。比如說我們對(duì)一個(gè)結(jié)果進(jìn)行了排序和過濾等的動(dòng)作,下次再運(yùn)行這個(gè)報(bào)表的時(shí)候可以選擇一個(gè)功能直接運(yùn)行這些動(dòng)作。這就需要布局(Layout)的功能了。
?
1.?????? 首先我們?cè)O(shè)置布局的功能按鈕。
ls_key-report = sy-repid.
??? lr_layout = gr_table->get_layout( ).
??? lr_layout->set_key( ls_key ).
??? lr_layout->set_save_restriction(l_restrict ).
??? lr_layout->set_default( 'X' ).
??? IF p_lay IS NOT INITIAL.
????? lr_layout->set_initial_layout( p_lay).
ENDIF.
2.??????設(shè)置前臺(tái)選項(xiàng)頁面。
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.
PARAMETERS: p_lay LIKE disvariant-variant.
SELECTION-SCREEN SKIP.
PARAMETERS: p_save1 RADIOBUTTON GROUP rg DEFAULT 'X',
??????????? p_save2RADIOBUTTON GROUP rg,
??????????? p_save3RADIOBUTTON GROUP rg.
SELECTION-SCREEN END OF BLOCK blk.
3.?????? 設(shè)置前臺(tái)布局選項(xiàng)功能搜索幫助
DATA: ls_layout TYPE salv_s_layout_info,
????????? ?ls_key???TYPE salv_s_layout_key,
????????? ?l_restrict TYPE salv_de_layout_restriction.
??? l_restrict = get_restrict( ).
??? ls_key-report = sy-repid.
??? ls_layout =cl_salv_layout_service=>f4_layouts(
??? s_key???= ls_key
???restrict = l_restrict ).
layout = ls_layout-layout.
?
?
?
?
?
?
?
?
?
?
下面是效果圖
?
下面是程序的所有代碼:
REPORT? y_xin_002.
?
*變量定義
TYPES: BEGIN OF gs_spfli,
??????? mandt?????? TYPE spfli-mandt,
??????? carrid????? TYPE spfli-carrid,
??????? connid????? TYPE spfli-connid,
??????? countryfr?? TYPE spfli-countryfr,
??????? cityfrom??? TYPE spfli-cityfrom,
??????? airpfrom??? TYPE spfli-airpfrom,
??????? countryto?? TYPE spfli-countryto,
??????? cityto????? TYPE spfli-cityto,
??????? airpto????? TYPE spfli-airpto,
??????? fltime????? TYPE spfli-fltime,
??????? deptime???? TYPE spfli-deptime,
??????? arrtime???? TYPE spfli-arrtime,
??????? distance??? TYPE spfli-distance,
??????? distid????? TYPE spfli-distid,
??????? fltype????? TYPE spfli-fltype,
??????? period????? TYPE spfli-period,
END OF gs_spfli.
TYPES? ty_spfli TYPE gs_spfli OCCURS 0.
?
*選擇屏幕
SELECTION-SCREEN BEGIN OF BLOCKblk WITH FRAME.
PARAMETERS: p_lay LIKEdisvariant-variant.
SELECTION-SCREEN SKIP.
PARAMETERS: p_save1 RADIOBUTTONGROUP rg DEFAULT 'X',
??????????? p_save2 RADIOBUTTON GROUP rg,
??????????? p_save3 RADIOBUTTON GROUP rg.
SELECTION-SCREEN END OF BLOCKblk.
?
*----------------------------------------------------------------------*
*?????? CLASS lcl_alv DEFINITION
*----------------------------------------------------------------------*
*?????? ALV操作類(定義)
*----------------------------------------------------------------------*
CLASS lcl_alv DEFINITION.
? PUBLIC SECTION.
??? METHODS: getdata?????????????? "取得要顯示的數(shù)據(jù)
?????????????? RETURNING value(lt_tab) TYPEty_spfli,
???????????? alv_full????????????? "全屏Grid列表處理方法
????????? ?????IMPORTING value(lt_tab) TYPE ty_spfli.
??? CLASS-METHODS: f4_layout?????? "布局選項(xiàng)的搜索幫助
??????????????????? EXPORTINGvalue(layout)?? TYPE disvariant-variant,
?????????????????? get_restrict??? "取得約束選項(xiàng)的值
???????????????????? RETURNING value(restrict)TYPE salv_de_layout_restriction.
? PRIVATE SECTION.
??? DATA: gr_table TYPE REF TO cl_salv_table.
ENDCLASS.??????????????????? "lcl_alv DEFINITION
?
*----------------------------------------------------------------------*
*?????? CLASS lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
*?????? ALV操作類(實(shí)現(xiàn))
*----------------------------------------------------------------------*
CLASS lcl_alvIMPLEMENTATION.
*取得要顯示的數(shù)據(jù)
? METHOD getdata.
??? SELECT * INTO CORRESPONDING FIELDS OF TABLElt_tab FROM spfli.
? ENDMETHOD.??????????????????? "getdata
?
*輸出全屏網(wǎng)格列表的方法
? METHOD alv_full.
??? DATA: lr_functions? TYPE REF TO cl_salv_functions_list,
????????? lr_selections TYPE REF TO cl_salv_selections,
????????? lr_layout???? TYPE REF TO cl_salv_layout,
????????? ls_key??????? TYPE salv_s_layout_key,
????????? l_restrict??? TYPE salv_de_layout_restriction.
?
??? l_restrict = lcl_alv=>get_restrict( ).
?
??? "創(chuàng)建實(shí)例
??? TRY.
??????? cl_salv_table=>factory(
????????? IMPORTING
??????????? r_salv_table = gr_table
????????? CHANGING
??????????? t_table????? = lt_tab
??????? ).
????? CATCH cx_salv_msg.
??? ENDTRY.
??? "設(shè)置布局功能按鈕
??? ls_key-report = sy-repid.
??? lr_layout = gr_table->get_layout( ).
??? lr_layout->set_key( ls_key ).
??? lr_layout->set_save_restriction(l_restrict ).
??? lr_layout->set_default( 'X' ).
??? IF p_lay IS NOT INITIAL.
????? lr_layout->set_initial_layout( p_lay).
??? ENDIF.
??? "顯示ALV的標(biāo)準(zhǔn)功能
??? lr_functions = gr_table->get_functions().
??? lr_functions->set_all( 'X' ).
??? "
??? "顯示列表
??? gr_table->display( ).
? ENDMETHOD.??????????????????? "alv_full
?
*前臺(tái)布局選項(xiàng)搜索幫助
? METHOD f4_layout.
??? DATA: ls_layout TYPE salv_s_layout_info,
????????? ls_key??? TYPE salv_s_layout_key,
????????? l_restrict TYPEsalv_de_layout_restriction.
?
??? l_restrict = get_restrict( ).
?
??? ls_key-report = sy-repid.
?
??? ls_layout =cl_salv_layout_service=>f4_layouts(
????? s_key???= ls_key
????? restrict = l_restrict ).
?
??? layout = ls_layout-layout.
? ENDMETHOD.???????????????????????????????????????????????"f4_layout
?
*取得約束選項(xiàng)的值
? METHOD get_restrict.
??? CASE 'X'.
????? WHEN p_save1.
??????? restrict =if_salv_c_layout=>restrict_none.
????? WHEN p_save2.
??????? restrict =if_salv_c_layout=>restrict_user_dependant.
????? WHEN p_save3.
??????? restrict =if_salv_c_layout=>restrict_user_independant.
??? ENDCASE.
? ENDMETHOD.????? ??????????????"constructor
ENDCLASS.??????????????????? "lcl_alvIMPLEMENTATION
?
*&---------------------------------------------------------------------*
*&????? Form?f_main
*&---------------------------------------------------------------------*
*?????? 整合數(shù)據(jù),執(zhí)行
*----------------------------------------------------------------------*
FORM f_main.
? DATA: lt_tab TYPE ty_spfli,
??????? lr_alv TYPE REF TO lcl_alv.
?
? CREATE OBJECT lr_alv.
?
? "取得要顯示的數(shù)據(jù)
? lt_tab = lr_alv->getdata( ).
?
? lr_alv->alv_full( lt_tab ).
ENDFORM.??????????????????? "f_main
?
*布局搜索幫助
AT SELECTION-SCREEN ONVALUE-REQUEST FOR p_lay.
? CALL METHOD lcl_alv=>f4_layout
??? IMPORTING
????? layout = p_lay.
?
*執(zhí)行動(dòng)作
START-OF-SELECTION.
? PERFORM f_main.總結(jié)
以上是生活随笔為你收集整理的OO实现ALV TABLE 八:ALV的布局功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OO实现ALV TABLE 九:ALV的
- 下一篇: OO实现ALV TABLE 七:ALV的