之前發表過一篇關於SM30增強的文章
【ABAP隨筆】SM30常見增強操作-自動帶描述
,今天算是一點補充:使用EVENT來實現刪除前的檢查
方法1-增加事件-EVENT
TCODE: SE54 輸入視圖名稱,然后點擊環境->事件
添加序號為03的條目,寫入包含檢查代碼的例程名稱
保存后,點擊編輯器,編寫代碼
說明:對於下面的代碼主要有幾點說明:
-
EXTRACT-MARK字段為X表示選中了該行
-
文中代碼為當CONTEXT = '標准訂單'時,MARK = SPACE,同時報出警告不允許刪除
-
注意在執行SM30功能前需要激活程序,保存SE54的配置,然后退出,在運行SM30(PS:我在測試的時候一直都是保存,激活程序,沒有退出SE54配置界面,測試SM30一直不行,導致我一度懷疑維護事件03不能實現刪除前檢查的功能)
FORM frm_before_delete.
FIELD-SYMBOLS <field> TYPE any.
FIELD-SYMBOLS <value> TYPE any.
DATA ls_zvjxzhu TYPE zvjxzhu_01.
DATA lv_message TYPE c.
LOOP AT extract.
ASSIGN COMPONENT 'MARK' OF STRUCTURE extract TO <field>.
IF <field> IS ASSIGNED AND <field> IS NOT INITIAL.
ASSIGN COMPONENT 'CONTEXT' OF STRUCTURE extract TO <value>.
IF sy-subrc EQ 0 AND <value> = '標准訂單'.
lv_message = 'X'.
clear <field>.
MODIFY extract.
ENDIF.
ENDIF.
ENDLOOP.
IF lv_message = 'X'.
MESSAGE '標准訂單不允許刪除' TYPE 'I' DISPLAY LIKE 'S'.
ENDIF.
ENDFORM.
方法2-直接在函數組屏幕過程中修改代碼
對於這個方法2點說明:
-
VIM_MARKED表示是否選擇該行
-
FUNCTION為當前功能按鈕,刪除為'DELE'
MODULE delete_before_check INPUT.
DATA ls_zvjxzhu TYPE zvjxzhu_01.
IF vim_marked NE space AND function = 'DELE'.
IF zvjxzhu_01-context = '標准訂單'.
CLEAR vim_marked.
ENDIF.
ENDIF.
ENDMODULE.
第一種方法的效果如下圖: