REUSE_ALV_GRID_DISPLAY - ooxxvv/MySAPnotes GitHub Wiki

REUSE_ALV_GRID_DISPLAY

EXPORTING

i_callback_pf_status_set

  • 如果ALV要使用自行設定的工具列
  • 帶入 PERFORM 名稱,該 PERFORM 要宣告如下:
FORM alv_user_status USING rt_extab TYPE slis_t_extab.

ENDFORM.                    " alv_user_status

i_callback_user_command

  • 自行設定工具列的事件
  • 帶入 PERFORM 名稱,該 PERFORM 的範例如下:
FORM alv_user_comm USING ucomm    LIKE sy-ucomm
                         selfield TYPE slis_selfield.

  READ TABLE it_output_alv INDEX selfield-tabindex.
  CHECK sy-subrc = 0.

  CASE ucomm.
    WHEN '&IC1'.
      SET PARAMETER ID 'FOTYEAR' FIELD it_output_alv-gjahr.
      SET PARAMETER ID 'MONAT' FIELD it_output_alv-monat.
      SET PARAMETER ID 'BLN' FIELD it_output_alv-belnr.
      CALL TRANSACTION 'ZBW003_001'.

  ENDCASE.

ENDFORM.    

is_layout

  • 列寬度自動根據內容變化

|| 變數 || 型態 || 長度 || 功能 || || no_colhead || TYPE c || 1 || no headings || || no_hotspot || TYPE c || 1 || headings not as hotspot || || zebra || TYPE c || 1 || striped pattern || || no_vline || TYPE c || 1 || columns separated by space || || no_hline || TYPE c || 1 || rows separated by space B20K8A0N5D || || cell_merge || TYPE c || 1 || not suppress field replication || || edit || TYPE c || 1 || for grid only || || edit_mode || TYPE c || 1 || for grid only || || numc_sum || TYPE c || 1 || totals for NUMC-Fields possib. || || no_input || TYPE c || 1 || only display fields || || f2code || LIKE sy-ucomm || || || || reprep || TYPE c || 1 || report report interface active || || no_keyfix || TYPE c || 1 || do not fix keycolumns || || expand_all || TYPE c || 1 || Expand all positions || || no_author || TYPE c || 1 || No standard authority check || || PF-status |||||||| || def_status || TYPE c || 1 || default status space or 'A' || || item_text || TYPE c || 20 || Text for item button || || countfname || TYPE lvc_fname || || || || Display options |||||||| || colwidth_optimize || TYPE c || 1 || 自動調整欄位寬度 || || no_min_linesize || TYPE c || 1 || line size=width of the list || || min_linesize || LIKE sy-linsz || || if initial min_linesize=80 || || max_linesize || LIKE sy-linsz || || Default 250 || || window_titlebar || LIKE sy-title || || || || no_uline_hs || TYPE c || 1 || || || Exceptions |||||||| || lights_fieldname || TYPE slis_fieldname || || fieldname for exception || || lights_tabname || TYPE slis_tabname || || fieldname for exception || || lights_rollname || LIKE dfies-rollname || || rollname f. exceptiondocu || || lights_condense || TYPE c || 1 || fieldname for exception || || Sums |||||||| || no_sumchoice || TYPE c || 1 || no choice for summing up || || no_totalline || TYPE c || 1 || no total line || || no_subchoice || TYPE c || 1 || no choice for subtotals || || no_subtotals || TYPE c || 1 || no subtotals possible || || no_unit_splitting || TYPE c || 1 || no sep. tot.lines by inh.units || || totals_before_items || TYPE c || 1 || diplay totals before the items || || totals_only || TYPE c || 1 || show only totals || || totals_text || TYPE c || 60 || text for 1st col. in total line || || subtotals_text || TYPE c || 60 || text for 1st col. in subtotals || || Interaction |||||||| || box_fieldname || TYPE slis_fieldname || || fieldname for checkbox || || box_tabname || TYPE slis_tabname || || tabname for checkbox || || box_rollname || LIKE dd03p-rollname || || rollname for checkbox || || expand_fieldname || TYPE slis_fieldname || || fieldname flag 'expand' || || hotspot_fieldname || TYPE slis_fieldname || || fieldname flag hotspot || || confirmation_prompt, || || || confirm. prompt when leaving || || key_hotspot || TYPE c || 1 || keys as hotspot || || flexible_key || TYPE c || 1 || key columns movable,... || || group_buttons || TYPE c || 1 || buttons for COL1 - COL5 || || get_selinfos || TYPE c || 1 || read selection screen || || group_change_edit || TYPE c || 1 || Settings by user for new group || || no_scrolling || TYPE c || 1 || no scrolling || || Detailed screen |||||||| || detail_popup || TYPE c || 1 || show detail in popup || || detail_initial_lines || TYPE c || 1 || show also initial lines || || detail_titlebar || LIKE sy-title || || Titlebar for detail || || Display variants |||||||| || header_text || TYPE c || 20 || Text for header button || || default_item || TYPE c || 1 || Items as default || || colour |||||||| || info_fieldname || TYPE slis_fieldname || || infofield for listoutput || || coltab_fieldname || TYPE slis_fieldname || || colors || || others |||||||| || list_append || TYPE c || 1 || no call screen || || xifunckey || TYPE aqs_xikey || || eXtended interaction(SAPQuery) || || xidirect || TYPE flag || || eXtended INTeraction(SAPQuery) || || dtc_layout || TYPE dtc_s_layo || || Layout for configure the Tabstip || || allow_switch_to_list || TYPE c || 1 || ACC/ Switch from FullGrid to List ||

