ABAP學習(10):ALV顯示之function alv


ABAP的ALV

1、Function ALV

    調用function,傳入要顯示的內表,顯示樣式等參數,顯示alv。

    可以調用REUSE_ALV_GRID_DISPLAY這個function,也可以調用REUSE_ALV_GRID_DISPLAY_LVC這個function,輸入的參數一致,但是一些細節傳入參數類型不同。

REUSE_ALV_GRID_DISPLAY調用示例:

"調用function,顯示alv

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

* EXPORTING

*   I_INTERFACE_CHECK                 = ' '

*   I_BYPASSING_BUFFER                = ' '

*   I_BUFFER_ACTIVE                   = ' '

*   I_CALLBACK_PROGRAM                = ' '

*   I_CALLBACK_PF_STATUS_SET          = ' '

*   I_CALLBACK_USER_COMMAND           = ' '

*   I_CALLBACK_TOP_OF_PAGE            = ' '

*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '

*   I_CALLBACK_HTML_END_OF_LIST       = ' '

*   I_STRUCTURE_NAME                  =

*   I_BACKGROUND_ID                   = ' '

*   I_GRID_TITLE                      =

*   I_GRID_SETTINGS                   =

*   IS_LAYOUT                         =

*   IT_FIELDCAT                       =

*   IT_EXCLUDING                      =

*   IT_SPECIAL_GROUPS                 =

*   IT_SORT                           =

*   IT_FILTER                         =

*   IS_SEL_HIDE                       =

*   I_DEFAULT                         = 'X'

*   I_SAVE                            = ' '

*   IS_VARIANT                        =

*   IT_EVENTS                         =

*   IT_EVENT_EXIT                     =

*   IS_PRINT                          =

*   IS_REPREP_ID                      =

*   I_SCREEN_START_COLUMN             = 0

*   I_SCREEN_START_LINE               = 0

*   I_SCREEN_END_COLUMN               = 0

*   I_SCREEN_END_LINE                 = 0

*   I_HTML_HEIGHT_TOP                 = 0

*   I_HTML_HEIGHT_END                 = 0

*   IT_ALV_GRAPHICS                   =

*   IT_HYPERLINK                      =

*   IT_ADD_FIELDCAT                   =

*   IT_EXCEPT_QINFO                   =

*   IR_SALV_FULLSCREEN_ADAPTER        =

* IMPORTING

*   E_EXIT_CAUSED_BY_CALLER           =

*   ES_EXIT_CAUSED_BY_USER            =

  TABLES

    T_OUTTAB                          = t_outtab

  EXCEPTIONS

   PROGRAM_ERROR                     = 1

   OTHERS                            = 2.
View Code

 REUSE_ALV_GRID_DISPLAY_LVC調用示例:

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'

* EXPORTING

*   I_INTERFACE_CHECK                 = ' '

*   I_BYPASSING_BUFFER                =

*   I_BUFFER_ACTIVE                   =

*   I_CALLBACK_PROGRAM                = ' '

*   I_CALLBACK_PF_STATUS_SET          = ' '

*   I_CALLBACK_USER_COMMAND           = ' '

*   I_CALLBACK_TOP_OF_PAGE            = ' '

*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '

*   I_CALLBACK_HTML_END_OF_LIST       = ' '

*   I_STRUCTURE_NAME                  =

*   I_BACKGROUND_ID                   = ' '

*   I_GRID_TITLE                      =

*   I_GRID_SETTINGS                   =

*   IS_LAYOUT_LVC                     =

*   IT_FIELDCAT_LVC                   =

*   IT_EXCLUDING                      =

*   IT_SPECIAL_GROUPS_LVC             =

*   IT_SORT_LVC                       =

*   IT_FILTER_LVC                     =

*   IT_HYPERLINK                      =

*   IS_SEL_HIDE                       =

*   I_DEFAULT                         = 'X'

*   I_SAVE                            = ' '

*   IS_VARIANT                        =

*   IT_EVENTS                         =

*   IT_EVENT_EXIT                     =

*   IS_PRINT_LVC                      =

*   IS_REPREP_ID_LVC                  =

*   I_SCREEN_START_COLUMN             = 0

*   I_SCREEN_START_LINE               = 0

*   I_SCREEN_END_COLUMN               = 0

*   I_SCREEN_END_LINE                 = 0

*   I_HTML_HEIGHT_TOP                 =

*   I_HTML_HEIGHT_END                 =

*   IT_ALV_GRAPHICS                   =

*   IT_EXCEPT_QINFO_LVC               =

*   IR_SALV_FULLSCREEN_ADAPTER        =

*   I_YCBN                            =

* IMPORTING

*   E_EXIT_CAUSED_BY_CALLER           =

*   ES_EXIT_CAUSED_BY_USER            =

  TABLES

    T_OUTTAB                          = t_outtab

  EXCEPTIONS

    PROGRAM_ERROR                     = 1

    OTHERS                            = 2.
View Code

 

1.1、Function參數解析

I_INTERFACE_CHECK:檢查接口一致性,默認Space;

I_BYPASSING_BUFFER:是否使用緩存buffer,類型:字符型1;

I_BUFFER_ACTIVE:是否激活緩存;

I_CALLBACK_PROGRAM:調用alv程序名,一般就是當前程序,sy-repid,類型:sy-repid,默認Space;

I_CALLBACK_PF_STATUS_SET:ALV工具欄Subroutine, ALV屏幕菜單,此參數允許報表展現用戶自定義的屏幕菜單,類型:SLIS_FORMNAME,默認Space,

I_CALLBACK_USER_COMMAND:ALV user Command Subroutine(子程序),類型:SLIS_FORMNAME,默認Space;

I_CALLBACK_TOP_OF_PAGE:ALV抬頭內容信息,類型:SLIS_FORMNAME,默認Space;

I_CALLBACK_HTML_TOP_OF_PAGE:ALV HTML格式抬頭內容信息,類型:SLIS_FORMNAME,默認Space;

I_CALLBACK_HTML_END_OF_LIST:ALV HTML格式頁腳內容信息,類型:SLIS_FORMNAME,默認Space;

I_STRUCTURE_NAME:為輸出表數據結構的命名,類型:DD02L-TABNAME;

I_BACKGROUND_ID:ALV背景圖片Object ID,類型:SDYDO_KEY,默認Space;

I_GRID_TITLE: ALV 標題,類型:LVC_TITLE;

I_GRID_SETTINGS:GRID設置信息,類型:LVC_S_GLAY;

IS_LAYOUT_LVC:ALV輸出布局樣式,類型:LVC_S_LAYO;

IT_FIELDCAT_LVC:設定顯示的欄位名稱及輸出設定,類型:LVC_T_FCAT;

IT_EXCLUDING:隱藏設置的ALV工具欄,未激活的功能碼,類型:SLIS_T_EXTAB;

IT_SPECIAL_GROUPS_LVC:若內表中一些字段通過SP_GROUP被分組在一起,必須為這些組傳遞組文本內表,類型:LVC_T_SGRP;

IT_SORT_LVC:ALV排序,類型:LVC_T_SORT;

IT_FILTER_LVC:ALV過濾器,類型:LVC_T_FILT;

IT_HYPERLINK:超鏈接,類型:LVC_T_HYPE;

IS_SEL_HIDE:替換或修改屏幕中select-option的值,類型:SLIS_SEL_HIDE_ALV;

I_DEFAULT:用戶是否可以定義默認布局,Space-不可以定義默認布局 (默認:X);

I_SAVE: 保存表格布局,’X'-只能保存全局變式;’U'-只能保存特定變式;’A'-都可以保存;Space-不能保存變式 (默認:space);

IS_VARIANT:表格布局變式,類型:DISVARIANT;

IT_EVENTS:設置事件,類型為slis_t_event的內表(name:事件名稱,form:事件的FORM),類型:SLIS_T_EVENT;

IT_EVENT_EXIT:設置回調的方法的執行行為,表明用戶所寫的代碼是在執行標准執行之前還是之后,類型:SLIS_T_EVENT_EXIT;

IS_PRINT_LVC:打印信息,類型:LVC_S_PRNT;

IS_REPREP_ID_LVC:re/re接口初始化信息,類型:LVC_S_RPRP;

I_SCREEN_START_COLUMN:對話框形式顯示開始列,默認:0;

I_SCREEN_START_LINE:對話框形式顯示開始行,默認:0;

I_SCREEN_END_COLUMN:對話框形式顯示結束列,默認:0;

