CL_SALV_TABLE检查已修改的表

2020-09-05 22:43发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我不习惯CL_SALV_TABLE。 我将一个字段设为可编辑,当我单击"保存"按钮时,它告诉我已被修改以在ZTABLE中更新的记录。

由于我不太习惯Abap OO,因此将提供一个示例代码。

此致

大卫

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我不习惯CL_SALV_TABLE。 我将一个字段设为可编辑,当我单击"保存"按钮时,它告诉我已被修改以在ZTABLE中更新的记录。

由于我不太习惯Abap OO,因此将提供一个示例代码。

此致

大卫

付费偷看设置
发送
4条回答
hongfeng1314
1楼-- · 2020-09-05 23:29

你好

感谢您的回答,但是我正在修改的程序使用CL_SALV_TABLE。 反正我可以为修改后的字段调用另一个类吗?

此致

David

小灯塔
2楼-- · 2020-09-05 23:46

请使用COMMENT按钮发表评论,问题,添加详细信息等。ANSWER仅是提出解决方案,请在答案区域的右侧显示SAP文本: 在回答之前,只应在提出海报问题的解决方案时提交答案。

半个程序猿
3楼-- · 2020-09-05 23:28

创建189行屏幕添加容器并将其命名为容器

示例程序:

SPAN {font-family:" Courier New"; 字体大小:10pt; 颜色:#000000; 背景:#FFFFFF; } .L0S31 {font-style:italic; 颜色:#808080; } .L0S32 {color:#3399FF; } .L0S33 {color:#4DA619; } .L0S52 {color:#0000FF; } .L0S55 {color:#800080; } .L0S70 {color:#808080; }

**&-------------------------------------------- ------------------------- *
**&报告ZTEST_GUNA
**&---------- -------------------------------------------------- --------- *
**&
**&---------------------------- ----------------------------------------- **
报告ZTEST_GUNA。
表:MARA。
数据:it_tab的开头出现0,
像mara-matnr一样的matnr,像mara-erda一样的
erda,"创建日期
像mara-ernam一样的ernam,"创建的人< br> pstat像mara-pstat," main stat
lvorm像mara-lvorm," flg for delete
mtart像mara-mtart," mat type
meins像mara-meins," uom

数据:wa_it_tab像it_tab的一行。 "制作工作区
数据:i_modified类型的mara标准表",用于获取修改后的行
w_modified类型mara。
类别lcl_events_d0100定义为延迟。
数据:event_receiver1类型参考为lcl_events_d0100,
i_selrows TYPE lvc_t_row,"选定的行
w_selected_rows TYPE lvc_s_row。
* -------------------------------- ------------------------------------- *
* CLASS lcl_events_d0100定义
*- -------------------------------------------------- ------------------ *
类别lcl_events_d0100的定义。
公共部分。
方法
handle_hotspot_click
事件cl_gui_alv_grid的hotspot_click
导入
e_row_id
e_column_id
es_row_no
发件人。
*-用于ALV按钮的代码添加
*-用于放置按钮
方法handle_toolbar_set
cl_gui_alv_grid
的工具栏
导入
e_object
e_interactive。
*-单击按钮的用户命令
方法handle_user_command
EVENT用户命令OF cl_gui_alv_grid
导入
e_ucomm。
ENDCLASS。 " lcl_events_d0100定义
类型池cndp。
数据ok_code类型sy-ucomm。
* ------------------------- --------------------------------------------- *
* 对于变量
* -------------------------------------------- -------------------------- *
DATA st_var TYPE变量。
DATA save TYPE c。
st_var-report = 'YKC_ALV_OOPS'。
保存='A'。
* --------------------------------- ------------------------------------- *
*用于布局
*- -------------------------------------------------- ------------------ *
数据loyo类型lvc_s_layo。
loyo-斑马='X'。
loyo-detailinit ='X'。< br> loyo-info_fname ='RED'。
* ------------------------------------ ---------------------------------- *
*现场目录
* ---- -------------------------------------------------- ---------------- *
数据fcat类型lvc_t_fcat。
数据wa_fcat类似于fcat的线。
*-工具栏按钮的声明
DATA: ty_toolbar TYPE stb_button。
数据:e_object TYPE REF TO cl_ alv_event_toolbar_set,
io_alv_toolbar类型参考至cl_alv_event_toolbar_set。
*-自定义容器
数据容器类型参考至cl_gui_custom_container。
数据参考_网格类型REF至cl_gui_alv_grid。

container_name ='CONTAINER'。
创建对象ref_grid
导出
i_parent =容器。
* -------------------- ------------------------------------------------- *
* CLASS lcl_events_d0100实施
* --------------------------------------- ------------------------------ *
类别lcl_events_d0100实施。
方法handle_hotspot_click。
DATA:ls_col_id 类型lvc_s_col。
读取表it_​​tab放入wa_it_tab
索引e_row_id-index。
如果sy-subrc =0。
检查(wa_it_tab-matnr不是INITIAL INITIAL)。
案例e_column_id-fieldname。
何时'MATNR'。
离开程序。
何时其他人。
结束语。
呼叫方法ref_grid-> set_current_cell_via_id
导出
is_row_id = e_row_id
is_column_id = ls_co l_id。
ENDIF。
ENDMETHOD。 " handle_hotspot_click
** ---处理工具栏的方法
方法handle_toolbar_set。
清除ty_toolbar。
ty_toolbar-function ='EDIT'。
ty_toolbar-butn_type =0。
ty_toolbar -text ='EDIT'。
将ty_toolbar附加到e_object-> mt_toolbar。
ENDMETHOD。
方法handle_user_command。
数据:wr_data_changed类型引用到cl_alv_changed_data_protocol。
数据:lt_rows类型lvc_t br> lt_index类型lvc_s_row-index。
案例e_ucomm。
进行"编辑"时。
执行save_database。
调用方法ref_GRID-> REFRESH_TABLE_DISPLAY。
ENDCASE。
ENDHOHOD。
。 > ENDCLASS。
开始选择。
PERFORM GET。
PERFORM field_catalog。

表单GET。
将matnr ersda ernam pstat lvorm mtart meins
选择到表it_tab中
来自mara
,其中matnr NE ABAP_FALSE。
最终形式。

形式field_catalog。
刷新fcat。
数据:lv_pos类型i。
lv_pos = lv_pos + 1 。
wa_fcat-colname ='MATNR'。
wa_fcat-coltext ='材料编号'。
wa_fcat-col_pos = lv_pos。
wa_fcat-hotspot ='X'。
wa_fcat-outputlen = 18.
追加wa_fcat到fcat。
清除wa_fcat。
lv_pos = lv_pos + 1.
wa_fcat- 字段名称='ERSDA'。
wa_fcat-coltext ='创建日期'。
wa_fcat-col_pos = lv_pos。
wa_fcat-edit ='X'。
wa_fcat-outputlen = 18.
APPEND wa_fcat到fcat。
清除wa_fcat。
lv_pos = lv_pos + 1.
wa_fcat-fieldname ='LVORM'。
wa_fcat-coltext ='删除标记'。
wa_fcat-col_pos = lv_pos。
wa_fcat-outputlen = 18.
追加wa_fcat TO fcat。
清除wa_fcat。
lv_pos = lv_pos + 1.
wa_fcat字段名称='MTART'。
wa_fcat -coltext ='材料类型'。
wa_fcat-col_pos = lv_pos。
wa_fcat-outputlen =18。
追加wa_fcat到fcat。
清除wa_fcat。
lv_pos = lv_pos + 1. < br> wa_fcat-fieldname ='MEINS'。
wa_fcat-coltext ='UOM'。
wa_fcat-col_pos = lv_pos。
wa_fcat-outputlen =18。
将wa_fcat附加到fcat。
CLEAR wa_fcat。
创建对象event_receiver1。

SET HANDLER event_r eceiver1-> handle_toolbar_set FOR ref_grid。
SET HANDLER event_receiver1-> handle_user_command FOR ref_grid。
SET HANDLER event_receiver1-> handle_hotspot_click FOR ref_grid。

呼叫方法ref_grid-> PORT

i_save =保存
is_layout = loyo
更改
it_outtab = it_tab []
it_fieldcatalog = fcat。
调用屏幕100。
终端格式。
< br>模块STATUS_0100输出。
调用方法ref_grid-> register_edit_event
导出i_event_id = cl_gui_alv_grid => mc_evt_modified。
SET PF-STATUS'GUI'。
SET TITLEBAR'TITLE'。
最终模块 。

模块退出输入。
案例ok_code。
何时'EXIT'。
何时'BACK'。
何时'CANCEL'。
清除ok_code。
离开程序。
ENDCASE。
endmodule。

FORM SAVE_DATABASE。
*-获取选定的行索引
调用方法ref_grid-> get_selected_rows
导入et_index_rows = i_selrows 。
*-通过索引捕获se的值 选择的行
将i_selrows循环到w_selected_rows。
读取表it_​​tab到wa_it_tab INDEX w_selected_rows-index。
如果sy-subrc EQ0。
移动wa_it_tab到w_modified。
APPEND i_modified。
ENDIF。
ENDLOOP。
从表i_modified。
ENDFORM修改mara。

Aaron 3364
4楼-- · 2020-09-05 23:42

我认为OP希望了解您的代码是关于什么的。 ..更好的方法是,给他一条鱼或学习他如何钓鱼?

一周热门 更多>

向帮助了您的网友说句感谢的话吧!