技术开发 频道

ABAP实例:ALV例子

【IT168 技术文章】

      *----------------------------------------------------------------------
    
* Program: ZZ_ALV_REPORT_STUB
    
* Author : Clayton Mergen
    
* Date   :
    
*
    
* Purpose: Report using ALV function
    
*
    
* Notes:
    
* 1) Logos & wallpapers can be found in table BDS_CONN05
    
*    with class = PICTURES
    
*
    
* 2) Transaction OAER can be used to create PICTURES.
    
*    Run transaction OAER with class name = PICTURES, Class type = OT,
    
*    and Object key with whatever name you want to create.  In the
    
*    next screen, right clicking on screen and import
    
*
    
*----------------------------------------------------------------------
    
*                              Revisions
    
*----------------------------------------------------------------------
    
* Name    :
    
* Date    :
    
* Comments:
    
*----------------------------------------------------------------------
    report zflex004
           no standard page heading
           line
-size 200
           line
-count 65
           message
-id zz.

    
*--------------------------------
    
* Tables
    
*--------------------------------
    tables:
      ekpo,
      mara,
      trdir.
    
*--------------------------------
    
* Global Types
    
*--------------------------------
    type
-pools: slis.
    
*--------------------------------
    
* Global Internal Tables
    
*--------------------------------
    data:
      i_fieldcat_alv  type slis_t_fieldcat_alv,
      i_events        type slis_t_event,
      i_event_exit    type slis_t_event_exit,
      i_list_comments type slis_t_listheader,
      i_excluding     type slis_t_extab.

    
* Display data
    data: begin of i_data occurs
0,
              matnr like mara
-matnr,
              mtart like mara
-mtart,
          end of i_data.

    
*--------------------------------
    
* Global Variables
    
*--------------------------------
    data:
      w_variant          like disvariant,  
"显示变式结构
      wx_variant         like disvariant,
      w_variant_save(
1)  type c,
      w_exit(
1)          type c,
      w_repid            like sy
-repid,  "abap程序,当前主程序
      w_user_specific(1) type c,
      w_callback_ucomm   type slis_formname,  
"字符型
      w_print            type slis_print_alv,  "类型组
      w_layout           type slis_layout_alv, "类型组
      w_html_top_of_page type  slis_formname,  "字符型
      w_fieldcat_alv     like line of i_fieldcat_alv,
      w_excluding        like line of i_excluding,
      w_events           like line of i_events,
      w_event_exit       like line of i_event_exit,
      w_list_comments    like line of i_list_comments.

    
*--------------------------------
    
* Global Constants
    
*--------------------------------
    
*constants:

    
*--------------------------------
    
* Selection Screen
    
*--------------------------------
    selection
-screen begin of block blk_criteria with frame title text-f01.
    select
-options:
      s_name
for trdir-name.                 "程序名
    selection-screen end of block blk_criteria.

    selection
-screen begin of block blk_params with frame title text-f02.
    parameters:
      p_vari like disvariant
-variant.    "格式
    selection-screen skip 1.
    parameters:
      p_grid radiobutton group rb01
default 'X',
      p_html as checkbox.
    selection
-screen skip 1.
    parameters:
      p_list radiobutton group rb01.
    selection
-screen end of block blk_params.

    
*--------------------------------
    
* Initialization
    
*--------------------------------
    initialization.
      perform init_variant.  
"初始化
      perform variant_default using p_vari.

      clear: s_name[].
      s_name
-sign   = 'I'.
      s_name
-option = 'CP'.
      s_name
-low    = 'Z*'.
      append s_name.

    
*--------------------------------
    
* At Selection Screen PBO
    
*--------------------------------
    at selection
-screen output.

    
*----------------------------------
    
* At Selection Screen Value Request
    
*----------------------------------
    at selection
-screen on value-request for p_vari.
      perform variant_f4 using p_vari.  
"不管

    
*--------------------------------
    
* At Selection Screen
    
*--------------------------------
    at selection
-screen.
      perform variant_fill.  
"不管

    
*--------------------------------
    
* Start of Selection
    
*--------------------------------
    start
-of-selection.
      perform get_data.  
"从表mara中取相应字段到i_data

    end
-of-selection.
      perform fieldcat_build.
      perform event_build.
      perform event_exit_build.
      perform exclude_build.
      perform print_build.
      perform layout_build.
      perform display_data.

    
*--------------------------------
    
* Top of Page
    
*--------------------------------
    top
-of-page.

    
*--------------------------------
    