I_SCREEN_END_LINE:對話框形式顯示結束行,默認:0;

I_HTML_HEIGHT_TOP:HTML抬頭的高度,類型:I;

I_HTML_HEIGHT_END: HTML頁腳的高度,類型:I;

IT_ALV_GRAPHICS:是否可以在圖表中顯示ALV,類型:DTC_T_TC;

IT_EXCEPT_QINFO_LVC:Exception的信息,類型:SLIS_T_QINFO_ALV;

IR_SALV_FULLSCREEN_ADAPTER:類型:CL_SALV_FULLSCREEN_ADAPTER;

I_YCBN:類型:char1;

 

1.2、自定義屏幕菜單

    使用I_CALLBACK_PF_STATUS_SET參數,可以設置自定義屏幕菜單。

設置步驟:

1.創建自定義status。

 

2.設置自定義菜單的子程序form

示例:

"自定義屏幕菜單
form my_pf_status USING p_extab TYPE slis_t_extab.
  set PF-STATUS 'ALV_STATUS'.
endform.

3.設置function輸入參數I_CALLBACK_PF_STATUS_SET等於子程序名,form的名字必須大寫,不然識別不了。

示例:

 I_CALLBACK_PF_STATUS_SET  = 'MY_PF_STATUS'

 

標准菜單欄

1、沒有自定義按鈕時候,顯示ALV標准的工具欄;

2、當我們使用自定義按鈕后,ALV自帶的標准按鈕,則會失效,這時需要將一些必要的按鈕在工具條補上;

3、其中 “分隔符” 的插入方法為:選擇菜單:Edit->Insert-> Separator line 即可插入分隔符;

4、可以快速拷貝標准程序的菜單欄,再進行修改、篩選;

通過se80,Repository Information System -> Program Library -> Program Subobjects->GUI Status;

查找Program Name:SAPLKKBL;

 

查找STANDARD 或 STANDARD_FULLSCREEN;

 

也可以直接通過Repository Browser查找Function Group :KKBL,GUI Status:Standard

 

選擇Standard,右鍵copy,要copy到的Program,Status名字。

標准Toolbar:

 

 

1.3、用戶操作響應

    當用戶點擊菜單欄,點擊自定義按鈕等操作,響應這些操作。

使用參數I_CALLBACK_USER_COMMAND,設置用戶操作響應的子程序。

    雙擊顯示明細:使用REUSE_ALV_GRID_DISPLAY_LVC 時,會發現使用 REUSE_ALV_GRID_DISPLAY 時的雙擊顯示行明細功能沒有了,這是SAP標准程序決定的,REUSE_ALV_GRID_DISPLAY_LVC 已經取消了雙擊顯示行明細功能。我們可以監聽雙擊的function code:‘&IC1’,執行標准的顯示明細function code。

示例:

I_CALLBACK_USER_COMMAND           = 'MY_USER_COMMAND'

對應的Form子程序:

"用戶操作響應,R_UCOMM 用戶操作,RS_SELFIELD 選擇或點擊的行列信息
form my_user_command USING R_UCOMM LIKE SY-UCOMM
               RS_SELFIELD TYPE SLIS_SELFIELD.

  "將ALV顯示數據更新進輸出內表中  
DATA: LR_GRID TYPE  REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = LR_GRID. CALL METHOD LR_GRID->CHECK_CHANGED_DATA. RS_SELFIELD-REFRESH = 'X'. " REFESH ALV "用戶操作 CASE R_UCOMM. WHEN '&IC1'. "雙擊顯示明細 R_UCOMM = '&ETA'. "調用系統功能,查看明細 ENDCASE. endform.

 

1.4、alv抬頭標題信息

    I_CALLBACK_TOP_OF_PAGE 與 I_CALLBACK_HTML_TOP_OF_PAGE 參數屬性都用於書寫 ALV抬頭標題信息,只是區別在於后者支持 HTML格式;

    參數類型:SLIS_FORMNAME,也與 I_CALLBACK_PF_STATUS_SET 參數一樣,為定義的子FORM,不顯式調用。

    I_CALLBACK_HTML_TOP_OF_PAGE ,需要配合CL_DD_DOCUMENT(動態文本類)來顯示HTML格式。

    I_CALLBACK_TOP_OF_PAGE ,需要配合REUSE_ALV_COMMENTARY_WRITE函數輸出抬頭或頁腳信息。

     使用REUSE_ALV_COMMENTARY_WRITE函數的參數I_LOGO可以設置表頭顯示圖片,通過Tcode:OAER,Class name:PICTURES,Class Type:OT,Object key:圖片id,通過這個id可以訪問到這張圖片,I_LOGO = object key。

 

 選擇Screen,雙擊,出現文件選擇彈窗,選擇要上傳圖片,點擊確認。

 

示例:

I_CALLBACK_TOP_OF_PAGE            = 'MY_TOP_OF_PAGE' 
I_CALLBACK_HTML_TOP_OF_PAGE       = 'MY_HTML_TOP_OF_PAGE'

 

 對應設置alv抬頭的Form子程序:

"使用I_CALLBACK_TOP_OF_PAGE,alv抬頭信息
form my_top_of_page.
  "保存表頭顯示信息
  DATA:header TYPE SLIS_T_LISTHEADER.
  DATA:wa_header LIKE LINE OF header.

  wa_header-typ = 'H'.   " H = Header, S = Selection, A = Action
  wa_header-info = '這是頭'.
  APPEND wa_header TO header.
  clear wa_header.

  "參數IT_LIST_COMMENTARY,顯示文字內容
  "參數I_LOGO ,顯示圖片id,使用OAER上傳圖片
  "參數I_END_OF_LIST_GRID,頁腳信息
  "參數I_ALV_FORM,是否用於alv form中
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY       = header
*     I_LOGO                   =               "圖片id,
*     I_END_OF_LIST_GRID       =
*     I_ALV_FORM               =
      .
endform.

 

對應設置alv抬頭的Form子程序:

"使用I_CALLBACK_HTML_TOP_OF_PAGE,alv抬頭信息
form my_html_top_of_page USING p_cl_dd_document TYPE REF TO cl_dd_document.

 DATA:pos TYPE I.
 "html_insert,這個方法顯示棄用
 CALL METHOD p_cl_dd_document->html_insert
    EXPORTING
      contents = '這是頭'
   CHANGING
      position = pos.
endform.

 

1.5、I_GRID_TITLE小標題

    使用I_GRID_TITLE參數可以設置alv的小標題,這個表題顯示在alv表頭之下。

示例:

"小標題

DATA:my_grid_titile TYPE lvc_title VALUE '小標題'.

I_GRID_TITLE = my_grid_titile

 

1.6、I_GRID_SETTINGS參數

    I_GRID_SETTINGS這個參數用來設置GRID相關配置,單元格編輯回調。參數數據類型:LVC_S_GLAY。

    LVC_S_GLAY是內表結構類型,

COLL_TOP_P:最小TOP_OF_PAGE;

COLL_END_L:最小END_OF_LIST;

TOP_P_ONLY:僅打印TOP_OF_PAGE;

EOL_P_ONLY:僅打印END_OF_LIST;

NO_COLWOPT:打印時不優化列寬;

EDT_CLL_CB:是否退出當前編輯單元格時回調,是等於‘X’;

示例:

"GRID配置
DATA:my_grid_settings TYPE LVC_S_GLAY.
"響應輸入enter回調函數
my_grid_settings-EDT_CLL_CB = 'X'. "允許回調ALV control: Callback when leaving an edited cell

 

1.7、Layout設置

LS_LAYOUT_LVC參數設置layout,alv輸出格式,可以設置也可不設值。

Function REUSE_ALV_GRID_DISPLAY_LVC 使用的就是LS_LAYOUT_LVC這個參數,參數類型:lvc_s_layo。

Function REUSE_ALV_GRID_DISPLAY 使用的是IS_LAYOUT這個參數,數據類型為slis_layout_alv。

示例:

"alv的layout設置,REUSE_ALV_GRID_DISPLAY使用
DATA:my_layout TYPE slis_layout_alv.
"alv的layout設置,REUSE_ALV_GRID_DISPLAY_LVC使用
DATA:my_layout_lvc TYPE lvc_s_layo.

LVC_S_LAYO屬性:

ZEBRA:是否使用間隔條紋顏色顯示alv,是‘X’,否為space;

EDIT:是否可編輯,是‘X’,否為Space,單元格編輯控制字段STYLEFNAME需要EDIT字段配合才能實現每個單元格編輯控制;

EDIT_MODE:編輯模式,數據類型:Char1;

NO_KEYFIX:是否關鍵詞不固定,隨着滾動條滾動,是‘X’,否為Space;

CWIDTH_OPT:是否自動優化列寬,是為‘X’,否為Space;

FRONTEND: ALV控件:Excel,Crystal或ALV,數據類型:Char1;

LANGUAGE:語言標志,數據類型:LANG

NO_HGRIDLN:是否隱藏水平線是為‘X’,否為space;

NO_VGRIDLN:是否隱藏垂直線是為‘X’,否為space;

NO_HEADERS:是否隱藏列抬頭是為‘X’,否為space;

NO_MERGING:單元格合並禁止,數據類型:char1;

TOTALS_BEF:在單項記錄前總計輸出,數據類型:char1;

NO_TOTARR:匯總行前顯示箭頭表示匯總,數據類型char1;

NO_TOTEXP:只顯示小計,不顯示總計,數據類型char1;

NO_F4:屏蔽F4幫助,數據類型char1;

COUNTFNAME:內表內部顯示字段;

STYLEFNAME:內表內部顯示字段,單元格編輯控制字段;

NO_ROWMARK:是否禁用行選擇是為‘X’,否為space;

NO_TOOLBAR:是否隱藏工具欄是為‘X’,否為space;

GRID_TITLE:標題欄文本;

SEL_MODE:選擇模式,‘A’選擇按鈕,Space空白;

BOX_FNAME:內表內部顯示字段;

SGL_CLK_HD:第一次點擊列頭,升序;第二次點擊降序;

NO_TOTLINE:不輸出總計行,數據類型:char1;

NUMC_TOTAL:是否禁止NUMC數據類型總計,是為‘X’,否為space;

NO_UTSPLIT:是否不按單元拆分總計行,是為‘X’,否為space;

EXCP_FNAME:異常字段編碼;

EXCP_ROLLN:異常文檔的數據元素;

EXCP_CONDS:是否異常匯總,數據類型char1;

EXCP_LED:是否異常LED顯示,數據類型char1;

EXCP_GROUP:異常分組,數據類型char1;

DETAILINIT:是否細節屏幕顯示初始值,數據類型char1;

DETAILTITL:細節屏幕titlebar;

KEYHOT:關鍵字欄作為熱點鏈接,數據類型char1;

NO_AUTHOR:不授權檢查,數據類型char1;

XIFUNCKEY:附加功能名;

XIDIRECT:一般標記;

S_DRAGDROP:拖動控制,數據類型:LVC_S_DD01,

LVC_S_DD01內表結構:

CNTR_DDID:拖放對象handle,數據類型int4;

GRID_DDID: 拖放對象handle,數據類型int4;

COL_DDID: 拖放對象handle,數據類型int4;

ROW_DDID:拖放對象handle,數據類型int4;

FIELDNAME:內表內部顯示字段;

INFO_FNAME:ALV控件:具有簡單行顏色編碼的字段名稱

CTAB_FNAME:ALV控件:具有復雜單元格顏色編碼的字段名稱

WEBLOOK:ALV控件,WEBLOOK;

WEBSTYLE:Style;

WEBROWS:web顯示行數,數據類型:INT4;

WEBXWIDTH:寬度,數據類型:INT4;

WEBXHEIGHT:高度,數據類型:INT4;

 

SLIS_LAYOUT_ALV屬性

slis_layout_alv組成:slis_layout_alv_spec0和slis_layout_alv_spec1。

源碼:

types: begin of slis_layout_alv_spec0,

no_colhead(1) type c,    " no headings

no_hotspot(1) type c,    " headings not as hotspot

zebra(1) type c,      " striped pattern

no_vline(1) type c,     " columns separated by space

no_hline(1) type c,     "rows separated by space B20K8A0N5D

cell_merge(1) type c,    " not suppress field replication

edit(1) type c,       " for grid only

edit_mode(1) type c,     " for grid only

numc_sum(1)  type c,  " totals for NUMC-Fields possib.

no_input(1) type c,   " only display fields

f2code like sy-ucomm, 

reprep(1) type c,   "report report interface active

no_keyfix(1) type c,   " do not fix keycolumns

expand_all(1) type c,  " Expand all positions

no_author(1) type c, " No standard authority check

*        PF-status

def_status(1) type c,  " default status  space or 'A'

item_text(20) type c,   " Text for item button

countfname type lvc_fname,

end of slis_layout_alv_spec0.

 

types: begin of slis_layout_alv_spec1,

*        Display options

colwidth_optimize(1) type c,

no_min_linesize(1) type c, " line size = width of the list

min_linesize like sy-insz,   " if initial min_linesize = 80

max_linesize like sy-linsz,   " Default 250

window_titlebar like sy-title,

no_uline_hs(1) type c,

* 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(1) type c,    " fieldname for exception

* Sums

no_sumchoice(1) type c,      " no choice for summing up

no_totalline(1) type c,       " no total line

no_subchoice(1) type c,       " no choice for subtotals

no_subtotals(1) type c,       " no subtotals possible

no_unit_splitting type c,   " no sep. tot.lines by inh.units

totals_before_items type c, " diplay totals before the items

totals_only(1) type c,    " show only totals

totals_text(60) type c,  " text for 1st col. in total line

subtotals_text(60) type c,  " 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(1) type c,  " keys as hotspot " K_KEYHOT

flexible_key(1) type c,   " key columns movable,...

group_buttons(1) type c,  " buttons for COL1 - COL5

get_selinfos(1) type c,   " read selection screen

group_change_edit(1) type c, " Settings by user for new group         

no_scrolling(1) type c,   " no scrolling

*Detailed screen

detail_popup(1) type c,  " show detail in popup

detail_initial_lines(1) type c, " show also initial lines

etail_titlebar like sy-title," Titlebar for detail

* Display variants

 header_text(20) type c,       " Text for header button

 efault_item(1) type c,       " Items as default

* colour

info_fieldname type slis_fieldname, " infofield for listoutput

coltab_fieldname type slis_fieldname, " colors

* others

list_append(1) type c,       " 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(1) type c, "ACC: Switch from FullGrid to List

end of slis_layout_alv_spec1.
View Code

 

1.8、Fieldcat設置

    Fieldcat 主要用於ALV的結構定義,包括具體的欄位及名稱、類型、格式等屬性,為 ALV 輸出的必選項。

Function REUSE_ALV_GRID_DISPLAY_LVC 使用的就是IT_FIELDCAT_LVC這個參數,參數類型:LVC_T_FCAT

Function REUSE_ALV_GRID_DISPLAY 使用的是IT_FIELDCAT這個參數,數據類型為SLIS_T_FIELDCAT_ALV。

示例:

"alv的fieldcat設置,REUSE_ALV_GRID_DISPLAY使用
DATA:my_fieldcat TYPE SLIS_T_FIELDCAT_ALV.
DATA:wa_fieldcat TYPE slis_fieldcat_alv. "工作區

"alv的fieldcat設置,REUSE_ALV_GRID_DISPLAY_LVC使用
DATA:my_fieldcat_lvc TYPE LVC_T_FCAT.
DATA:wa_fieldcat_lvc TYPE LVC_S_FCAT. "工作區

LVC_S_LAYO屬性:

EDIT:當前字段列是否可輸入,數據類型char1;

ROW_POS:行位置,數據類型:INT4;

COL_POS:列位置,數據類型:INT4;

FIELDNAME:內表顯示字段名稱;

TABNAME:內表名;

REPTEXT:列名,列表標題欄;

CURRENCY:貨幣單位;

CFIELDNAME:貨幣單位字段名稱;

QUANTITY:度量單位;

QFIELDNAME:度量單位字段名稱;

IFIELDNAME:內表字段名稱;

ROUND:四舍五入保留位數,數據類型:INT4;

ROUNDFIELD:四舍五入字段名;

DECIMALS_O:輸出小數位數,數據類型char6;

DECMLFIELD:小數字段名稱;

DECIMALS:小數位數,數據類型Numc6;

EXPONENT:浮點表示指數,數據類型:char3;

KEY:是否關鍵字段,數據類型:char1;

KEY_SEL:是否隱藏鍵列,數據類型:char1;

ICON:是否輸出為ICON,數據類型:char1;

SYMBOL:是否輸出為Symbol,數據類型:char1;

CHECKBOX:是否輸出為checkbox,數據類型:char1;

JUST:是否對齊,默認左對齊,數據類型:char1, R:Right L:Left C:Center ;

LZERO:是否輸出前導0,數據類型:char1;

NO_SIGN:禁止輸出正負號,數據類型char1;

NO_ZERO:禁止輸出0,數據類型char1;

NO_CONVEXT:不考慮將轉換退出用於輸出;

EDIT_MASK:EDITMASK輸出,格式化輸出時間等;

EMPHASIZE:高亮顏色顯示;

FIX_COLUMN:是否固定列,數據類型char1;

DO_SUM:當前列的合計值,數據類型char1;

NO_SUM:沒有匯總列值,數據類型char1;

NO_OUT:列不輸出,數據類型char1;

TECH:Technical字段,數據類型char1,設置為‘X’,字段不能輸出,不顯示;

OUTPUTLEN:輸出字符長度,列寬度;

DD_OUTLEN:輸出字符長度;

INTLEN:字節長度;

CONVEXIT:轉換Routine;

SELTEXT:對話框function的列標識;

TOOLTIP:工具提示列標題;

ROLLNAME:F1幫助數據元素;

DATATYPE:ABAP數據字典中數據類型;

INTTYPE:ABAP基本數據類型C,D,N等;

LOWERCASE:是否允許小寫,數據類型char1;

HIER_LEVEL:internal use;

REPREP:Value is selection criterion for rep./rep.intf;

DOMNAME:域名;

SP_GROUP:group key;

HOTSPOT:欄位是否有熱點,數據類型char1;

DFIELDNAME:數據庫中列組字段名稱;

COL_ID:column id;

AUTO_VALUE:自動值copy;

CHECKTABLE:表名;

VALEXI:是否存在固定值,數據類型char1;

WEB_FIELD:內表字段名;

HREF_HNDL:Natual Number,數據類型INT4;

NO_MERGING:是否禁止合並,數據類型char1;

COL_OPT:列自動優化;

F4AVAILABL:是否有輸入幫助,數據類型char1;

REF_FIELD:內表欄位參考欄位,用於f4幫助;

REF_TABLE:內表參考數據庫表,用於f4幫助;

注意:有多個幫助欄位時F4AVAILABL必須設置。

TXT_FIELD:內表字段名;

COLTEXT:列標題;

SCRTEXT_L:長字段標簽;

SCRTEXT_M:中長字段標簽;

SCRTEXT_S:短字段標簽;

COLDDICTXT:DDIC文本參考,數據類型char1;

SELDDICTXT: DDIC文本參考,數據類型char1;

TIPDDICTXT: DDIC文本參考,數據類型char1;

 

SLIS_FIELDCAT_ALV屬性:

Fieldcat屬性結構源碼:

*** Fieldcat

types: begin of slis_fieldcat_main0,

row_pos        like sy-curow, " output in row

col_pos        like sy-cucol, " position of the column

fieldname      type slis_fieldname,

tabname        type slis_tabname,

currency(5)    type c,

cfieldname  type slis_fieldname, " field with currency unit

ctabname  type slis_tabname,   " and table

ifieldname     type slis_fieldname, " initial column

quantity(3)    type c,

qfieldname type slis_fieldname, " field with quantity unit

qtabname       type slis_tabname,   " and table

round  type i,  " round in write statement

exponent(3)  type c,   " exponent for floats

key(1)   type c,    " column with key-color

icon(1)   type c,        " as icon

symbol(1)  type c,        " as symbol

checkbox(1) type c,        " as checkbox

just(1)   type c,        " (R)ight (L)eft (C)ent.

lzero(1)   type c,        " leading zero

o_sign(1)  type c,        " write no-sign

no_zero(1)  type c,        " write no-zero

no_convext(1)  type c,

edit_mask   type slis_edit_mask, 

emphasize(4)  type c,        " emphasize

fix_column(1)  type c,       " Spalte fixieren

do_sum(1)    type c,        " sum up

no_out(1)    type c,        " (O)blig.(X)no out

tech(1)    type c,        " technical field

outputlen   like dd03p-outputlen,

offset    type dd03p-outputlen,     " offset

seltext_l   like dd03p-scrtext_l, " long key word

seltext_m   like dd03p-scrtext_m, " middle key word

seltext_s   like dd03p-scrtext_s, " short key word

ddictxt(1)  type c,        " (S)hort (M)iddle (L)ong

rollname       like dd03p-rollname,

datatype       like dd03p-datatype,  

inttype        like dd03p-inttype,

intlen         like dd03p-intlen,

lowercase      like dd03p-lowercase,

decfloat_style type outputstyle,    " B20K8A2GF0

parameter0     type char30,

parameter1     type char30,

parameter2     type char30,

parameter3     type char30,

parameter4     type char30,

parameter5     type int4,        

parameter6     type int4,

parameter7     type int4,

parameter8     type int4,

parameter9     type int4,

end of slis_fieldcat_main0.

 

types: begin of slis_fieldcat_main1,

ref_fieldname  like dd03p-fieldname,

ref_tabname    like dd03p-tabname,

roundfieldname type slis_fieldname,

roundtabname   type slis_tabname,

decimalsfieldname type slis_fieldname,

decimalstabname   type slis_tabname,

decimals_out(6)   type c,   " decimals in write statement

text_fieldname type slis_fieldname,

reptext_ddic   like dd03p-reptext,   " heading (ddic)

ddic_outputlen like dd03p-outputlen,

end of slis_fieldcat_main1.

 

types: begin of slis_fieldcat_alv_spec,

key_sel(1)     type c,   " field not obligatory

no_sum(1)      type c,        " do not sum up

sp_group(4)    type c,        " group specification

reprep(1)      type c,       " selection for rep/rep

input(1)       type c,      " input

edit(1)        type c,      " internal use only

hotspot(1)     type c,        " hotspot

end of slis_fieldcat_alv_spec.
View Code

設置Fieldcat示例:使用工作區對對應屬性賦值,然后將工作區加入內表。Fieldcat內表中記錄就是alv中依次輸出欄位。

"設置顯示欄位
clear wa_fieldcat_lvc.
wa_fieldcat_lvc-FIELDNAME = 'CARRID'.  "內表顯示字段名
wa_fieldcat_lvc-REPTEXT = 'id'.        "字段對應描述,列名
wa_fieldcat_lvc-TABNAME = 't_outtab'.  "內表名
wa_fieldcat_lvc-col_opt = 'X'.         "單列寬優化
wa_fieldcat_lvc-just = 'R'.            "設置R右對齊,L左對齊,C居中對齊
wa_fieldcat_lvc-rollname = ''.   "F1幫助,指定數據元素
wa_fieldcat_lvc-ref_field = 'carrid'.  "F4幫助對應DDIC參考字段
wa_fieldcat_lvc-ref_table = 'spfli'.   "F4幫助對應DDIC表
APPEND wa_fieldcat_lvc to my_fieldcat_lvc.

clear wa_fieldcat_lvc.
wa_fieldcat_lvc-FIELDNAME = 'CITYFROM'.
wa_fieldcat_lvc-REPTEXT = '出發城市'.
wa_fieldcat_lvc-TABNAME = 't_outtab'.
wa_fieldcat_lvc-OUTPUTLEN = 20.       "設置輸出列寬
wa_fieldcat_lvc-EDIT = 'X'.         "設置該字段列可編輯
APPEND wa_fieldcat_lvc to my_fieldcat_lvc.
 
clear wa_fieldcat_lvc.
wa_fieldcat_lvc-FIELDNAME = 'ICON_FOLDER'.
wa_fieldcat_lvc-REPTEXT = '圖標'.
wa_fieldcat_lvc-icon = 'X'.          "顯示圖標
wa_fieldcat_lvc-hotspot = 'X'.       "使用熱點點擊,觸發function code '&IC1'
APPEND wa_fieldcat_lvc to my_fieldcat_lvc.

 

1.9、IT_EXCLUDING屬性設置

    IT_EXCLUDING用來將不需要的工具欄按鈕FCODE隱藏掉,也可以通過這個實現動態的工具欄。

示例:

設置IT_EXCLUDING參數

IT_EXCLUDING = my_excluding
"用來隱藏fcode
DATA:my_excluding TYPE slis_t_extab.
DATA:wa_excluding TYPE slis_extab.

"直接將要隱藏的工具欄按鈕對應Fcode加入內表,就可以隱藏掉
wa_excluding-fcode = '&UMC'.
APPEND wa_excluding to my_excluding.

 

1.10、IT_SORT_LVC排序

    sort主要用於ALV的字段排序。

