SAP ABAP OO工具栏按钮代码描述清单

该文详细列出了SAP系统中一些常见的用户界面功能与其对应的代码,包括明细检查、刷新、剪切与复制、插入与删除行、排序、查找、设置筛选器、总计计算、打印及视图操作等,同时展示了如何排除某些功能的使用。

图标与对应的 功能码
明细 &DETAIL
检查 &CHECK
刷新 &REFRESH
剪切 &LOCAL&CUT
复制文本 &LOCAL&COPY
插入总览 &MB_PASTE
撤销 &LOCAL&UNDO
附加行   &LOCAL&APPEND
插入行 &LOCAL&INSERT_ROW
删除行 &LOCAL&DELETE_ROW
复制行   &LOCAL&COPY_ROW
降序 &SORT_DSC
升序 &SORT_ASC
查找 &FIND
查找下一个 &FIND_MORE
设置筛选器 &FILTER
总计 &MB_SUM 
小计 &SUBTOT /&MB_SUBTOT
打印 &PRINT
视图 &VIEW
输出 &MB_EXPORT
格式 &MB_VARIANT
显示图形 &GRAPH
最终用户文档 &INFO
 
排除按钮,用的时候直接拷贝
  "明细
  ls_exclude = '&DETAIL'.
  APPEND ls_exclude TO pt_exclude.
 
  "检查
  ls_exclude = '&CHECK'.
  APPEND ls_exclude TO pt_exclude.
 
  "刷新
  ls_exclude = '&REFRESH'.
  APPEND ls_exclude TO pt_exclude.
 
  "剪切
  ls_exclude = '&LOCAL&CUT'.
  APPEND ls_exclude TO pt_exclude.
 
  "复制文本
  ls_exclude = '&LOCAL&COPY'.
  APPEND ls_exclude TO pt_exclude.
 
  "插入总览
  ls_exclude = '&MB_PASTE'.
  APPEND ls_exclude TO pt_exclude.
 
  "撤销
  ls_exclude = '&LOCAL&UNDO'.
  APPEND ls_exclude TO pt_exclude.
 
  "附加行
  ls_exclude = '&LOCAL&APPEND'.
  APPEND ls_exclude TO pt_exclude.
 
  "插入行
  ls_exclude ='&LOCAL&INSERT_ROW'.
  APPEND ls_exclude TO pt_exclude.
 
  "删除行
  ls_exclude ='&LOCAL&DELETE_ROW'.
  APPEND ls_exclude TO pt_exclude.
 
  "复制行
  ls_exclude ='&LOCAL&COPY_ROW'.
  APPEND ls_exclude TO pt_exclude.
 
  "降序
  ls_exclude = '&SORT_DSC'.
  APPEND ls_exclude TO pt_exclude.
 
  "升序
  ls_exclude = '&SORT_ASC'.
  APPEND ls_exclude TO pt_exclude.
 
  "查找
  ls_exclude = '&FIND'.
  APPEND ls_exclude TO pt_exclude.
 
  "查找下一个
  ls_exclude = '&FIND_MORE'.
  APPEND ls_exclude TO pt_exclude.
 
  "设置筛选器
  ls_exclude = '&FILTER'.
  APPEND ls_exclude TO pt_exclude.
 
  "总计
  ls_exclude = '&MB_SUM '.
  APPEND ls_exclude TO pt_exclude.
 
  "小计
  ls_exclude = '&SUBTOT'.
  APPEND ls_exclude TO pt_exclude.
 
  "打印
  ls_exclude = '&PRINT'.
  APPEND ls_exclude TO pt_exclude.
 
  "视图
  ls_exclude = '&VIEW'.
  APPEND ls_exclude TO pt_exclude.
 
  "输出
  ls_exclude = '&MB_EXPORT'.
  APPEND ls_exclude TO pt_exclude.
 
  "格式
  ls_exclude = '&MB_VARIANT'.
  APPEND ls_exclude TO pt_exclude.
 
  "显示图形
  ls_exclude = '&GRAPH'.
  APPEND ls_exclude TO pt_exclude.
 
  "最终用户文档
  ls_exclude = '&INFO'.
  APPEND ls_exclude TO pt_exclude.
 

