1、目的:SAP ABAP ALV控件中添加一个按钮。
2、ALV控件中添加一个自定义的按钮,使用的ALV控件是:REUSE_ALV_GRID_DISPLAY
按下图去标准代码 SLVC_FULLSCREEN 中拷贝一个“GUI状态”过来,改一个自己的名字100(注意这个名字,后面代码中也要写),把它激活。
3、加一个自己的按钮,再把它激活一次:
4、ALV的代码如下:
FORM FRM_DISPLAY_ALV .
DATA: LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV ,
LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV ,
WS_FIELDGROUPS_TAB TYPE SLIS_T_SP_GROUP_ALV,
WS_LAYOUT TYPE SLIS_LAYOUT_ALV,
WS_SORTFIELDS_TAB TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE,
WS_EVENTS TYPE SLIS_T_EVENT.
DATA: lv_pos TYPE I VALUE 0.
DATA: TITLE TYPE LVC_TITLE.
DATA: COLOR TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE.
DEFINE macro_fieldcat.
lv_pos = lv_pos + 1.
ls_fieldcat-col_pos = lv_pos.
ls_fieldcat-tabname = 'GT_BASIC'.
ls_fieldcat-fieldname = &1.
ls_fieldcat-seltext_l = &2.
ls_fieldcat-inttype = &3.
ls_fieldcat-intlen = &4.
append ls_fieldcat to lt_fieldcat .
clear ls_fieldcat.
END-OF-DEFINITION.
macro_fieldcat:
'Z_REC_NO' '唯一的全局标识符 ' '' '',
'Z_REC_DATE' '创建日期' '' '',
'Z_REC_TIME' '创建时间' '' '',
'Z_REC_USER' '创建人 ' '' '',
'LIFNR' '供应商编号 ' '' '',
'KTOKK' '账户组' '' '',
'NAME1' '供应商名称1' '' '',
'BU_SORT1' '搜索词1' '' '',
'BU_SORT2' '搜索词2' '' '',
'STREET' '街道' '' '',
'HOUSE_NUM1' '门牌号 ' '' '',
'POST_CODE1' '邮政编码' '' '',
'COUNTRY' '国家' '' '',
'REGION' '地区' '' '',
'CITY1' '城市' '' '',
'LANGU' '语言' '' '',
'VERKF' '联系人 ' '' '',
'TEL_NUMBER' '电话' '' '',
'FAX_NUMBER' '传真' '' '',
'SMTP_ADDR' '电子邮箱' '' '',
'TAXTYPE' '税号类别' '' '',
'TAXNUM' '税号' '' '',
'GROUP_FEATURE' '专业类别' '' '',
'TYPE' '处理结果(S:成功,E:失败,X:不处理)' '' '',
'MESSAGE' '消息文本' '' '',
'MDATE' '处理日期' '' '',
'MTIME' '处理时间' '' '',
'MUSER' '处理人' '' ''.
WS_LAYOUT-ZEBRA = 'X'.
WS_LAYOUT-GET_SELINFOS = 'X'.
WS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
WS_LAYOUT-DETAIL_POPUP = 'X'.
*******排序
* WS_SORTFIELDS_TAB-FIELDNAME = 'ERDAT'.
* WS_SORTFIELDS_TAB-UP = 'X'.
* APPEND WS_SORTFIELDS_TAB.
* CLEAR WS_SORTFIELDS_TAB.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'ALV_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
IS_LAYOUT = WS_LAYOUT
IT_FIELDCAT = LT_FIELDCAT
IT_SPECIAL_GROUPS = WS_FIELDGROUPS_TAB[]
IT_SORT = WS_SORTFIELDS_TAB[]
IT_EVENTS = WS_EVENTS[]
I_GRID_TITLE = TITLE
I_DEFAULT = 'X'
I_SAVE = 'A'
TABLES
T_OUTTAB = GT_BASIC
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.
FORM ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB.
CLEAR: PT_EXTAB[].
SET PF-STATUS '100'.
ENDFORM.
FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '&GO'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDFORM.
注意:
1、I_CALLBACK_PROGRAM = SY-REPID 参数 一定要存在,博主就是把它搞掉了,一直显示不出这个按钮来。
2、GUI的名称是100,一定要在这里 SET PF-STATUS '100'. 同名。
3、 I_CALLBACK_PF_STATUS_SET = 'ALV_STATUS_SET' 这里在设置自己的GUI。
4、 I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' 这里指定自己按钮响应的功能代码。