【ABAP】OO ALV 概述
?OO ALV,是指通過面向對象(Object-Oriented)的方式實現的ALV輸出
?基本使用原理:
–通過界面調用,在界面的Customer Control控件中,輸出ALV
?CLASS ALV優勢
–使用面向對象的編程方式
–使用容器,可以在一個界面中指定位置進行ALV的輸出
?
?執行步驟
–ALV實現相關變量定義
–創建本地類的聲明及實現(EVENT HANDLER)
–創建界面,并創建Customer Control容器
–實例化container,關聯Customer Control容器
–將ALV植入container中
–ALV格式化(layout及fieldcat的賦值等)
–注冊相關事件
–執行ALV顯示(CALL METHOD GS_XXX->SET_TABLE_FOR_FIRST_DISPLAY)
?
?主要使用的類:
?Data for ALV
DATA: gs_alv???????? TYPE REF TO cl_gui_alv_grid,??? “用于表單輸出
?????????? gs_con???????? TYPE REF TO cl_gui_custom_container,? “用于定義容器
?????????? gs_dyndoc_id?? TYPE REF TO cl_dd_document,?? “用于表頭書寫
?????????? gs_splitter??? TYPE REF TO cl_gui_splitter_container.? “用于分割容器
?
?主要使用的方法
–第一次輸出表單:SET_TABLE_FOR_FIRST_DISPLAY?
–刷新表單內容:REFRESH_TABLE_DISPLAY
?I_SOFT_REFRESH,’X’ :只刷新單元格(如果有合計不自動更新)
–刷新fieldcat: SET_FRONTED_FIELDCATALOG
?如果fieldcat格式有修改,需要刷新格式設置,則調用這個方法
?
?執行步驟
–創建REPORT程序,在END-OF-SELECTION中執行輸出,創建界面0100,調用界面
–在TOP INCLUDE中增加基本定義
–在界面中增加customer control控件,例名稱為GS_CON
–在界面的PBO部分增加module,用于ALV輸出
–設置fieldcat及layout等屬性,通過調用方法執行ALV的初次輸出或刷新
?在使用ALV類之前,需要對其進行創建,并指定ALV輸出時的容器
?步驟
–定義,參照類定義ALV及容器
?GS_ALV???????? TYPE REF TO CL_GUI_ALV_GRID,?? “ALV輸出
?GS_CON???????? TYPE REF TO CL_GUI_CUSTOM_CONTAINER,? “ALV容器
–在界面中增加Customer Control控件,例名稱為:GC_CON
–實例化容器對象,給CONSTRUCTOR構造方法傳值
?CONTAINER_NAME,界面中用戶定義容器名稱
–實例化ALV對象,給CONSTRUCTOR構造方法傳值
?I_PARENT,實例化的容器對象
?定義
–內表:LVC_T_FCAT
–結構:LVC_S_FCAT
?執行ALV輸出前,對fieldcat表單進行賦值
?調用ALV輸出方法時,傳值給IT_FIELDCATALOG
| 字段名 | 描述 |
| COL_POS | 輸出列 列的位置,第幾列,例如1,2,… |
| FIELDNAME | 字段名稱 |
| CURRENCY/CFIELDNAME | 貨幣單位/參考的當前單位的字段名稱 |
| QUANTITY/QFIELDNAME | 計量單位/參考計量單位的字段名稱 |
| DO_SUM | 總計列值 ‘X',合計 |
| FIX_COLUMN | 固定列 |
| EMPHASIZE | 列的顏色 |
| NO_OUT | 列沒有輸出 ‘X' ,隱藏此列 |
| OUTPUTLEN | 列的字符寬度 |
| DATATYPE | ABAP 字典中的數據類型 |
| INTTYPE | ABAP 數據類型(C,D,N,...) |
| HOTSPOT | 單擊敏感 ‘X',下面出現下劃線,響應單擊 |
| DECIMALS | 設置小數的位數 |
| SCRTEXT_L/M/S | 字段標簽長/中/短 |
?定義:
–結構:LVC_S_LAYO
?執行ALV輸出前,對layout結構進行賦值
?調用ALV輸出方法時,傳值給IS_LAYOUT
| 字段名 | 描述 |
| CWIDTH_OPT | 最優化寬度 SPACE, 'X' |
| GRID_TITLE | 標題,在網格和工具條之間 最長70個字符 |
| NO_TOOLBAR | 隱藏工具條 SPACE, 'X' |
| NO_VGRIDLN | 隱藏垂直線 SPACE, 'X' |
| SEL_MODE | 選擇模式 SPACE, 'A', 'B', 'C', 'D' |
| CTAB_FNAME | 帶有復雜單元格顏色編碼的字段名稱 最長30個字符 |
| INFO_FNAME | 帶有簡單行彩色代碼的字段名稱 最長30個字符 |
| ZEBRA | 可選行顏色,如果設置了,出現了間隔色帶 SPACE, 'X' |
| STYLEFNAME | 字段格式 |
?
?顏色值的設置:C+X(顏色:1~7)X(是否加重:1/0)X(是否反色1/0)
?以列為單位
–在FIELDCAT中給EMPHASIZE字段賦值
?
?以行為單位
–在內表中增加一個字段,類型為CHAR,至少長度為4,例COLOR
–給向輸出內表獲取數據時,給COLOR字段賦值
–設置LAYOUT,給INFO_FNAME字段賦值顏色字段名稱,例COLOR
?
?
?以單元格為單位
–在內表中增加一個字段,類型為LVC_T_SCOL ,例COLOR
–在向輸出內表取數據時,通過結構給COLOR字段內表賦值
–設置LAYOUT,給CTAB_FNAME字段賦值顏色字段名稱,例COLOR
?
?以表單為單位
–設置LAYOUT-EDIT,為X,可修改
?以列為單位
–設置FIELDCAT-EDIT,為X,列可修改
?以單元格為單位
–在內表中增加一個字段,類型為LVC_T_STYL ,例CELLSTL
–在需要設置修改屬性的位置,通過結構給CELLSTL字段內表賦值
?FIELDNAME,需要設置屬性的字段名
?STYLE,可修改屬性
–不可修改:CL_GUI_ALV_GRID=>MC_STYLE_DISABLED
–可修改:CL_GUI_ALV_GRID=>MC_STYLE_ENALBED
–設置LAYOUT,給STYLEFNAME字段賦值修改屬性的字段名,例CELLSTL
–
–特別的,如果將某一列中部分字段設置為可修改狀態,一般通過以下方式完成
?在FIELDCAT中,設置該列屬性為可修改
?在表單賦值時,將不應為可修改狀態的字段,設置為不可修改
?***不是將需要修改的單元格設置為可修改,防止可修改屬性設置與靜態屬性設置沖突
?排序
–定義:內表:LVC_T_SORT,結構:LVC_S_SORT
–對CHANGING參數IT_SORT進行傳值
–
?篩選
–定義:內表: LVC_T_FILT ,結構: LVC_S_FILT
–對CHANGING參數IT_FILTER進行傳值
–
?布局設置
–對EXPORTING參數I_SAVE傳值
–對EXPORTING參數IS_VARIANT傳值
–可以在界面中增加布局保存相關按鈕
?選擇布局
?修改布局
?保存布局
?維護布局
?ALV中,若想保存布局,要添加I_SAVE參數
–I_SAVE定義為C數據類型,值如下:
?‘ ‘ = 不能保存布局
?‘X’ = 布局只能被保存為標準布局,不能夠指定用戶
?‘U’ = 只能指定用戶布局
?‘A’ = 既能選擇標準布局,也可選擇指定用戶布局
?為了進一步管理布局,則需要加入IS_VARIANT參數
–其數據結構參考DISVARIANT
–設置字段
?REPORT = SY-REPID? “程序名稱
?VARIANT為布局保存格式
–有三個有用函數供調用保存的格式布局,分別為
?REUSE_ALV_VARIANT_DEFAULT_GET?? 讀取默認的布局
?REUSE_ALV_VARIANT_EXISTENCE???????? 檢測指定布局是否存在
?REUSE_ALV_VARIANT_F4???????????????????????? 顯示布局格式選擇對話窗
?優先級
–當排序、篩選等也設置時,以布局管理參數設置優先
當用戶設置布局參數默認值時,以布局參數傳值優先
?基本原理:
–在OO ALV輸出過程中,默認輸出按鈕欄,包含標準按鈕
–如果標準按鈕中有部分不需要的按鈕,通過隱藏實現
?定義及傳值參數
–定義內表G_TOOLBAR,參照UI_FUNCTIONS,作為隱藏按鈕內表
–向EXPORTING參數IT_TOOLBAR_EXCLUDING傳隱藏按鈕內表
?向G_TOOLBAR傳值,通過傳CL_GUI_ALV_GRID=>MC_FC_*等靜態屬性實現
–增加的值:隱藏的按鈕
注釋的/未增加的值:顯示的按鈕
?REFRESH:?G_TOOLBAR.
??PERFORM?APPEND_ALV_EXCLUDE_FUNCTIONS?TABLES?G_TOOLBAR
????USING:???CL_GUI_ALV_GRID=>MC_FC_REPREP????????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_CHECK?????????,
??????????????CL_GUI_ALV_GRID=>MC_MB_EXPORT????????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_DETAIL????????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_REFRESH???????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_GRAPH?????????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO??????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW??????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOC_CUT???????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW?,
??????????????CL_GUI_ALV_GRID=>MC_FC_INFO??????????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOC_COPY??????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE?????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_PRINT?????????????,
??????????????CL_GUI_ALV_GRID=>MC_MB_SUM???????????????,
??????????????CL_GUI_ALV_GRID=>MC_MB_VIEW??????????????,
??????????????CL_GUI_ALV_GRID=>MC_FC_CURRENT_VARIANT???,
??????????????CL_GUI_ALV_GRID=>MC_FC_SAVE_VARIANT??????,
??????????????CL_GUI_ALV_GRID=>MC_FC_LOAD_VARIANT??????,
??????????????CL_GUI_ALV_GRID=>MC_FC_MAINTAIN_VARIANT??.
?
?FORM?APPEND_ALV_EXCLUDE_FUNCTIONS?TABLES?PT_EXCLUDE?TYPE?UI_FUNCTIONS
???????????????????????????????????? USING??P_VALUE????TYPE?UI_FUNC.
???APPEND?P_VALUE?TO?PT_EXCLUDE.
?ENDFORM.????????????????????"?APPEND_ALV_EXCLUDE_FUNCTIONS
?基本原理
–ALV類中,提供定義好的事件
–創建本地類(event handler),對事件創建方法執行相關處理
?步驟
–相關定義
–創建本地類(event handler)
–根據event,增加方法定義及實現
–注冊事件
?聲明
–可以在TOP中直接使用DEFINITION DEFERRED語句,先推遲聲明一個類
?后續會對這個類進行實際的定義,這里先使用這個類
–參照類聲明對象
?類的創建
–在CLS INCLUDE中
?實例化及注冊事件
?操作ALV事件:TOOLBAR
?主要操作E_OBJECT對象
–通過結構向MT_TOOLBAR賦值
?參數講解:
?
| 字段 | 功能 |
| FUNCTION | 功能代碼 |
| ICON | 圖標 |
| QUICKINFO | 鼠標懸停時簡要信息說明 |
| DISABLED | 按鈕狀態為不可用 |
| TEXT | 顯示文本 |
| CHECKED | 設置為選中時的狀態 |
| BUTN_TYPE | 按鈕類型(長度1位) 0????? 正常按鈕,默認值 1菜單和缺省按鈕 2菜單 3分隔符 4單選按鈕 5復選框 6菜單項 |
?注冊事件
?操作ALV事件:USER_COMMAND
–一般針對在TOOLBAR事件中增加的按鈕進行功能處理
–如果是與表單內容相關的按鈕,例如單行打印、部分下載、選中行可修改等,在此部分設置
–如果是針對整個界面的按鈕,例如后退、退出等,則在界面0100中,使用SET PF-STATUS設置,功能寫在界面PAI部分
?主要操作對象
–判斷UCOMM(按鈕功能)
–注意:
?需要時捕獲選中行信息
?需要時調用刷新ALV顯示方法
?注冊事件
?操作ALV事件:TOP_OF_PAGE
?基本原理
–在本地類中增加方法,處理事件
–將表頭內容寫入到表頭內容的類中
–將表頭內容與表頭輸出的類關聯
–將ALV顯示容器分割成兩部分
–獲取上半部分用于表頭輸出
–獲取下半部分用于表體輸出
–在ALV輸出后,將表頭輸出
?基本定義
?注冊事件
?操作ALV事件:HOTSPOT_CLICK
?基本原理:
–在FIELDCAT中設置過HOTSPOT的字段
–點擊時通過方法獲取到當前行/列/單元格信息
–執行相應操作
?主要操作對象
–E_ROW_ID:行信息
–E_COLUMN_ID:列信息
?注冊事件
?選中物料代碼,跳轉至MM03界面
–通過E_COLUMN_ID-FIELDNAME判斷字段名稱
–通過方法GET_CURRENT_CELL,獲取當前單元格的值
–如果需要的話可以根據E_ROW_ID-INDEX值讀取表中行
–如果需要的話可以創建和表單相同的結構用于數據處理
?操作ALV事件:DOUBLE_CLICK
?主要操作對象:
–E_ROW:雙擊單元格的行信息
–E_COLUMN:雙擊單元格的列信息
–ES_ROW_NO:行編號
?注冊事件
?操作ALV事件:DATA_CHANGED
?基本原理:
–當數據修改時,可以觸發這個事件
–可以進行數據檢查或修改等功能
?觸發方式
?注冊事件
?注意:如果界面中有保存按鈕等功能,注意是否需要在功能語句中增加調用DATA_CHANGED的語句
–CALL METHOD gs_alv->check_changed_data.
–效果:這樣在點擊保存按鈕的時候,可以觸發data changed事件
?效果:點選復選框的同時,即自動修改至內表中
?DOCK CONTAINER
–與customer container的區別:不需要創建customer control控件
?ALV LIST
–可以用來實現多層次顯示,用+展開
–上面是抬頭或合計,下面有詳細信息
?
?SALV
–調用類CL_SALV_TABLE
總結
以上是生活随笔為你收集整理的【ABAP】OO ALV 概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MM模块】Subcontracting
- 下一篇: 【MM 模块】 Optimized Pu