功能代码: 函数文本: 图标名称:

&ETA         细节 ICON_SELECT_DETAIL
&EB9         调用报告 ICON_TABLE_SETTINGS
&REFRESH 刷新 ICON_REFRESH
&ALL 全部选择 ICON_SELECT_ALL
&SAL 取消全选 ICON_DESELECT_ALL 
&OUP 按升序排列 ICON_SORT_UP
&ODN 按降序排列 ICON_SORT_DOWN 
&ILT 设置过滤器 ICON_FILTER 
&UMC 总计 ICON_SUM 
&SUM 小计 ICON_INTERMEDIATE_SUM 
&RNT_PREV 打印预览 ICON_LAYOUT_CONTROL 
&VEXCEL Microsoft Excel ICON_XLS
&AQW 字处理... ICON_WORD_PROCESSING 
%PC 本地文件 ... ICON_EXPORT
%SL 邮件收件人 ICON_MAIL
&ABC ABC 分析 ICON_ABC 
&GRAPH 图形 ICON_GRAPHICS 
&OL0 更改布局... ICON_ALV_VARIANTS 
&OAD 选择格式... ICON_ALV_VARIANT_CHOOSE 
&AVE 保存格式... ICON_ALV_VARIANT_SAVE 
&INFO 信息 ICON_INFORMATION

