可编辑的OOPS ALV网格-更新行问题

2020-09-25 05:02发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)长时间旅行后试图进入ALV .....

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

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


长时间旅行后试图进入ALV ...我有问题。

我已经建立了可以正常工作的可编辑ALV。 可以根据需要输出字段,也可以输出希望编辑的字段。 它基本上是一个自定义表,完成后我将其保存回数据库。 我的问题是,当我按下"保存"按钮时,我的内部表无法获取对数据所做的更改,而且我不知道要保存回数据库的内容。 这是我构建网格的地方...

 *&---------------------------------------------  ------------------------ *
 *&表格CREATE_AND_INIT_ALV
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 FORM create_and_init_alv更改pt_outtab喜欢gt_outtab []
                                   pt_fieldcat TYPE lvc_t_fcat
                                   pt_exclude TYPE ui_functions。

   创建对象g_custom_container
     出口
       container_name = g_container。
   创建对象g_grid
     出口
       i_parent = g_custom_container。

 *建立野猫并设置专栏团队
 *启用编辑。 为下拉列表框分配一个句柄。
   执行build_fieldcat更改pt_fieldcat。

 *(可选)将通用功能限制为"仅更改"。
 *(用户将无法添加新行)。
   PERFORM exclude_tb_functions更改pt_exclude。

 ENDFORM。  " CREATE_AND_INIT_ALV 

这是我填充网格的地方

 *&---------------------------------------------  ------------------------ *
 *表格REFRESH_DATA
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 * <-P_GT_OUTTAB文字
 * -------------------------------------------------  --------------------- *
 FORM refresh_data使用pa_initial就像wa_initial
                    更改pt_outtab喜欢gt_outtab []
                             pt_fieldcat TYPE lvc_t_fcat
                             pt_exclude TYPE ui_functions。


 *从数据库表中获取数据。 设置基准以进行比较
   清除pt_outtab。
   SELECT * FROM ztable INTO TABLE pt_outtab。
   IF sy-subrc NE 0。
   其他。
     gt_outtab2 = pt_outtab。
   万一。

   如果pa_initial ='1'。
     g_grid-> register_edit_event(i_event_id = cl_gui_alv_grid => mc_evt_enter)。
     呼叫方法g_grid-> set_table_for_first_display
       出口
         it_toolbar_clusion = pt_exclude
       改变
         it_fieldcatalog = pt_fieldcat
         it_outtab = pt_outtab。

 *设置可编辑单元格以准备初始输入
     调用方法g_grid-> set_ready_for_input
       出口
         i_ready_for_input = 1。
   其他。
     调用方法g_grid-> refresh_table_display。
   万一。
 ENDFORM。

因此,我希望我能够访问发送给ALV-GT_OUTTAB的同一表中的更新日期? 不幸的是,要获取表中的旧值而不是我编辑的新值? 所以保存不会做任何事情?

 FORM save_total_updates更改pt_outtab喜欢gt_outtab []
                                 pt_outtab2喜欢gt_outtab []。

   清除gt_modified。

   循环至pt_outtab INTO gs_modified。
   使用键resrc= gs_modified-resrc读取表pt_outtab2 INTO gs_original。
     如果sy-subrc = 0。
       IF gs_modified NE gs_original。
         追加gs_modified至gt_modified。
       万一。
     万一。
   结局。

   从表gt_modified修改ztable。
   如果sy-subrc = 0。
     消息"保存的值"类型为" I"。
   其他。
     消息"错误保存值"类型" I"。
   万一。
 ENDFORM。
付费偷看设置
发送
3条回答
SAP小菜
1楼 · 2020-09-25 05:33.采纳回答

首先注册alv网格类的两个事件

这些是MC_EVT_ENTER
MC_EVT_MODIFIED

使用方法REGISTER_EDIT_EVENT

在上面之后,您还应该再处理一个事件,即DATA_CHANGED_FINISHED

jovirus
2楼-- · 2020-09-25 05:19

您在这里将我置于正确的位置。 另外-称为方法CL_GUI_ALV_GRID-> CHECK_CHANGED_DATA。 此方法执行更改验证并触发事件DATA_CHANGED。

Baoming ROSE
3楼-- · 2020-09-25 05:21

使用方法G_GRID-> CHECK_CHANGED_DATA()

一周热门 更多>