Function REUSE_ALV_GRID_DISPLAY_LVC 使用的就是IT_SORT_LVC  這個參數,參數類型:LVC_T_SORT。

Function REUSE_ALV_GRID_DISPLAY 使用的是IT_SORT這個參數,數據類型為SLIS_T_SORTINFO_ALV。

示例:

"ALV字段排序,REUSE_ALV_GRID_DISPLAY_LVC使用
DATA:my_sort_lvc TYPE LVC_T_SORT.
DATA:wa_sort_lvc TYPE LVC_S_SORT.
 
"ALV字段排序,REUSE_ALV_GRID_DISPLAY使用
DATA:my_sort TYPE SLIS_T_SORTINFO_ALV.
DATA:wa_sort TYPE slis_sortinfo_alv.

 

LVC_S_SORT屬性:

SPOS:排序位置;

FIELDNAME:內表顯示欄位字段名;

UP:升序排列,數據類型:char1;

DOWN:降序排序,數據類型:char1;

GROUP: 控制中斷:插入分頁符,下划線;

SUBTOT:輸出小計;

COMP:數據類型char1,標志;

EXPA:數據類型char1,標志;

SELTEXT:排序標准;

OBLIGATORY:是否必須,數據類型char1;

LEVEL:數據類型INT4;

NO_OUT:是否不輸出,數據類型char1;

INTOPT: 內部優化,內部使用;

 

slis_sortinfo_alv屬性:

slis_sortinfo_alv結構源碼

types: begin of slis_sortinfo_alv,

*        spos(2) type n,

         spos like alvdynp-sortpos,

         fieldname type slis_fieldname,

         tabname type slis_fieldname,

*        up(1) type c,

*        down(1) type c,

*        group(2) type c,

*        subtot(1) type c,

         up like alvdynp-sortup,

         down like alvdynp-sortdown,

         group like alvdynp-grouplevel,

         subtot like alvdynp-subtotals,

         comp(1) type c,

         expa(1) type c,

         obligatory(1) type c,

       end of slis_sortinfo_alv.
View Code

 

1.11、用戶ALV布局

    I_DEFAULT/ I_SAVE/ IS_VARIANT 參數,都可以操作ALV布局。

    I_DEFAULT參數用於設置用戶是否可以定義默認的布局: ’X' 可以定義默認布局, SPACE 不可以定義默認布局。(默認:X)

I_SAVE 參數 保存表格布局: ’X' 只能保存全局變式 ’U' 只能保存特定變式 ’A' 都可以保存 SPACE 不能保存變式 。(默認:space)

IS_VARIANT 參數用於啟用用戶表格布局變式;

 

1.12、ALV事件

    IT_EVENTS 參數屬性設置ALV事件處理。數據類型:SLIS_T_EVENT類型的內表,設置相應處理FORM;

示例:

"事件處理IT_EVENTS
DATA:my_events TYPE SLIS_T_EVENT.
DATA:wa_events TYPE slis_alv_event.

 

SLIS_ALV_EVENT屬性:

對應類型源碼:

types: begin of slis_alv_event,
        name(30),
        form(30),
      end of slis_alv_event.

通過與REUSE_ALV_EVENTS_GET函數配合使用,可自定義ALV事件。

I_LIST_TYPE獲取不同類型alv的事件,0:表示獲取的是通過函數REUSE_ALV_LIST_DISPLAY產生的ALV所支持的事件;4:表示獲取的是通過函數REUSE_ALV_GUID_DISPLAY產生的ALV所支持的事件。

示例:

"獲取alv中現有事件
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
* EXPORTING
*   I_LIST_TYPE           = 0
* IMPORTING
*   ET_EVENTS             =
* EXCEPTIONS
*   LIST_TYPE_WRONG       = 1
*   OTHERS                = 2.

 

1.13、重定義事件

    1、類lcl_event_handler,事件接收處理類;

    2、定義CL_GUI_ALV_GRID類對象;

    3、設置SLIS_T_EVENT類型內表值;

    4、指定function alv 使用的SLIS_T_EVENT;

    5、添加事件名,以及事件對應Form;

    6、設置function alv 的參數IT_EVENTS;

示例:

CLASS: lcl_event_handler DEFINITION DEFERRED.
DATA: g_event_receiver TYPE REF TO lcl_event_handler.
DATA: gr_grid TYPE  REF TO CL_GUI_ALV_GRID.

事件接收處理類定義:為event:data_changed_finished,單元格輸入后enter事件,定義方法handle_modefy。

"事件類定義
CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS:
    handle_modify FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING e_modified et_good_cells.
ENDCLASS.

實現事件類中方法:

"事件類實現
CLASS lcl_event_handler IMPLEMENTATION.
  METHOD handle_modify.
DATA: ls_stbl TYPE lvc_s_stbl.
    “當單元格內容修改,enter按下邏輯代碼
“穩定刷新 
ls_stbl = 'XX'.
    CALL METHOD gr_grid->refresh_table_display
      EXPORTING
        is_stable = ls_stbl.
  ENDMETHOD.                    "HANDLE_MODIFY
ENDCLASS.

設置SLIS_T_EVENT,function alv事件,事件名:CALLER_EXIT,觸發Form名:FM_CALLER_EXIT,這個form名可以自己定義。

WA_EVENTS-name = 'CALLER_EXIT'.
WA_EVENTS-form = 'FM_CALLER_EXIT'.
APPEND WA_EVENTS TO IT_EVENTS.

CALLER_EXIT事件觸發Form:

    1、通過GET_GLOBALS_FROM_SLVC_FULLSCR,獲取alv對應CL_GUI_ALV_GRID類對象;

    2、給alv對象注冊事件;

    3、將我們自己寫的事件處理類對象設置給alv對象;

FORM FM_CALLER_EXIT USING ir_grid TYPE slis_data_caller_exit.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = gr_grid.
 
  "---注冊回車事件
  CALL METHOD gr_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  CREATE OBJECT g_event_receiver.
  SET HANDLER g_event_receiver->handle_modify FOR gr_grid.
ENDFORM.

 

1.14、事件實現下拉選擇框

    1、創建存儲下拉選項的內表LVC_T_DROP;

示例:

"定義存儲下拉列表的數據
GT_DDVAL TYPE LVC_T_DROP,
GW_DDVAL TYPE LVC_S_DROP,

    2、設置顯示結構中加入下拉列DD_HANDLE

示例:

 BEGIN OF T_ALV,
    MATNR TYPE MAKT-MATNR,
    MAKTX TYPE MAKT-MAKTX,
    SPRAS TYPE MAKT-SPRAS,
    DD_HANDLE TYPE INT4,
END OF T_ALV.

 3、下拉列DD_HANDLE需要綁定具體列,在fieldcat中設置,SPRAS欄位的值是下拉列表中值;

GW_FIELDCATALOG-FIELDNAME = 'SPRAS'.
GW_FIELDCATALOG-DRDN_FIELD = 'DD_HANDLE'.

    4、下拉列表設置值;

    5、添加事件名,以及事件對應Form,這里事件名依舊是CALLER_EXIT,對應Form中需要:通過GET_GLOBALS_FROM_SLVC_FULLSCR,獲取alv對應CL_GUI_ALV_GRID類對象;再通過CL_GUI_ALV_GRID 類對象調用SET_DROP_DOWN_TABLE方法,設置下拉列表。

    6、設置function alv 的參數IT_EVENTS;

示例:L_REF_ALV是CL_GUI_ALV_GRID 類對象

CALL METHOD L_REF_ALV->SET_DROP_DOWN_TABLE
    EXPORTING
      IT_DROP_DOWN = GT_DDVAL.

完整示例:通過事件實現下拉選擇框

TYPE-POOLS: SLIS.

TYPES: BEGIN OF T_DATA,

  MATNR TYPE MAKT-MATNR,

  MAKTX TYPE MAKT-MAKTX,

  SPRAS TYPE MAKT-SPRAS,

  END OF T_DATA,

  BEGIN OF T_ALV,

    MATNR TYPE MAKT-MATNR,

    MAKTX TYPE MAKT-MAKTX,

    SPRAS TYPE MAKT-SPRAS,

    DD_HANDLE TYPE INT4,

    END OF T_ALV.