* Top of Page During Line Sel
    
*--------------------------------
    top
-of-page during line-selection.

    
*--------------------------------
    
* At User Command
    
*--------------------------------
    at user
-command.
    
*--------------------------------
    
* At Line Selection
    
*--------------------------------
    at line
-selection.

    
*--------------------------------
    
* Macros
    
*--------------------------------
      define skip_1.
        write:
/001 sy-vline,
                    at sy
-linsz sy-vline.
      end
-of-definition.

    
*----------------------------------------------------------------------
    
*                                 Forms
    
*----------------------------------------------------------------------
    
*&---------------------------------------------------------------------*
    
*&      Form  variant_f4
    
*&---------------------------------------------------------------------*
    form variant_f4 using p_variant.

      call function
'LVC_VARIANT_F4'
           exporting
                is_variant    
= w_variant
                i_save        
= w_variant_save
           importing
                e_exit        
= w_exit
                es_variant    
= wx_variant
           exceptions
                not_found    
= 1
                program_error
= 2
                others        
= 3.

      
if sy-subrc <> 0.
        message i000(zz) with text
-g01.
      endif.

      
if w_exit is initial.
        w_variant
-variant = wx_variant-variant.
        p_variant        
= wx_variant-variant.
      endif.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  init_variant
    
*&---------------------------------------------------------------------*
    form init_variant.

      clear: w_variant.
      w_repid              
= sy-repid.
      w_variant
-report     = w_repid.
      w_variant
-username   = sy-uname.
      w_variant_save      
= 'A'. "All types

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  variant_default
    
*&---------------------------------------------------------------------*
    form variant_default using p_variant.

      wx_variant
= w_variant.

      
if not p_variant is initial.
        wx_variant
-variant = p_variant.
      endif.

      call function
'LVC_VARIANT_DEFAULT_GET'
           exporting
                i_save        
= w_variant_save
           changing
                cs_variant    
= wx_variant
           exceptions
                wrong_input  
= 1
                not_found    
= 2
                program_error
= 3
                others        
= 4.

      
case sy-subrc.
        when
0.
          p_variant
= wx_variant-variant.
        when
2.
          clear: p_variant.
      endcase.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  variant_fill
    
*&---------------------------------------------------------------------*
    form variant_fill.

      clear: w_variant.

      
if p_vari is initial.
        w_variant
-variant = 'STANDARD'.
        w_variant
-report  = w_repid.
      
else.

        w_variant
-variant = p_vari.
        w_variant
-report  = w_repid.

        call function
'LVC_VARIANT_EXISTENCE_CHECK'
             exporting
                  i_save    
= w_variant_save
             changing
                  cs_variant
= w_variant
             exceptions
                  others    
= 01.
        
if sy-subrc ne 0.
          message i000(zz) with text
-g02.
        endif.
      endif.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  fieldcat_build
    
*&---------------------------------------------------------------------*
    form fieldcat_build.

      call function
'REUSE_ALV_FIELDCATALOG_MERGE'
           exporting
                i_program_name    
= w_repid
    
*           i_structure_name   = 'TRDIR'
                i_internal_tabname
= 'I_DATA'
                i_inclname        
= w_repid
           changing
                ct_fieldcat        
= i_fieldcat_alv.

    
* Modify displayed fields
      loop at i_fieldcat_alv into w_fieldcat_alv.
        
case w_fieldcat_alv-fieldname.
          when
'NAME'.
            w_fieldcat_alv
-hotspot   = 'X'.
          when
'MYFIELD'.
            w_fieldcat_alv
-checkbox  = 'X'.
            w_fieldcat_alv
-seltext_s = 'MyChkBox'.
          when others.
        endcase.

        modify i_fieldcat_alv from w_fieldcat_alv.
      endloop.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  display_data
    
*&---------------------------------------------------------------------*
    form display_data.

      w_callback_ucomm  
= 'CALLBACK_UCOMM'.

      
case 'X'.
        when p_grid.
          
if p_html = 'X'.
            w_html_top_of_page
= 'HTML_TOP_OF_PAGE'.
          endif.

          call function
'REUSE_ALV_GRID_DISPLAY'
               exporting
    
*               i_background_id             = 'SIWB_WALLPAPER'
                    i_background_id            
= 'SIWB_WALLPAPER'
                    i_callback_program          
= w_repid
                    i_callback_html_top_of_page
= w_html_top_of_page
    
*               i_structure_name            = 'TRDIR'
                    i_default                  
= 'X'
                    i_save                      
= 'A'
                    is_variant                  
= w_variant
                    is_layout                  
= w_layout
                    i_callback_user_command    
= w_callback_ucomm
                    it_fieldcat                
= i_fieldcat_alv
                    it_events                  
= i_events
                    it_event_exit              
= i_event_exit
                    it_excluding                
= i_excluding
                    is_print                    
= w_print
    
*               i_screen_start_column       = 1
    
*               i_screen_start_line         = 1
    
*               i_screen_end_column         = 70
    
*               i_screen_end_line           = 30
               tables
                    t_outtab                    
= i_data.

        when p_list.
          call function
'REUSE_ALV_LIST_DISPLAY'
               exporting
                    i_background_id        
= 'ALV_BACKGROUND'
                    i_callback_program      
= w_repid
                    i_default              
= 'X'
                    i_save                  
= 'A'
                    is_variant              
= w_variant
                    is_layout              
= w_layout
                    i_callback_user_command
= w_callback_ucomm
                    it_fieldcat            
= i_fieldcat_alv
                    it_events              
= i_events
                    it_event_exit          
= i_event_exit
                    is_print                
= w_print
               tables
                    t_outtab                
= i_data.
      endcase.

    endform.
    
*---------------------------------------------------------------------*
    
*       FORM user_command                                             *
    
*---------------------------------------------------------------------*
    form callback_ucomm  using r_ucomm like sy
-ucomm
                               rs_selfield type slis_selfield.

      message i000(zz) with r_ucomm.

      
case r_ucomm.
        when
'&IC1'.
          set parameter id
'RID' field rs_selfield-value.
          call transaction
'SE38'.
        when others.
      endcase.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  get_data
    
*&---------------------------------------------------------------------*
    form get_data.

      select
*  from mara
             into corresponding fields of table i_data.

    endform.
    
*---------------------------------------------------------------------*
    
*       FORM ALV_TOP_OF_PAGE                                          *
    
*---------------------------------------------------------------------*
    form alv_top_of_page.

      clear: i_list_comments[].

      w_list_comments
-typ  = 'H'. "H=Header, S=Selection, A=Action
      w_list_comments-key  = ''.
      w_list_comments
-info = 'Info 1'.
      append w_list_comments to i_list_comments.

      w_list_comments
-typ  = 'A'. " H = Header, S = Selection, A = Action
      w_list_comments-key  = ''.
      w_list_comments
-info = 'Begin of list'.
      append w_list_comments to i_list_comments.

      call function
'REUSE_ALV_COMMENTARY_WRITE'
           exporting
                i_logo            
= 'ENJOYSAP_LOGO'
                it_list_commentary
= i_list_comments.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  event_build
    
*&---------------------------------------------------------------------*
    form event_build.

      call function
'REUSE_ALV_EVENTS_GET'
           exporting
                i_list_type
= 0
           importing
                et_events  
= i_events.

      read table i_events
           with key name
= slis_ev_top_of_page
           into w_events.
      
if sy-subrc = 0.
        move
'ALV_TOP_OF_PAGE' to w_events-form.
        modify i_events from w_events index sy
-tabix.
      endif.

      read table i_events
           with key name
= slis_ev_end_of_list
           into w_events.
      
if sy-subrc = 0.
        move
'ALV_END_OF_LIST' to w_events-form.
        modify i_events from w_events index sy
-tabix.
      endif.

      read table i_events
           with key name
= slis_ev_end_of_page
           into w_events.
      
if sy-subrc = 0.
        move
'ALV_END_OF_PAGE' to w_events-form.
        modify i_events from w_events index sy
-tabix.
      endif.

    endform.
    
*---------------------------------------------------------------------*
    
*       FORM alv_end_of_list                                          *
    
*---------------------------------------------------------------------*
    form alv_end_of_list.

      clear: i_list_comments[].

      w_list_comments
-typ = 'A'. "H = Header, S = Selection, A = Action
      w_list_comments-key = ''.
      w_list_comments
-info = 'End of list'.
      append w_list_comments to i_list_comments.

      call function
'REUSE_ALV_COMMENTARY_WRITE'
           exporting
                it_list_commentary
= i_list_comments
                i_logo            
= 'ZMYOBJECTKEY'
                i_end_of_list_grid
= 'X'.

    endform.
    
*---------------------------------------------------------------------*
    
*       FORM alv_end_of_page                                          *
    
*---------------------------------------------------------------------*
    form alv_end_of_page.

    
