博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ALV例子

Posted on 2007-11-01 12:28  wiele  阅读(1390)  评论(1编辑  收藏  举报
  *----------------------------------------------------------------------
* 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
databegin 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(1type 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