DATA: GT_FIELDCATALOG TYPE LVC_T_FCAT,

      GW_FIELDCATALOG TYPE LVC_S_FCAT,

      "定義存儲下拉列表的數據

      GT_DDVAL TYPE LVC_T_DROP,

      GW_DDVAL TYPE LVC_S_DROP,

      GT_EVENTS TYPE SLIS_T_EVENT,

      GW_EVENTS TYPE SLIS_ALV_EVENT,

      GT_DATA TYPE TABLE OF T_DATA,

      GW_DATA TYPE T_DATA,

      GT_ALV TYPE TABLE OF T_ALV,

      GW_ALV TYPE T_ALV,

      G_REPID TYPE SY-REPID VALUE SY-REPID.

 

SELECT-OPTIONS: S_MATNR FOR GW_DATA-MATNR .

 

START-OF-SELECTION.

SELECT MATNR MAKTX SPRAS INTO TABLE GT_DATA UP TO 50 ROWS FROM MAKT WHERE MATNR IN S_MATNR AND SPRAS = 'EN'.

  LOOP AT GT_DATA INTO GW_DATA.

    MOVE-CORRESPONDING GW_DATA TO GW_ALV.

    APPEND GW_ALV TO GT_ALV. ENDLOOP.

    PERFORM CREAT_FIELDCAT.

    PERFORM CREAT_DROPDOWN_VALUES.

    PERFORM CREAT_EVENT_EXITS.

 

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'

    EXPORTING I_CALLBACK_PROGRAM = G_REPID

      IT_FIELDCAT_LVC = GT_FIELDCATALOG

      IT_EVENTS = GT_EVENTS

      TABLES

        T_OUTTAB = GT_ALV.

 

 

* 設置輸出字段的格式

FORM CREAT_FIELDCAT.

    CLEAR GW_FIELDCATALOG.

    GW_FIELDCATALOG-FIELDNAME = 'MATNR'.

    GW_FIELDCATALOG-REF_FIELD = 'MATNR'.

    GW_FIELDCATALOG-REF_TABLE = 'MAKT'.

    APPEND GW_FIELDCATALOG TO GT_FIELDCATALOG.

 

    CLEAR GW_FIELDCATALOG.

    GW_FIELDCATALOG-FIELDNAME = 'MAKTX'.

    GW_FIELDCATALOG-REF_FIELD = 'MAKTX'.

    GW_FIELDCATALOG-REF_TABLE = 'MAKT'.

    APPEND GW_FIELDCATALOG TO GT_FIELDCATALOG.

 

    CLEAR GW_FIELDCATALOG.

    GW_FIELDCATALOG-FIELDNAME = 'SPRAS'.

    GW_FIELDCATALOG-OUTPUTLEN = '7'.

    GW_FIELDCATALOG-DD_OUTLEN = '7'.

    GW_FIELDCATALOG-INTLEN = '2'.

    GW_FIELDCATALOG-INTTYPE = 'C'.

    GW_FIELDCATALOG-COLTEXT = 'Language'.

    GW_FIELDCATALOG-TOOLTIP = 'Language'.

    GW_FIELDCATALOG-SELTEXT = 'Language'.

    GW_FIELDCATALOG-DRDN_FIELD = 'DD_HANDLE'.

    GW_FIELDCATALOG-EDIT = 'X'.

    APPEND GW_FIELDCATALOG TO GT_FIELDCATALOG.

ENDFORM. " creat_fieldcat

*---------------------------------------------------------------------*

*根據物料的所有的語言生成不同的生成下拉列表

*---------------------------------------------------------------------*

FORM CREAT_DROPDOWN_VALUES.

  DATA: L_SPRAS TYPE MAKT-SPRAS,

      L_COUNT TYPE I.

  LOOP AT GT_ALV INTO GW_ALV.

    ADD 1 TO L_COUNT.

    SELECT SPRAS

       INTO L_SPRAS

    FROM MAKT

    WHERE MATNR = GW_ALV-MATNR.

      CLEAR GW_DDVAL.

      GW_DDVAL-HANDLE = L_COUNT.

      GW_DDVAL-VALUE = L_SPRAS.

      APPEND GW_DDVAL TO GT_DDVAL.

    ENDSELECT.

 

    CLEAR GW_DDVAL.

    GW_DDVAL-HANDLE = L_COUNT.

    GW_DDVAL-VALUE = ''.

    APPEND GW_DDVAL TO GT_DDVAL.

*設置對應

    GW_ALV-DD_HANDLE = L_COUNT.

    MODIFY GT_ALV FROM GW_ALV.

  ENDLOOP.

ENDFORM.                    " creat_dropdown_values

*---------------------------------------------------------------------*

* Form creat_event_exits *---------------------------------------------------------------------*

FORM CREAT_EVENT_EXITS .

  GW_EVENTS-NAME = 'CALLER_EXIT'.

  GW_EVENTS-FORM = 'CALLER_EXIT'.

  APPEND GW_EVENTS TO GT_EVENTS.

ENDFORM. " creat_event_exits

 

*---------------------------------------------------------------------*

*設置下拉列表,使Grid和內表能鏈接上

*---------------------------------------------------------------------*

FORM CALLER_EXIT USING LS_DATA TYPE SLIS_DATA_CALLER_EXIT.

  DATA: L_REF_ALV TYPE REF TO CL_GUI_ALV_GRID.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

    IMPORTING

      E_GRID = L_REF_ALV.

  CALL METHOD L_REF_ALV->SET_DROP_DOWN_TABLE

    EXPORTING

      IT_DROP_DOWN = GT_DDVAL.

ENDFORM.                    "CALLER_EXIT

 
1.15、實現單元格編輯控制

示例2:實現單元格的編輯控制

"單元格編輯控制

DATA: t_stylelin TYPE LVC_T_STYL. "控制單元格編輯

DATA: wa_stylelin TYPE LVC_S_STYL.  "工作區

DATA: BEGIN OF t_outtab1 OCCURS 0.

  INCLUDE STRUCTURE spfli.

  DATA:stylelin TYPE LVC_T_STYL,  "控制單元格編輯狀態

      END OF t_outtab1.

 

"需要設置layout

my_layout_lvc-STYLEFNAME = 'STYLELIN'.  "設置單元格控制對應字段名

my_layout_lvc-EDIT = 'X'.  "layout設置可編輯

"將內表數據賦值

LOOP AT t_outtab.

  MOVE-CORRESPONDING t_outtab to t_outtab1.

  "設置單元格是否可編輯

  wa_stylelin-FIELDNAME = 'CARRID'.

  wa_stylelin-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. " 設置為可編輯狀態

  INSERT wa_stylelin INTO TABLE t_stylelin.     "由於LVC_T_STYL是sorted table,不能用append方式添加

  CLEAR wa_stylelin.

  wa_stylelin-FIELDNAME = 'CITYFROM'.

  wa_stylelin-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. " 設置為不可編輯狀態

  INSERT wa_stylelin INTO TABLE t_stylelin.     "由於LVC_T_STYL是sorted table,不能用append方式添加

  CLEAR wa_stylelin.

  wa_stylelin-FIELDNAME = 'ICON_FOLDER'.

  wa_stylelin-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 設置為不可編輯狀態

  INSERT wa_stylelin INTO TABLE t_stylelin.     "由於LVC_T_STYL是sorted table,不能用append方式添加

  CLEAR wa_stylelin.

  "將設置的style保存到對應style屬性中

  t_outtab1-stylelin[] = t_stylelin[].

  "將記錄加入t_outtab1

  APPEND t_outtab1.

ENDLOOP.
View Code

 

1.16、添加行選擇標志

1、首先在數據結構中添加行選擇標志字段,

示例:

DATA: BEGIN OF t_outtab1 OCCURS 0.
  INCLUDE STRUCTURE spfli.
  DATA:stylelin TYPE LVC_T_STYL,  "控制單元格編輯狀態
       sel TYPE C,          "行選擇標志
      END OF t_outtab1.

2、然后,在layout聲明行選擇字段名,layout的BOX_FNAME屬性綁定我們添加的行選擇字段。

示例:

my_layout_lvc-BOX_FNAME = 'SEL'.  "指定行選擇字段

3、當選擇行執行alv動作時,循環alv顯示內表,通過SEL選擇行標志字段等於‘X’,就可以找到我們的選擇行。

 

1.17、ALV的F4幫助

    ALV單元格的幫助,就是單元格后面出現一個小方塊,點擊方塊可以顯示單元格欄位建議輸入值。

日期類型點擊小方塊,彈出一個日期選擇彈窗。設置fieldcat的REF_TABLE和REF_FIELD屬性,指定數據對應的數據庫表和欄位;INTTYPE和DATATYPE,指定數據類型。

示例:

"設置日期欄f4幫助
  LOOP AT IT_FIELDCAT_LVC INTO WA_FIELDCAT_LVC.
    IF WA_FIELDCAT_LVC-FIELDNAME = 'DATE'.
      WA_FIELDCAT_LVC-DATATYPE = 'DATS'.
      WA_FIELDCAT_LVC-INTTYPE = 'D'.
      WA_FIELDCAT_LVC-REF_TABLE = 'LIKP'.
      WA_FIELDCAT_LVC-REF_FIELD = 'LFDAT'.
      MODIFY IT_FIELDCAT_LVC FROM WA_FIELDCAT_LVC.
    ENDIF.
  ENDLOOP.

 如果欄位對應Domain數據類型,點擊小方塊,選擇domain的range值。

創建domain域,指定value range值,設置fieldcat的INTTYPE和DATATYPE對應domain名,設置REF_TABLE和REF_FIELD欄位對應表和字段名。可以實現F4幫助。

 

1.18、顯示圖標熱點點擊

    獲取icon值,程序引入type-pools:icon。點擊icon可以查看到具體icon對應值。

type-pools:icon.

ICON_2 ICON_DUMMY                     '@00@'."  Placeholder icon
ICON_2 ICON_CHECKED                   '@01@'."  Checked; Okay
ICON_2 ICON_INCOMPLETE                '@02@'."  Incomplete; Critical
ICON_2 ICON_FAILURE                   '@03@'."  Failure
ICON_2 ICON_POSITIVE                  '@04@'."  Positive; Good

    使用Tcode:ICON或者使用SE11:ICON數據表,都可以查看具體ICON樣式。

示例:Function ALV設置欄位顯示ICON,設置fieldcat,icon=‘X’,設置icon點擊,hotspot=‘X’。其中FIELDNAME= ICON_POSITIVE,設置為icon名,直接顯示ICON。

clear wa_fieldcat_lvc.
wa_fieldcat_lvc-FIELDNAME = 'ICON'.
wa_fieldcat_lvc-REPTEXT = '圖標'.
wa_fieldcat_lvc-icon = 'X'.          "顯示圖標
wa_fieldcat_lvc-hotspot = 'X'.       "使用熱點點擊,觸發function code '&IC1'
APPEND wa_fieldcat_lvc to my_fieldcat_lvc.
View Code

在I_CALLBACK_USER_COMMAND參數設置的form子程序中,響應點擊,單擊和雙擊對應響應碼‘&IC1’,通過RS_SELFIELD TYPE SLIS_SELFIELD,SLIS_SELFIELD類型數據屬性fieldname當前獲取點擊欄位名,tabindex屬性獲取當前行。

示例:

"用戶操作
  CASE R_UCOMM.
     WHEN '&IC1'.  "雙擊顯示明細
       CASE RS_SELFIELD-fieldname.
         WHEN 'ICON'.
           R_UCOMM = '&ETA'.  "調用系統功能,查看明細
        WHEN 'ICON1'.
           message s000 with 'icon1'.
       ENDCASE.
  ENDCASE.
View Code

 

1.19、 長文本編輯框

        當單元格需要輸入超長長度文本時,依靠Function ALV的可編輯輸入欄位輸入,非常難操作。使用欄位hotspot熱點點擊,彈出長文本輸入框,接收輸入,然后設置到顯示的alv內表中。

1.創建屏幕容器,Custom Control:TEXTEDITOR;

 

2.Flow logic代碼,創建對應GUI STATUS和GUI TITLE。

PROCESS BEFORE OUTPUT.
  MODULE STATUS_9000.
  MODULE SET_TEXT_9000.
*
PROCESS AFTER INPUT.
  MODULE USER_COMMAND_9000.

3.參數聲明,CL_GUI_CUTOM_CONTAINER類,對應容器;CL_GUI_TEXTEDIT類,對應文本編輯框。

"文本編輯框
DATA: LINE_LENGTH TYPE I VALUE 256.
DATA: EDITOR_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: TEXT_EDITOR TYPE REF TO CL_GUI_TEXTEDIT.
DATA: TEXT TYPE STRING.
DATA: BEGIN OF TEXTTAB OCCURS 0,
        STR(256) TYPE C,
      END OF TEXTTAB.

DATA:READ_ONLY TYPE I VALUE 1.

4.創建容器和文本編輯框對象實例

MODULE SET_TEXT_9000 OUTPUT.
  IF EDITOR_CONTAINER IS INITIAL.
    "創建EDITOR_CONTAINER對象
    CREATE OBJECT EDITOR_CONTAINER
      EXPORTING
        CONTAINER_NAME              = 'TEXTEDITOR'
      EXCEPTIONS
        CNTL_ERROR                  = 1
        CNTL_SYSTEM_ERROR           = 2
        CREATE_ERROR                = 3
        LIFETIME_ERROR              = 4
        LIFETIME_DYNPRO_DYNPRO_LINK = 5.
  ENDIF.
  IF TEXT_EDITOR IS INITIAL.
    CREATE OBJECT TEXT_EDITOR
      EXPORTING
        PARENT                     = EDITOR_CONTAINER
        WORDWRAP_MODE              = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
        WORDWRAP_POSITION          = LINE_LENGTH
        WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE.
    "You can hide the toolbar and as well as status bar for the text editor control.
    CALL METHOD TEXT_EDITOR->SET_TOOLBAR_MODE
      EXPORTING
        TOOLBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.
    CALL METHOD TEXT_EDITOR->SET_STATUSBAR_MODE
      EXPORTING
        STATUSBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.
  ENDIF.

  "設置只讀模式,0關閉只讀,1打開只讀
  CALL METHOD TEXT_EDITOR->SET_READONLY_MODE
    EXPORTING
      READONLY_MODE = READ_ONLY.

  TEXTTAB-STR = 'line text'.
  APPEND TEXTTAB.
  "設置文本
  CALL METHOD TEXT_EDITOR->SET_TEXT_AS_R3TABLE
    EXPORTING
      TABLE = TEXTTAB[].
ENDMODULE.                 " SET_ALV_9000  OUTPUT 
View Code

5.用戶點擊響應USER_COMMAND_9000

MODULE USER_COMMAND_9000 INPUT.
  CASE SY-UCOMM.
    WHEN 'CANCEL'.
      LEAVE TO SCREEN 0.
    WHEN 'OK'.
      CLEAR TEXTTAB[].
      "獲取當前文本編輯框文本
      CALL METHOD TEXT_EDITOR->GET_TEXT_AS_R3TABLE
        IMPORTING
          TABLE = TEXTTAB[].
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
*     CALL METHOD CL_GUI_CFW=>FLUSH
*      EXCEPTIONS
*        CNTL_SYSTEM_ERROR = 1
*        CNTL_ERROR = 2
*        OTHERS = 3.
      LOOP AT TEXTTAB.
        TEXT = TEXT && TEXTTAB-STR.
      ENDLOOP.
      CALL METHOD TEXT_EDITOR->DELETE_TEXT.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.  
View Code

完整測試代碼

"alv輸出table

DATA:t_outtab LIKE TABLE OF spfli WITH HEADER LINE.

 

"查詢數據

SELECT * INTO CORRESPONDING FIELDS OF TABLE t_outtab FROM spfli WHERE carrid = 'AA'.

 

"alv輸出function參數

"小標題

DATA:my_grid_titile TYPE lvc_title VALUE '小標題'.

 

"GRID配置

DATA:my_grid_settings TYPE LVC_S_GLAY.

"響應輸入enter回調函數

my_grid_settings-EDT_CLL_CB = 'X'. "允許回調ALV control: Callback when leaving an edited cell

 

*"alv的layout設置,REUSE_ALV_GRID_DISPLAY使用

*DATA:my_layout TYPE slis_layout_alv.

"alv的layout設置,REUSE_ALV_GRID_DISPLAY_LVC使用

DATA:my_layout_lvc TYPE lvc_s_layo.

 

*"alv的fieldcat設置,REUSE_ALV_GRID_DISPLAY使用

*DATA:my_fieldcat TYPE SLIS_T_FIELDCAT_ALV.

*DATA:wa_fieldcat TYPE slis_fieldcat_alv. "工作區

"alv的fieldcat設置,REUSE_ALV_GRID_DISPLAY_LVC使用

DATA:my_fieldcat_lvc TYPE LVC_T_FCAT.

DATA:wa_fieldcat_lvc TYPE LVC_S_FCAT. "工作區

 

