1、在工具栏添加自定义按钮
"需要先申明 SSCRFIELDS
TABLES: SSCRFIELDS.
*&---------------------------------------------------------------------*
*& SELECTION-SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN: FUNCTION KEY 1."系统预留了5个按钮
*&---------------------------------------------------------------------*
*& INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
"给自定义按钮添加图标和文本
PERFORM FRM_INIT_DATA1."通过 ICON_CREATE 函数添加
PERFORM FRM_INIT_DATA2."通过 smp_dyntxt 结构添加
*&----------------------------------------------------------------------
* AT SELECTION-SCREEN
*&----------------------------------------------------------------------
AT SELECTION-SCREEN.
"自定义按钮点击事件处理
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'."第一个按钮的功能码 系统预留的
PERFORM FRM_FC01.
WHEN OTHERS.
ENDCASE.
*&----------------------------------------------------------------------
* END-OF-SELECTION
*&----------------------------------------------------------------------
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_INIT_DATA1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_INIT_DATA1 .
DATA:LV_ICON_STR(255) TYPE C.
LV_ICON_STR = ICON_CHANGE."
CALL FUNCTION 'ICON_CREATE'
EXPORTING
NAME = LV_ICON_STR "图标名称 可在ICON表中查找
TEXT = '图标展示文本' "图标展示文本
INFO = '工具提示文本' "工具提示文本
IMPORTING
RESULT = LV_ICON_STR
EXCEPTIONS
ICON_NOT_FOUND = 1
OUTPUTFIELD_TOO_SHORT = 2
OTHERS = 3.
SSCRFIELDS-FUNCTXT_01 = LV_ICON_STR."按钮图标和文本赋值
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_INIT_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_INIT_DATA2 .
DATA: lv_functxt TYPE smp_dyntxt.
lv_functxt-icon_id = icon_export. "显示图标
lv_functxt-quickinfo = TEXT-003. "鼠标指向显示信息--下载模板
lv_functxt-icon_text = TEXT-003. "菜单文本--下载模板
SSCRFIELDS-FUNCTXT_01 = lv_functxt. "按钮图标和文本赋值
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FC01
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_FC01 .
"这里是点击自定义按钮后触发的处理逻辑
"下面是通过函数打开视图进行维护的功能逻辑,类似于SM30
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
EXPORTING
ACTION = 'U' "S = Display U = Change T=Transport
SHOW_SELECTION_POPUP = ' ' "是否显示选择画面
VIEW_NAME = 'ZMMV_R001' "视图名
NO_WARNING_FOR_CLIENTINDEP = 'X' "跨客户端是否显示警告
VARIANT_FOR_SELECTION = ' ' "变式名
CHECK_DDIC_MAINFLAG = ' ' "查看是否为可维护对象
EXCEPTIONS
CLIENT_REFERENCE = 1
FOREIGN_LOCK = 2
INVALID_ACTION = 3
NO_CLIENTINDEPENDENT_AUTH = 4
NO_DATABASE_FUNCTION = 5
NO_EDITOR_FUNCTION = 6
NO_SHOW_AUTH = 7
NO_TVDIR_ENTRY = 8
NO_UPD_AUTH = 9
ONLY_SHOW_ALLOWED = 10
SYSTEM_FAILURE = 11
UNKNOWN_FIELD_IN_DBA_SELLIST = 12
VIEW_NOT_FOUND = 13
MAINTENANCE_PROHIBITED = 14
OTHERS = 15.
ENDFORM.
效果:
2、通过PUSHBUTTON语句添加按钮
"需要先申明 SSCRFIELDS
TABLES: SSCRFIELDS.
*&---------------------------------------------------------------------*
*& SELECTION-SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK B01 WITH FRAME TITLE TITLE1."定义一个框
"在BLOCK中,按钮的起始位置和长度定义都不能超过79
SELECTION-SCREEN: BEGIN OF LINE."里面的按钮都在同一行
SELECTION-SCREEN: PUSHBUTTON 5(30) BUT1 USER-COMMAND CLI1.
SELECTION-SCREEN: PUSHBUTTON 40(30) BUT2 USER-COMMAND CLI2.
SELECTION-SCREEN: PUSHBUTTON 75(30) BUT3 USER-COMMAND CLI3.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: SKIP 1."空1行
SELECTION-SCREEN: BEGIN OF LINE."里面的按钮都在同一行
SELECTION-SCREEN: PUSHBUTTON 5(30) BUT4 USER-COMMAND CLI4.
SELECTION-SCREEN: PUSHBUTTON 40(30) BUT5 USER-COMMAND CLI5.
SELECTION-SCREEN: PUSHBUTTON 75(30) BUT6 USER-COMMAND CLI6.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: END OF BLOCK B01.
"在BLOCK中,按钮的起始位置和长度定义都不能超过83
SELECTION-SCREEN: SKIP 1."空1行
SELECTION-SCREEN: BEGIN OF LINE."里面的按钮都在同一行
SELECTION-SCREEN: PUSHBUTTON 7(30) BUT7 USER-COMMAND CLI7.
SELECTION-SCREEN: PUSHBUTTON 42(30) BUT8 USER-COMMAND CLI8.
SELECTION-SCREEN: PUSHBUTTON 77(30) BUT9 USER-COMMAND CLI9.
SELECTION-SCREEN: END OF LINE.
*&---------------------------------------------------------------------*
*& INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
"给自定义按钮添加图标和文本
BUT1 = ICON_CREATE && 'BUTTON1'."直接进行赋值
BUT2 = |{ ICON_CREATE }BUTTON2|."直接进行赋值
BUT3 = ICON_DELETE && 'BUTTON1'."直接进行赋值
PERFORM FRM_INIT_DATA1 USING ICON_CREATE 'BUTTON4' 'BUTTON4' BUT4."通过 ICON_CREATE 函数添加
PERFORM FRM_INIT_DATA1 USING ICON_CHANGE 'BUTTON5' 'BUTTON5' BUT5."通过 ICON_CREATE 函数添加
PERFORM FRM_INIT_DATA1 USING ICON_DELETE 'BUTTON6' 'BUTTON6' BUT6."通过 ICON_CREATE 函数添加
PERFORM FRM_INIT_DATA1 USING ICON_CREATE 'BUTTON7' 'BUTTON7' BUT7."通过 ICON_CREATE 函数添加
PERFORM FRM_INIT_DATA1 USING ICON_CHANGE 'BUTTON8' 'BUTTON8' BUT8."通过 ICON_CREATE 函数添加
PERFORM FRM_INIT_DATA1 USING ICON_DELETE 'BUTTON9' 'BUTTON9' BUT9."通过 ICON_CREATE 函数添加
"无法通过 smp_dyntxt 结构添加图标和文本
*&----------------------------------------------------------------------
* AT SELECTION-SCREEN
*&----------------------------------------------------------------------
AT SELECTION-SCREEN.
"自定义按钮点击事件处理
CASE SSCRFIELDS-UCOMM.
WHEN 'CLI1'."第一个按钮的功能码
MESSAGE '您点击了按钮:' && BUT1 TYPE 'I'.
WHEN 'CLI2'."第2个按钮的功能码
MESSAGE '您点击了按钮:' && BUT2 TYPE 'I'.
WHEN 'CLI3'."第3个按钮的功能码
MESSAGE '您点击了按钮:' && BUT3 TYPE 'I'.
WHEN 'CLI4'."第4个按钮的功能码
MESSAGE '您点击了按钮:' && BUT4 TYPE 'I'.
WHEN 'CLI5'."第5个按钮的功能码
MESSAGE '您点击了按钮:' && BUT5 TYPE 'I'.
WHEN 'CLI6'."第6个按钮的功能码
MESSAGE '您点击了按钮:' && BUT6 TYPE 'I'.
WHEN 'CLI7'."第7个按钮的功能码
MESSAGE '您点击了按钮:' && BUT7 TYPE 'I'.
WHEN 'CLI8'."第8个按钮的功能码
MESSAGE '您点击了按钮:' && BUT8 TYPE 'I'.
WHEN 'CLI9'."第9个按钮的功能码
MESSAGE '您点击了按钮:' && BUT9 TYPE 'I'.
WHEN OTHERS.
ENDCASE.
*&----------------------------------------------------------------------
* END-OF-SELECTION
*&----------------------------------------------------------------------
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_INIT_DATA1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_INIT_DATA1 USING PV_NAME
PV_TEXT
PV_INFO
PV_BUT.
DATA:LV_ICON_STR(255) TYPE C.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
NAME = PV_NAME "图标名称 可在ICON表中查找
TEXT = PV_TEXT "图标展示文本
INFO = PV_INFO "工具提示文本
IMPORTING
RESULT = LV_ICON_STR
EXCEPTIONS
ICON_NOT_FOUND = 1
OUTPUTFIELD_TOO_SHORT = 2
OTHERS = 3.
PV_BUT = LV_ICON_STR."按钮图标和文本赋值
ENDFORM.
效果:
注意:
1、在BLOCK中,按钮的起始位置和长度定义都不能超过79,否则会报错
2、不在BLOCK中,按钮的起始位置和长度定义都不能超过83,否则会报错