*  clear: i_list_comments[].
    
*
    
*  w_list_comments-typ = 'A'. "H = Header, S = Selection, A = Action
    *  w_list_comments-key = ''.
    
*  w_list_comments-info = 'End of page'.
    
*  append w_list_comments to i_list_comments.
    
*
    
*  call function 'REUSE_ALV_COMMENTARY_WRITE'
    
*       exporting
    
*            it_list_commentary = i_list_comments
    
*            i_logo             = 'ZMYOBJECTKEY'
    
*            i_end_of_list_grid = 'X'.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  print_build
    
*&---------------------------------------------------------------------*
    form print_build.

      w_print
-no_print_listinfos = 'X'.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  layout_build
    
*&---------------------------------------------------------------------*
    form layout_build.

      w_layout
-zebra                = 'X'.
      w_layout
-no_vline             = 'X'.
      w_layout
-colwidth_optimize    = 'X'.
      w_layout
-detail_popup         = 'X'.
      w_layout
-detail_initial_lines = 'X'.
      w_layout
-detail_titlebar      = 'Detail Title Bar'.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  event_exit_build
    
*&---------------------------------------------------------------------*
    form event_exit_build.

      clear: i_event_exit[].

    
* Pick
      w_event_exit
-ucomm  = '&ETA'.
      w_event_exit
-before = ' '.
      w_event_exit
-after  = 'X'.
      append w_event_exit to i_event_exit.

    endform.
    
*---------------------------------------------------------------------*
    
*       FORM HTML_TOP_OF_PAGE                                         *
    
*---------------------------------------------------------------------*
    form html_top_of_page using r_top type ref to cl_dd_document.

      data:
        text     type sdydo_text_element,
        s_table  type ref to cl_dd_table_element,
        col_key  type ref to cl_dd_area,
        col_info type ref to cl_dd_area,
        a_logo   type ref to cl_dd_area.

    
* Split TOP-Document
      call method r_top
->vertical_split
                exporting split_area  
= r_top
                          split_width
= '30%'
                importing right_area  
= a_logo.

    
* Fill TOP-Document
      call method r_top
->add_text
                exporting text  
= 'Example of a Heading'
                sap_style      
= 'HEADING'.

      call method r_top
->new_line.
      call method r_top
->new_line.
      call method r_top
->add_table
                exporting no_of_columns
= 2
                          with_heading  
= ' '
                          border        
= '1'
                importing table        
= s_table.

      call method s_table
->add_column importing column = col_key.
      call method s_table
->add_column importing column = col_info.

      text
= 'A key value marked'.
      call method col_key
->add_text
                exporting text        
= text
                          sap_emphasis
= 'Strong'.

      call method col_info
->add_gap exporting width = 6.

      text
= '600' .
      call method col_info
->add_text
                exporting text      
= text
                          sap_style
= 'Key'.

      call method col_info
->add_gap  exporting width = 3.

      text
= 'Block brick units'.
      call method col_info
->add_text exporting text  = text.

      call method s_table
->new_row.

      text
= 'Storage Bin'.
      call method col_key
->add_text
                exporting text        
= text
                          sap_emphasis
= 'Strong'.

      call method col_info
->add_gap exporting width = 7.

      text
= 'C-A-004'.
      call method col_info
->add_text exporting text = text.

      call method s_table
->new_row.

      text
= 'Warehouse number' .
      call method col_key
->add_text
                exporting text        
= text
                          sap_emphasis
= 'Strong'.

      call method col_info
->add_gap  exporting width = 6.

      text
= '200' .
      call method col_info
->add_text
                exporting text      
= text
                          sap_style
= 'Success'.

      call method col_info
->add_gap  exporting width = 3.

      text
= 'marked success'.
      call method col_info
->add_text exporting text = text.

      call method s_table
->new_row.

      call method r_top
->new_line.
      text
= 'This last line is a comment in italics.'.
      call method r_top
->add_text
                exporting text        
= text
                          sap_emphasis
= 'EMPHASIS'.

      call method r_top
->new_line.
      call method a_logo
->add_picture
    
*           exporting picture_id = 'ZZTESTBMP'.
                exporting picture_id
= 'ENJOYSAP_LOGO'.

    endform.
    
*&---------------------------------------------------------------------*
    
*&      Form  exclude_build
    
*&---------------------------------------------------------------------*
    form exclude_build.

      w_excluding
= '&GRAPH'. "Graphic
      append w_excluding to i_excluding.

    endform.                    
" exclude_build
0
相关文章