<think>我们正在讨论的是在SAPABAP中使用OOALV(面向对象的ALV)时如何获取用户正在编辑的行号。根据引用[2]中提到的内容,OOALV通过事件模型来处理用户交互,例如DATA_CHANGED_FINISHED事件可以用于捕获用户编辑完成后的操作。然而,我们可能需要的是在编辑过程中获取当前正在编辑的行,或者是在编辑完成后知道哪些行被编辑了。实际上,要获取“正在编辑”的行号(即当前焦点所在的行),我们可以使用ALV网格的GET_CURRENT_CELL方法。这个方法可以返回当前选中单元格的信息,包括行号和列号。另外,如果我们要在用户编辑完成后获取被修改的行,可以通过处理DATA_CHANGED_FINISHED事件,该事件的参数ET_GOOD_CELLS会包含所有成功修改的单元格信息,我们可以从中提取行号。以下将分别介绍这两种方法:方法一:获取当前焦点所在的行(即当前编辑的行)使用CL_GUI_ALV_GRID的GET_CURRENT_CELL方法。方法二:在编辑完成后获取被修改的行通过注册DATA_CHANGED_FINISHED事件,并在事件处理程序中分析参数ET_GOOD_CELLS来获取被修改的行。详细步骤:1.定义事件接收器类(如果还没有的话):引用[2]中给出了一个事件接收器的框架,我们可以在此基础上扩展。2.在事件处理方法中获取行号:方法一:获取当前焦点所在行在需要的时候(比如用户点击某个按钮时),可以调用以下代码:DATA:ls_cellTYPElvc_s_cell.CALLMETHODo_alv_grid->get_current_cellIMPORTINGes_row_id=ls_cell-row_id"当前行号(索引)es_col_id=ls_cell-col_id."当前列号注意:行号存储在ls_cell-row_id中,这是一个索引值(从1开始)。方法二:在DATA_CHANGED_FINISHED事件中获取被修改的行在事件处理程序方法中,参数ET_GOOD_CELLS是一个LVC_T_MODI类型的表,它包含所有被修改成功的单元格信息。每个单元格信息都是一个结构LVC_S_MODI,其中包含行号(ROW_ID)和字段名(FIELDNAME)等。我们可以遍历这个表来获取所有被修改的行号。注意,同一行可能被修改多次,但我们只关心行号,所以可以收集不重复的行号。示例代码(事件处理程序中):METHODhandle_data_changed_finished.DATA:lt_rowsTYPETABLEOFlvc_index,"行索引表lv_rowTYPElvc_index.LOOPATet_good_cellsASSIGNINGFIELD-SYMBOL(<ls_cell>).lv_row=<ls_cell>-row_id.COLLECTlv_rowINTOlt_rows.ENDLOOP."现在lt_rows中存储了所有被修改过的行号(唯一)"接下来可以根据这些行号做处理ENDMETHOD.3.注册事件:在显示ALV之前,需要将事件接收器注册到ALV网格实例。示例代码:DATA:lo_eventsTYPEREFTOlcl_event_receiver.CREATEOBJECTlo_events.SETHANDLERlo_events->handle_modifyFORo_alv_grid."这里handle_modify是处理DATA_CHANGED_FINISHED事件的方法注意:DATA_CHANGED_FINISHED事件是在用户完成编辑(比如按回车或切换到其他单元格)时触发的。总结:-要实时获取当前编辑的行,使用GET_CURRENT_CELL方法(通常在需要的时候主动调用)。-要获取编辑完成后的行(可能多行),则通过事件DATA_CHANGED_FINISHED的ET_GOOD_CELLS参数获取。根据需求选择合适的方法。相关问题:1.如何获取OOALV中用户选中的多行?2.在OOALV中如何实现自定义工具栏按钮的事件处理?3.OOALV与传统的函数式ALV在事件处理机制上有什么主要区别?</think> 在 SAP ABAP OOALV 中获取正在编辑的行号,可以通过以下两种核心方法实现: ### 方法一:使用 `DATA_CHANGED` 事件(推荐) 当用户编辑单元格时触发该事件,可直接获取当前编辑的行索引: ```abap CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION. METHODS: " 注册单元格修改事件 handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed e_onf4. ENDCLASS. CLASS lcl_event_receiver IMPLEMENTATION. METHOD handle_data_changed. DATA: lt_cells TYPE lvc_t_modi. " 获取所有被修改的单元格 lt_cells = er_data_changed->mt_mod_cells. " 提取当前编辑的行号 LOOP AT lt_cells ASSIGNING FIELD-SYMBOL(<ls_cell>). DATA(lv_editing_row) = <ls_cell>-row_id. " 当前编辑行号 ENDLOOP. ENDMETHOD. ENDCLASS. " 注册事件(在显示ALV前调用) SET HANDLER lo_event->handle_data_changed FOR go_alv_grid. ``` **关键点**: 1. `er_data_changed->mt_mod_cells` 包含所有被修改的单元格信息 2. `<ls_cell>-row_id` 直接获取行索引(从1开始计数) 3. 支持多行编辑检测[^1] ### 方法二:使用 `GET_CURRENT_CELL` 方法 通过网格控件的属性获取当前焦点所在行: ```abap DATA: ls_cell TYPE lvc_s_cell. " 获取当前激活的单元格 go_alv_grid->get_current_cell( IMPORTING es_row_id = ls_cell " 包含行号的结构 ). DATA(lv_current_row) = ls_cell-row_id. " 当前编辑行号 ``` ### 两种方法的比较: | **特性** | `DATA_CHANGED` 事件 | `GET_CURRENT_CELL` 方法 | |-----------|---------------------|------------------------| | 触发时机 | 单元格值改变时自动触发 | 需主动调用 | | 多行支持 | 支持检测多行编辑 | 仅返回当前焦点行 | | 使用场景 | 值保存前实时校验 | 按钮点击时获取当前行 | | 性能影响 | 低(仅触发编辑时处理) | 即时获取无延迟 | ### 完整实现步骤: 1. **定义事件处理类**:继承 `CL_GUI_ALV_GRID` 实现自定义事件类 2. **注册事件**: ```abap go_alv_grid->register_edit_event( " 启用编辑事件 i_event_id = cl_gui_alv_grid=>mc_evt_modified ) ``` 3. **获取数据引用**: ```abap DATA(lo_data_ref) = go_alv_grid->get_frontend_fieldcatalog( ) ``` 4. **行号转换**:编辑完成后用 `LV_ROW_ID` 匹配内表行号 > ⚠️ **注意**:行索引从1开始计数,编辑时若存在筛选/排序,需调用 `GET_ROW_FROM_INDEX` 映射到内表实际行号[^2] ### 实际应用场景: ```abap " 删除当前编辑行示例 METHOD handle_data_changed. LOOP AT er_data_changed->mt_mod_cells INTO DATA(ls_mod). DELETE gt_data INDEX ls_mod-row_id. " 删除编辑行 ENDLOOP. go_alv_grid->refresh_table_display( ). " 刷新显示 ENDMETHOD. ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值