"隱藏工具欄fcode

DATA:my_excluding TYPE slis_t_extab.

DATA:wa_excluding TYPE slis_extab.

"直接將要隱藏的工具欄按鈕對應Fcode加入內表,就可以隱藏掉

wa_excluding-fcode = '&UMC'.

APPEND wa_excluding to my_excluding.

 

"對字段的值進行排序

"ALV字段排序,REUSE_ALV_GRID_DISPLAY_LVC使用

DATA:my_sort_lvc TYPE LVC_T_SORT.

DATA:wa_sort_lvc TYPE LVC_S_SORT.

*"ALV字段排序,REUSE_ALV_GRID_DISPLAY使用

*DATA:my_sort TYPE SLIS_T_SORTINFO_ALV.

*DATA:wa_sort TYPE slis_sortinfo_alv.

 

"事件處理IT_EVENTS

DATA:my_events TYPE SLIS_T_EVENT.

DATA:wa_events TYPE slis_alv_event.

 

"設置顯示欄位

clear wa_fieldcat_lvc.

wa_fieldcat_lvc-FIELDNAME = 'CARRID'.  "內表顯示字段名

wa_fieldcat_lvc-REPTEXT = 'id'.     "字段對應描述,列名

wa_fieldcat_lvc-TABNAME = 't_outtab'.  "內表名

wa_fieldcat_lvc-col_opt = 'X'.         "單列寬優化

wa_fieldcat_lvc-just = 'R'.            "設置R右對齊,L左對齊,C居中對齊

wa_fieldcat_lvc-rollname = ''.   "F1幫助,指定數據元素

wa_fieldcat_lvc-ref_field = 'carrid'.  "F4幫助對應DDIC參考字段

wa_fieldcat_lvc-ref_table = 'spfli'.   "F4幫助對應DDIC表

APPEND wa_fieldcat_lvc to my_fieldcat_lvc.

 

clear wa_fieldcat_lvc.

wa_fieldcat_lvc-FIELDNAME = 'CITYFROM'.

wa_fieldcat_lvc-REPTEXT = '出發城市'.

wa_fieldcat_lvc-TABNAME = 't_outtab'.

wa_fieldcat_lvc-OUTPUTLEN = 20.       "設置輸出列寬

*wa_fieldcat_lvc-EDIT = 'X'.         "設置該字段列可編輯

APPEND wa_fieldcat_lvc to my_fieldcat_lvc.

 

clear wa_fieldcat_lvc.

wa_fieldcat_lvc-FIELDNAME = 'ICON_FOLDER'.

wa_fieldcat_lvc-REPTEXT = '圖標'.

wa_fieldcat_lvc-icon = 'X'.          "顯示圖標

wa_fieldcat_lvc-hotspot = 'X'.       "使用熱點點擊,觸發function code '&IC1'

APPEND wa_fieldcat_lvc to my_fieldcat_lvc.

 

"單元格編輯控制

DATA: t_stylelin TYPE LVC_T_STYL. "控制單元格編輯

DATA: wa_stylelin TYPE LVC_S_STYL.  "工作區

DATA: BEGIN OF t_outtab1 OCCURS 0.

  INCLUDE STRUCTURE spfli.

  DATA:stylelin TYPE LVC_T_STYL,  "控制單元格編輯狀態

       sel TYPE C,          "行選擇標志

      END OF t_outtab1.

 

"需要設置layout

my_layout_lvc-STYLEFNAME = 'STYLELIN'.  "設置單元格控制對應字段名

my_layout_lvc-EDIT = 'X'.  "layout設置可編輯

my_layout_lvc-BOX_FNAME = 'SEL'.  "指定行選擇字段

 

"將內表數據賦值

LOOP AT t_outtab.

  MOVE-CORRESPONDING t_outtab to t_outtab1.

  "設置單元格是否可編輯

  wa_stylelin-FIELDNAME = 'CARRID'.

  wa_stylelin-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. " 設置為可編輯狀態

  INSERT wa_stylelin INTO TABLE t_stylelin.     "由於LVC_T_STYL是sorted table,不能用append方式添加

  CLEAR wa_stylelin.

  wa_stylelin-FIELDNAME = 'CITYFROM'.

  wa_stylelin-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. " 設置為不可編輯狀態

  INSERT wa_stylelin INTO TABLE t_stylelin.     "由於LVC_T_STYL是sorted table,不能用append方式添加

  CLEAR wa_stylelin.

  wa_stylelin-FIELDNAME = 'ICON_FOLDER'.

  wa_stylelin-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 設置為不可編輯狀態

  INSERT wa_stylelin INTO TABLE t_stylelin.     "由於LVC_T_STYL是sorted table,不能用append方式添加

  CLEAR wa_stylelin.

  "將設置的style保存到對應style屬性中

  t_outtab1-stylelin[] = t_stylelin[].

  "將記錄加入t_outtab1

  APPEND t_outtab1.

ENDLOOP.

 

"調用function REUSE_ALV_GRID_DISPLAY_LVC,顯示alv

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'

  EXPORTING

    I_CALLBACK_PROGRAM         = sy-repid

    I_CALLBACK_PF_STATUS_SET      = 'MY_PF_STATUS'

    I_CALLBACK_USER_COMMAND       = 'MY_USER_COMMAND'

    I_CALLBACK_TOP_OF_PAGE        = 'MY_TOP_OF_PAGE'

*    I_CALLBACK_HTML_TOP_OF_PAGE    = 'MY_HTML_TOP_OF_PAGE'

*   I_CALLBACK_HTML_END_OF_LIST     = ' '

    I_GRID_TITLE            = my_grid_titile

    I_GRID_SETTINGS           = my_grid_settings

    IS_LAYOUT_LVC            = my_layout_lvc

    IT_FIELDCAT_LVC           = my_fieldcat_lvc

    IT_EXCLUDING            = my_excluding

    IT_SORT_LVC              = my_sort_lvc

  TABLES

    T_OUTTAB                = t_outtab1

  EXCEPTIONS

    PROGRAM_ERROR            = 1

    OTHERS               = 2.

IF SY-SUBRC <> 0.

* Implement suitable error handling here

ENDIF.

 

"自定義屏幕菜單

form my_pf_status USING p_extab TYPE slis_t_extab.

  set PF-STATUS 'STANDARD_TEST_ALV'.

endform.

 

"用戶操作響應,R_UCOMM 用戶操作, RS_SELFIELD 選擇或點擊的行列信息

form my_user_command USING R_UCOMM LIKE SY-UCOMM

                           RS_SELFIELD TYPE SLIS_SELFIELD.

 

  "刷新ALV顯示

  DATA: LR_GRID TYPE  REF TO CL_GUI_ALV_GRID.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

    IMPORTING

      E_GRID = LR_GRID.

  CALL METHOD LR_GRID->CHECK_CHANGED_DATA.

  RS_SELFIELD-REFRESH = 'X'.    " REFESH ALV

 

  "用戶操作

  CASE R_UCOMM.

     WHEN '&IC1'.  "雙擊顯示明細

      R_UCOMM = '&ETA'.  "調用系統功能,查看明細

  ENDCASE.

 

  message s000 with '動作回調'.

endform.

 

"使用I_CALLBACK_TOP_OF_PAGE,alv抬頭信息

form my_top_of_page.

  "保存表頭顯示信息

  DATA:header TYPE SLIS_T_LISTHEADER.

  DATA:wa_header LIKE LINE OF header.

 

  wa_header-typ = 'H'.   " H = Header, S = Selection, A = Action

  wa_header-info = '這是頭'.

  APPEND wa_header TO header.

  clear wa_header.

 

  "參數IT_LIST_COMMENTARY,顯示文字內容

  "參數I_LOGO ,顯示圖片id,使用OAER上傳圖片

  "參數I_END_OF_LIST_GRID,頁腳信息

  "參數I_ALV_FORM,是否用於alv form中

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

    EXPORTING

      IT_LIST_COMMENTARY   = header

      I_LOGO               = 'TEST_PIC'   "圖片id,

.

endform.

 

 

*"使用I_CALLBACK_HTML_TOP_OF_PAGE,alv抬頭信息

*form my_html_top_of_page USING p_cl_dd_document TYPE REF TO cl_dd_document.

* DATA:pos TYPE I.

*

* "html_insert,這個方法顯示棄用

* CALL METHOD p_cl_dd_document->html_insert

*    EXPORTING

*      contents = '這是頭'

*   CHANGING

*      position = pos.

*

*endform.
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM