目錄
1、可編輯字段值修改錯誤日誌的彈出
DATA_CHANGED 事件中有一個參數ER_DATA_CHANGED,參數參考CL_ALV_CHANGED_DATA_PROTOCOL,當屏幕字段修改的時候,觸發DATA_CHANGED事件,此時判斷字段的值是否符合規定,如果不符合規定,則調用CL_ALV_CHANGED_DATA_PROTOCOL的方法ADD_PROTOCOL_ENTRY,顯示日誌。
PERFORM ADD_PROTOCOL_ENTRY USING PO_DATA
'ZPSH1' '037' TEXT-T01
LS_CELL-FIELDNAME
LS_CELL-ROW_ID.
FORM ADD_PROTOCOL_ENTRY USING PO_DATA TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL
PV_MSGID
PV_MSGNO
PV_MSG
PV_FIELDNAME
PV_ROWID.
CALL METHOD PO_DATA->ADD_PROTOCOL_ENTRY
EXPOTING
I_MSGID = PV_MSGID
I_MSGNO = PV_MSGNO
I_MSGTY = 'E'
I_MSGV1 = PV_MSG
I_FIELDNAME = PV_FIELDNAME
I_ROW_ID = PV_ROWID.
2、ALV 某一列的字段可編輯
在定義的內表中增加移個參數 STYL 參考LVC_T_STYL,
執行顯示前,設置STYL的參數 FIELDNAME = 要編輯的字段名稱
STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED。注意如果有多個字段需要可編輯的時候,要注意字段排序
3、設置狀態欄的按鈕
參數參考 CL_ALV_EVENT_TOOLBAR_SET.
PV_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET.
PERFORM SET_BUT USING PV_OBECCT->MT_TOOLBAR: 'ADD' 'ADD'
ICON_INSERT_ROW.
FORM SET_BUT USING PV_TOOLBAR TYPE TTB_BUTTON
PV_FUNCTION
PV_TEXT
PV_ICON.
DATA:LS_TOOLBAR TYPE STB_BUTTON.
MOVE PV_FUNCTION TO LS_TOOLBAR-FUNCITON.
MOVE PV_TEXT TO LS_TOOLBAR-TEXT.
MOVE PV_TEXT TO LS_TOOLBAR-QUICKINFO.
MOVE PV_ICON TO LS_TOOLBAR-ICON.
APPEND LS_TOOLBAR TO PV_TOOLBAR.
ENDFORM.
4、獲取ALV上選擇的行
DATA:LT_ROWS TYPE LVC_T_ROID.
GO_GRID->GET_SELECTED_ROWS( IMPORTING ET_ROW_NO = LT_ROWS )
5、ALV 修改單元格的值
在DATA_CHANGED事件中,調用參數的類CL_ALV_CHANGED_DATA_PROTOCOL 的方法MODIFY_CELL.
PERFORM MODIFY_FIELD USING PO_DATA
LS_CELL-ROW_ID
'WERKS'
LS_DATA-WERKS.
FORM MODIFY_FIELD USING PO_DATA TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL
PV_ROW_ID
PV_FIELDNAME TYPE LVC_FNAME
PV_VALUE.
CALL METHOD PO_DATA->MODIFY_CELL
EXPORTING
I_ROW_ID = PV_ROW_ID
I_FIELDNAME = PV_FIELDNAME
I_VALUE = PV_VALUE.
ENDFORM.
6、ALV全屏
創建ALV的時候,不再使用在屏幕上畫控件,調用控件的方式實現ALV,而使用CL_GUI_DOCKING_CONTAINER的方式實現,具體方式如下。
1、定義全局變量
DATA:GO_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTATINER.
2、在屏幕PBO的邏輯流裏面
DATA:LV_SIDE TYPE I VALUE CL_GUI_DOCKING_CONATINER=>DOCK_AT_TOP.
CREATE OBJECT GO_DOCKING
EXORTING
REPID = SY-REPID
DYNNR = SY-DUNNR
SIDE = LV_SIDE
EXTENSION = 500
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINE = 5.
IF SY-SUBRC NE 0.
ENDIF.
CREATE OBJECT GO_GRID
EXPORTNG
I_PARENT = GO_DOCKING
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5
IF SY-SUBRC NE 0
ENDIF.
7、ALV中動態顯示Toolbar的方法
調用ALV的時候,將ALV的按鈕設置成隱藏狀態,註冊Toolbar事件,並將對應的功能碼及文本重新添加上去。
隱藏按鈕:
PERFORM EXCLUDE_TB_FUNCTION USING 'GT_EXCE_100'.
FORM EXCLUDE_TB_FUNCTION USING PV_TABNM.
FIELD-SYSBOLS:<L_TAB> TYPE UI_FUNCTIONS.
DATA:LV_TAB_NAME TYPE FELD-NAME.
CLEAR LV_TAB_NAME.
CONCATENATE:PV_TABNM '[]' INTO LV_TAB_NAME.
ASSIGN (LV_TAB_NAME) TO <L_TAB>.
CLEAR <L_TAB>.
PERFORM APPEND_EXCLUDE_FUNCTIONS TABLES <L_TAB>
USING:CL_GUI_ALV_GRID=>MC_FC_SUBTOT. "小計
CL_GUI_ALV_GRID=>MC_FC_LOCAL_APPEND, "新增
CL_GUI_ALV_GRID=>MC_FC_LOCAL_INSERT, "插入
CL_GUI_ALV_GRID=>MC_FC_LOCAL_DELETE. "刪除
FORM APPEND_EXCLUDE_FUNCTIONS TABLES PT_TABLE
USING PV_VALUE.
DATA:LS_EXCLUDE TYPE UI_FUNCTION.
CLEAR LS_EXCLUDE.
LS_EXCLUDE-FUNCTION = PV_VALUE.
APPEND LS_EXCLUDE TO PT_TABLE.
ENDFORM.
ENDFORM.
Tool bar 事件
METHOD HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT.
METHOD HANDLE_TOOBAR.
PERFORM SET_TOOLBAR CHANGE E_OBJECT.
ENDMETHOD.
FORM SET_TOOLBAR CHANGE P_OBJECT TYPE REF TO CL_AV_EVENT_TOOLBAR_SET.
DATA:LS_TOOLBAR TYPE STB_BUTTON.
IF MODE = 'CHANGE'.
CLEAR LS_TOOLBAR.
MOVE '&LOCAL&APPEND' TO LS_TOOLBAR-FUNCTION.
MOVE 'Append Row' TO LS_TOOLBAR-QUICKINFO.
MOVE ICON_CREATE TO LS_TOOLBAR-ICON.
APPEND LS_TOOLBAR TO P_OBJECT->MT_TOOLBAR.
ENDIF.
ENDFORM.