it_fieldcat

  • 各資料欄位的內容相關設定

it_sort

  • 如果有排序和分類匯總,需要該行

i_save

  • 空白表示無法儲存 variant (ALV 的 layout)
  • 若要有儲存 Variant 的功能,要設成 'A',而且要帶入 「i_callback_program」這個變數。

is_variant

  • 將預先設定好的 layout 帶入
  • LIKE disvariant
  • 要使用此功能,則 i_save 參數不可為空白
  • 最少需帶入 disvariant-report (程式名稱), disvariant-variant (layout 設定名稱,可留空白)
  • disvariant-variant 的 F4 功能可用 REUSE_ALV_VARIANT_F4 來達成

i_callback_top_of_page

  • 設定 ALV 的 top-of-page 的 perform 名稱
  • 在所設定的 perform 中,需用 REUSE_ALV_COMMENTARY_WRITE 的方式來輸出表頭文字

i_callback_html_top_of_page

  • 設定 ALV 的 top-of-page 的 perform 名稱 (HTML 格式)
  • 如果需要表頭,表頭其實完全可以是一個html文件,自己使用html語言進行格式控制

IMPORTING

TABLES

t_outtab

  • 要顯示資料的 internal table

EXCEPTIONS

程式碼

REPORT  zjoeytest.
**************************************************
*使用 REUSE_ALV_GRID_DISPLAY 實作 ALV 的簡單範例
**************************************************
*------引用在SAP上預設的 Data Pool,已預先定義好所有ALV所需之變數型態
TYPE-POOLS: slis.
*------宣告變數
DATA: fieldcat    TYPE slis_t_fieldcat_alv,
      fieldcat_ln LIKE LINE OF fieldcat,
      sortcat     TYPE slis_t_sortinfo_alv,
      sortcat_ln  LIKE LINE OF sortcat,
      lw_layout   TYPE slis_layout_alv,
      pgm         LIKE sy-repid.

DATA: col_pos TYPE i.
*------宣告要顯示的Internal Table
DATA: BEGIN OF ivbap OCCURS 0,
        vbeln       LIKE vbap-vbeln,
        matnr       LIKE vbap-matnr,
        matkl       LIKE vbap-matkl,
        rowcolor(4) TYPE c,  "用來儲存這項資料在 ALV 中的底色
   END OF ivbap.

*------將資料存入 Internal Table
SELECT vbeln posnr matnr matkl kwmeng vrkme
  INTO CORRESPONDING FIELDS OF TABLE ivbap
  FROM vbap UP TO 100 ROWS
  WHERE vbeln NE space.

LOOP AT ivbap.
  IF sy-tabix EQ 10.
*---設定底色
    ivbap-rowcolor = 'C100'.
    MODIFY ivbap.
  ENDIF.
ENDLOOP.

*---將底色設定的 Fieldname 存入設定中
lw_layout-info_fieldname = 'ROWCOLOR'.

*------設定要顯示欄位的相關屬性 ( Field Catalogs )
ADD 1 TO col_pos.
*------------在 Dictionary 中所關連的 TABLE 名稱
fieldcat_ln-ref_tabname = 'VBAP'.
*------------在 ALV 中表格的名稱
fieldcat_ln-tabname     = 'IVBAP'.
*------------在 ALV 中欄位的名稱 field name
fieldcat_ln-fieldname   = 'VBELN'.
*------------是否為 key
fieldcat_ln-key         = 'X'.
*------------是否要計算總合
fieldcat_ln-do_sum      = space.
*------------欄位排列的順序
fieldcat_ln-col_pos     = col_pos.
*------------是否要隱藏此欄位
fieldcat_ln-no_out      = space.
*------------指定此欄位的 quantity (在 Internal Table 中的名稱)
fieldcat_ln-qfieldname  = space.
*------------此欄位是否要改變滑鼠游標
fieldcat_ln-hotspot     = 'X'.
APPEND fieldcat_ln TO fieldcat.

ADD 1 TO col_pos.
fieldcat_ln-ref_tabname = 'VBAP'.
fieldcat_ln-tabname     = 'IVBAP'.
fieldcat_ln-fieldname   = 'MATNR'.
fieldcat_ln-key         = space.
fieldcat_ln-do_sum      = space.
fieldcat_ln-col_pos     = col_pos.
fieldcat_ln-no_out      = space.
fieldcat_ln-qfieldname  = space.
fieldcat_ln-hotspot     = space.
APPEND fieldcat_ln TO fieldcat.

ADD 1 TO col_pos.
fieldcat_ln-ref_tabname = 'VBAP'.
fieldcat_ln-tabname     = 'IVBAP'.
fieldcat_ln-fieldname   = 'MATKL'.
fieldcat_ln-key         = space.
fieldcat_ln-do_sum      = space.
fieldcat_ln-col_pos     = col_pos.
fieldcat_ln-no_out      = space.
fieldcat_ln-qfieldname  = space.
fieldcat_ln-hotspot     = space.
APPEND fieldcat_ln TO fieldcat.

*------設定預設的排序方式
*------------排列的優先順序
sortcat_ln-spos      = '1'.
*------------要排列的欄位(Internal Table)
sortcat_ln-fieldname = 'MATNR'.
*------------是否昇冪
sortcat_ln-up        = 'X'.
*------------是否降冪
sortcat_ln-down      = space.
*------------此欄位是否要小計
sortcat_ln-subtot    = 'X'.
APPEND sortcat_ln TO sortcat.

*------呼叫ALV Function Module
pgm = sy-repid.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_callback_program      = pgm
    i_callback_user_command = 'USER_COMMAND'
    it_fieldcat             = fieldcat
    it_sort                 = sortcat
    i_save                  = 'A'
    is_layout               = lw_layout
  TABLES
    t_outtab                = ivbap
  EXCEPTIONS
    program_error           = 1
    OTHERS                  = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

*------User按鍵處理事件的程式碼
FORM user_command USING ucomm LIKE sy-ucomm
 selfield TYPE slis_selfield.
  READ TABLE ivbap INDEX selfield-tabindex.
  CHECK sy-subrc = 0.

  CASE ucomm.
    WHEN '&IC1'.
      CASE selfield-sel_tab_field.
        WHEN 'IVBAP-VBELN'.
          SET PARAMETER ID 'AUN' FIELD ivbap-vbeln.
          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
        WHEN 'IVBAP-MATNR'.
          SET PARAMETER ID 'MAT' FIELD ivbap-matnr.
          CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
      ENDCASE.

  ENDCASE.

ENDFORM. "USER_COMMAND