可编辑ALV的数据检查模板

本文介绍了一个 ABAP 程序示例,该程序利用 ALV Grid 控件实现数据展示及编辑功能。示例展示了如何加载数据到 ALV Grid 中,并实现了数据编辑、更改验证等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原贴地址:http://blog.chinaunix.net/u1/40527/showart.php?id=1859510

*&---------------------------------------------------------------------*
*& Report  Z_BARRY_ALV_DATACHANGED
*&
*&---------------------------------------------------------------------*
*& 更多参考程序:BCALV_EDIT_08
*&
*&---------------------------------------------------------------------*

REPORT   Z_BARRY_ALV_DATACHANGED.


DATABEGIN  OF  ITAB OCCURS  0  ,
        MBLNR LIKE  MSEG-MBLNR ,
        KOSTL LIKE  MSEG-KOSTL ,
      END  OF  ITAB .

DATA : OK_CODE LIKE  SY-UCOMM .
DATA : L_VALID(1TYPE  C .

DATA : GO_GRID             TYPE  REF  TO  CL_GUI_ALV_GRID,
      GO_CUSTOM_CONTAINER TYPE  REF  TO  CL_GUI_CUSTOM_CONTAINER.
DATA : GT_FIELDCAT TYPE  LVC_T_FCAT,
      GS_FIELDCAT TYPE  LVC_S_FCAT,
      GS_VARIANT  TYPE  DISVARIANT ,
      GT_FILT     TYPE  LVC_T_FILT,
      GS_FILT     TYPE  LVC_S_FILT,
      SLA         TYPE  LVC_S_LAYO .

CLASS  LCL_EVENT_RECEIVER DEFINITION  DEFERRED .
DATA : EVENT_RECEIVER TYPE  REF  TO  LCL_EVENT_RECEIVER.

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
CLASS  LCL_EVENT_RECEIVER DEFINITION .
  PUBLIC  SECTION .
    METHODS  HANDLE_DATA_CHANGED
        FOR  EVENT  DATA_CHANGED OF  CL_GUI_ALV_GRID
            IMPORTING  ER_DATA_CHANGED.
ENDCLASS .                    "lcl_event_receiver DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS  LCL_EVENT_RECEIVER IMPLEMENTATION .
  METHOD  HANDLE_DATA_CHANGED.
    PERFORM  HANDLE_DATA_CHANGED USING  ER_DATA_CHANGED.
  ENDMETHOD .                    "handle_data_changed
ENDCLASS .                    "lcl_event_receiver IMPLEMENTATION

INITIALIZATION .
*  gd_repid = sy-repid.
  PERFORM  FIELDCAT_INIT USING  GT_FIELDCAT[].

START-OF -SELECTION.
  CALL  SCREEN  0100  .

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
MODULE  USER_COMMAND_0100 INPUT .
  CASE  OK_CODE.
    WHEN  'BACK' .
      LEAVE  PROGRAM .
    WHEN  'ENTE' .
      PERFORM  ENTER.
    WHEN  'CHANGE' .
      PERFORM  CHANGE .
  ENDCASE .
  CLEAR  OK_CODE .
ENDMODULE .                 " USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*
*&      Form  load_data_into_grid
*&---------------------------------------------------------------------*
FORM  LOAD_DATA_INTO_GRID.
  SELECT  * FROM  MSEG INTO  CORRESPONDING FIELDS  OF  TABLE  ITAB
  UP  TO  20  ROWS  .

  SLA-CWIDTH_OPT = 'X' .
  SLA-ZEBRA      = 'X' .

  CALL  METHOD  GO_GRID->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      IS_VARIANT                    = GS_VARIANT
      I_SAVE                        = 'A'
      IS_LAYOUT                     = SLA
    CHANGING
      IT_OUTTAB                     = ITAB[]
      IT_FIELDCATALOG               = GT_FIELDCAT[]
    EXCEPTIONS
      INVALID_PARAMETER_COMBINATION = 1
      PROGRAM_ERROR                 = 2
      TOO_MANY_LINES                = 3
      OTHERS                         = 4 .

  CALL  METHOD  GO_GRID->SET_READY_FOR_INPUT "处于编辑状态
    EXPORTING
      I_READY_FOR_INPUT = 1 .

  CALL  METHOD  CL_GUI_CONTROL=>SET_FOCUS    "设置焦点在go_grid 上
    EXPORTING
      CONTROL  = GO_GRID .
ENDFORM .                    " load_data_into_grid


*&--------------------------------------------------------------------*
*&      Form  fieldcat_init
*&--------------------------------------------------------------------*
FORM  FIELDCAT_INIT USING  RT_FIELDCAT TYPE  LVC_T_FCAT.
  DATA : LS_FIELDCAT TYPE  LVC_S_FCAT.

  PERFORM  FRM_CATLG_SET USING :
  'MBLNR'   'X'  '凭证'        ''  'MBLNR'  'MSEG'  RT_FIELDCAT,
  'KOSTL'   ''  '成本中心'    'X'   ''       ''      RT_FIELDCAT.

ENDFORM .   "fieldcat_init

*---------------------------------------------------------------------*
*       FORM frm_catlg_set                                            *
*---------------------------------------------------------------------*
FORM  FRM_CATLG_SET USING  P_FIELD P_KEY P_TEXT P_EDIT REF_F REF_T
                          RT_FIELDCAT  TYPE  LVC_T_FCAT .
  DATA :  TMP_FIELDCAT TYPE  LVC_S_FCAT.

  TMP_FIELDCAT-FIELDNAME     =  P_FIELD.
  TMP_FIELDCAT-KEY            =  P_KEY .
  TMP_FIELDCAT-SCRTEXT_L     =  P_TEXT.
  TMP_FIELDCAT-EDIT           =  P_EDIT.
  TMP_FIELDCAT-REF_FIELD     = REF_F.
  TMP_FIELDCAT-REF_TABLE     = REF_T.

  APPEND  TMP_FIELDCAT TO  RT_FIELDCAT .
  CLEAR  TMP_FIELDCAT .
ENDFORM .                    " FRM_CATLG_SET

*&---------------------------------------------------------------------*
*&      Form  change
*&---------------------------------------------------------------------*
FORM  CHANGE  .
  DATA : LS_STABLE TYPE  LVC_S_STBL.
  LS_STABLE-ROW = 'X' .
  LS_STABLE-COL = 'X' .

  IF  GO_GRID->IS_READY_FOR_INPUT( ) = 0 .
    CALL  METHOD  GO_GRID->SET_READY_FOR_INPUT
      EXPORTING
        I_READY_FOR_INPUT = 1 .
  ELSE .
    CALL  METHOD  GO_GRID->CHECK_CHANGED_DATA  "把修改的内容更改到内表里
      IMPORTING
        E_VALID = L_VALID.
    CALL  METHOD  GO_GRID->SET_READY_FOR_INPUT
      EXPORTING
        I_READY_FOR_INPUT = 0 .
*    CALL METHOD go_grid->refresh_table_display.
    CALL  METHOD  GO_GRID->REFRESH_TABLE_DISPLAY
      EXPORTING
        IS_STABLE = LS_STABLE
      EXCEPTIONS
        FINISHED  = 1
        OTHERS     = 2 .
  ENDIF .
ENDFORM .                    " change


*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
MODULE  STATUS_0100 OUTPUT .
  SET  PF-STATUS 'MAIN100' .
  GS_VARIANT-REPORT  = SY-REPID.

  IF  GO_GRID IS  INITIAL .
    CREATE  OBJECT GO_GRID
      EXPORTING
        I_PARENT = CL_GUI_CONTAINER=>SCREEN0.
    CREATE  OBJECT EVENT_RECEIVER.

    SET  HANDLER  EVENT_RECEIVER->HANDLE_DATA_CHANGED FOR  GO_GRID.

    IF  SY-BATCH IS  INITIAL .
      CALL  METHOD  GO_GRID->REGISTER_EDIT_EVENT
        EXPORTING
          I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER. "回车时触发
*        i_event_id = cl_gui_alv_grid=>mc_evt_modified. "单元格更改触发
    ENDIF .

    PERFORM  LOAD_DATA_INTO_GRID.
  ENDIF .
ENDMODULE .                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Form  ENTER
*&---------------------------------------------------------------------*
FORM  ENTER .
  DATA : UCOMM LIKE  SY-UCOMM.

  UCOMM = '&DATA_SAVE' ." '&REFRESH'.
  CALL  METHOD  GO_GRID->SET_FUNCTION_CODE
    CHANGING
      C_UCOMM = UCOMM.
ENDFORM .                    " ENTER

*&---------------------------------------------------------------------*
*&      Form  HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
FORM  HANDLE_DATA_CHANGED USING  DATA_CHANGED TYPE  REF  TO  CL_ALV_CHANGED_DATA_PROTOCOL..
  FIELD -SYMBOLS: <FS_MOD_ROWS> TYPE  STANDARD  TABLE ,
                 <FS_CELLS> TYPE  LVC_T_MODI ,
                 <FS_CELL_WA> TYPE  LVC_S_MODI ,
                 <FS>    LIKE  LINE  OF  ITAB.

  IF  NOT  DATA_CHANGED->MP_MOD_ROWS IS  INITIAL .
    ASSIGN  DATA_CHANGED->MP_MOD_ROWS->* TO  <FS_MOD_ROWS>.
    ASSIGN  DATA_CHANGED->MT_MOD_CELLS TO  <FS_CELLS>.
    LOOP  AT  <FS_MOD_ROWS> ASSIGNING  <FS>.
      IF  <FS>-KOSTL = 'ABC'  .
        READ  TABLE  <FS_CELLS> INDEX  SY-TABIX ASSIGNING  <FS_CELL_WA>.
        CALL  METHOD  DATA_CHANGED->ADD_PROTOCOL_ENTRY
          EXPORTING
            I_MSGID     = 'OO'
            I_MSGTY     = 'E'
            I_MSGNO     = '000'
            I_MSGV1     = '不可以为ABC'
            I_FIELDNAME = 'KOSTL'
            I_ROW_ID    = <FS_CELL_WA>-ROW_ID
*            i_tabix     = tabix
             .
      ENDIF .
    ENDLOOP .
  ENDIF .
ENDFORM .                    " HANDLE_DATA_CHANGED


*CL_ALV_CHANGED_DATA_PROTOCOL参数的常用方法和属性
*
*方法                   用途
*MODIFY_CELL            修改指定位置单元格的值
*GET_CELL_VALUE         获取单元格的值
*ADD_PROTOCOL_ENTRY     弹出一个消息,必须使用系统标准的消息类
*MODIFY_PROTOCOL_ENTRY  修改消息
*PROTOCOL_IS_VISIBLE    是否显示错误信息提示
*REFRESH_PROTOCOL       删除错误消息
*
*属性                   用途
*MT_PROTOCOL            LOGs
*MT_MOD_CELLS           更新的单元格信息
*MP_MOD_ROWS            更新了的行的信息
*MT_GOOD_CELLS          正确的CELL的值
*MT_DELETED_ROWS        被删除的行信息
*MT_INSERTED_ROWS       新插入的行信息

<think>我们正在讨论ABAP ALV可编辑数据更新的实现。用户需要示例代码。 在ABAP中,实现ALV可编辑并更新数据通常涉及以下步骤: 1. 定义内表结构,用于显示和编辑数据。 2. 创建ALV网格控件,并设置可编辑。 3. 实现数据修改的事件处理(例如DATA_CHANGED事件)。 4. 提供保存按钮或类似机制,将修改写回数据库。 注意:ALV有两种主要形式:函数式ALV(如REUSE_ALV_GRID_DISPLAY)和面向对象的ALV(CL_GUI_ALV_GRID)。这里我们使用面向对象的ALV,因为它更灵活,更适合可编辑场景。 下面是一个简单的示例,展示如何创建一个可编辑ALV并更新数据数据库表。 假设我们有一个数据库表ZTEST_TABLE(字段:MANDT, KEY_FIELD, VALUE_FIELD),我们将允许用户编辑VALUE_FIELD字段。 步骤: 1. 定义内表和工作区,结构同数据库表。 2. 创建屏幕(例如1000),放置一个容器控件和一个ALV网格。 3. 实例化ALV网格,设置内表数据,并启用编辑。 4. 注册事件处理程序,特别是DATA_CHANGED事件,用于验证输入。 5. 实现保存逻辑,将内表更改写回数据库。 代码示例: ```abap REPORT z_alv_editable_example. * 定义数据库表结构 TABLES: ztest_table. * 定义内表和工作区 DATA: gt_data TYPE TABLE OF ztest_table, gs_data TYPE ztest_table. * 定义ALV相关对象 DATA: go_container TYPE REF TO cl_gui_custom_container, go_grid TYPE REF TO cl_gui_alv_grid, gt_fieldcat TYPE lvc_t_fcat, gs_fieldcat TYPE lvc_s_fcat, gs_layout TYPE lvc_s_layo. * 定义事件处理类 CLASS lcl_event_handler DEFINITION. PUBLIC SECTION. METHODS: handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed. ENDCLASS. CLASS lcl_event_handler IMPLEMENTATION. METHOD handle_data_changed. " 这里可以添加数据更改时的验证逻辑 " 例如,检查字段的有效性 ENDMETHOD. ENDCLASS. DATA: go_event_handler TYPE REF TO lcl_event_handler. * 选择屏幕 SELECTION-SCREEN BEGIN OF SCREEN 1000 AS WINDOW. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN END OF SCREEN 1000. START-OF-SELECTION. " 从数据库获取数据 SELECT * FROM ztest_table INTO TABLE gt_data. " 创建并显示ALV CALL SCREEN 1000. * 屏幕1000的PBO模块 MODULE status_1000 OUTPUT. SET PF-STATUS 'STATUS1000'. SET TITLEBAR 'TITLE1000'. " 创建容器 IF go_container IS INITIAL. CREATE OBJECT go_container EXPORTING container_name = 'CONTAINER1'. " 创建ALV网格 CREATE OBJECT go_grid EXPORTING i_parent = go_container. " 设置布局(可编辑) gs_layout-edit = 'X'. " 允许整个网格编辑 gs_layout-sel_mode = 'A'. " 选择模式 " 设置字段目录 PERFORM build_fieldcatalog. " 设置事件处理 CREATE OBJECT go_event_handler. SET HANDLER go_event_handler->handle_data_changed FOR go_grid. " 显示ALV CALL METHOD go_grid->set_table_for_first_display EXPORTING is_layout = gs_layout CHANGING it_outtab = gt_data it_fieldcatalog = gt_fieldcat. ENDIF. ENDMODULE. * 屏幕1000的PAI模块 MODULE user_command_1000 INPUT. CASE sy-ucomm. WHEN 'SAVE'. " 保存数据数据库 PERFORM save_data. WHEN 'EXIT' OR 'BACK' OR 'CANCEL'. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE. * 构建字段目录 FORM build_fieldcatalog. CLEAR gt_fieldcat. " 定义KEY_FIELD字段 gs_fieldcat-fieldname = 'KEY_FIELD'. gs_fieldcat-ref_table = 'ZTEST_TABLE'. gs_fieldcat-key = 'X'. " 关键字段 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat. " 定义VALUE_FIELD字段,可编辑 gs_fieldcat-fieldname = 'VALUE_FIELD'. gs_fieldcat-ref_table = 'ZTEST_TABLE'. gs_fieldcat-edit = 'X'. " 可编辑 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat. " 其他字段同理... ENDFORM. * 保存数据 FORM save_data. " 首先,从ALV网格获取最新数据 CALL METHOD go_grid->check_changed_data. " 更新数据库 MODIFY ztest_table FROM TABLE gt_data. IF sy-subrc = 0. COMMIT WORK. MESSAGE '数据保存成功' TYPE 'S'. ELSE. ROLLBACK WORK. MESSAGE '保存失败' TYPE 'E'. ENDIF. ENDFORM. ``` 注意:以上代码是一个简化示例。实际应用中,可能需要更复杂的数据验证和错误处理。 另外,在事件处理程序`handle_data_changed`中,可以使用`er_data_changed`对象的方法来检查修改的单元格,例如: - 使用`er_data_changed->get_cell_value`获取单元格的值 - 使用`er_data_changed->modify_cell`来修改值(例如纠正错误) - 使用`er_data_changed->add_protocol_entry`记录错误消息 例如,在`handle_data_changed`方法中验证VALUE_FIELD不能为空: ```abap METHOD handle_data_changed. DATA: ls_mod_cells TYPE lvc_s_modi, lv_value TYPE string. " 遍历所有修改的单元格 LOOP AT er_data_changed->mt_mod_cells INTO ls_mod_cells. IF ls_mod_cells-fieldname = 'VALUE_FIELD'. " 获取新输入的值 CALL METHOD er_data_changed->get_cell_value EXPORTING i_row_id = ls_mod_cells-row_id i_fieldname = ls_mod_cells-fieldname IMPORTING e_value = lv_value. IF lv_value IS INITIAL. " 报告错误 CALL METHOD er_data_changed->add_protocol_entry EXPORTING i_msgid = 'E' i_msgty = 'E' i_msgno = '000' i_msgv1 = 'VALUE_FIELD不能为空' i_fieldname = ls_mod_cells-fieldname i_row_id = ls_mod_cells-row_id. ENDIF. ENDIF. ENDLOOP. ENDMETHOD. ``` 这样,当用户输入空值时,会在ALV中显示错误消息。 以上示例展示了如何实现一个可编辑ALV并更新数据库。根据实际需求,可能还需要调整字段目录、布局和事件处理逻辑。 §§相关问题§§ 1. 如何实现ALV单元格级别的验证? 2. 在ALV中如何实现下拉框(下拉列表)? 3. 如何优化ALV性能,特别是当数据量很大时?</think>### ABAP ALV 可编辑数据更新实现指南 在 ABAP 中实现 ALV 可编辑数据更新需要以下关键步骤: #### 核心实现步骤 1. **定义数据结构** 创建与数据库表结构匹配的内表: ```abap DATA: gt_data TYPE TABLE OF zyour_table, " 替换为您的表名 gs_data TYPE zyour_table. ``` 2. **ALV 初始化** 使用 `CL_GUI_ALV_GRID` 创建可编辑网格: ```abap DATA: go_container TYPE REF TO cl_gui_custom_container, go_grid TYPE REF TO cl_gui_alv_grid. CREATE OBJECT go_container EXPORTING container_name = 'CC_ALV'. CREATE OBJECT go_grid EXPORTING i_parent = go_container. ``` 3. **设置编辑模式** 在布局中启用编辑: ```abap DATA: gs_layout TYPE lvc_s_layo. gs_layout-edit = 'X'. " 启用编辑模式 ``` 4. **注册数据更改事件** 实现 `DATA_CHANGED` 事件处理: ```abap CLASS lcl_event_handler DEFINITION. PUBLIC SECTION. METHODS: handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed. ENDCLASS. CLASS lcl_event_handler IMPLEMENTATION. METHOD handle_data_changed. " 此处添加数据验证逻辑 ENDMETHOD. ENDCLASS. ``` 5. **保存数据数据库** 实现保存功能: ```abap FORM save_data. CALL METHOD go_grid->check_changed_data. " 强制刷新更改 LOOP AT gt_data INTO gs_data WHERE flag = 'X'. " 假设有修改标记 MODIFY zyour_table FROM gs_data. ENDLOOP. COMMIT WORK. MESSAGE '数据已更新' TYPE 'S'. ENDFORM. ``` #### 完整示例代码 ```abap REPORT z_alv_editable_demo. TABLES: sflight. " 示例使用SAP标准表 DATA: gt_sflight TYPE TABLE OF sflight, go_grid TYPE REF TO cl_gui_alv_grid, go_container TYPE REF TO cl_gui_custom_container, gs_layout TYPE lvc_s_layo. " 事件处理类 CLASS lcl_events DEFINITION. PUBLIC SECTION. METHODS: handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed. ENDCLASS. CLASS lcl_events IMPLEMENTATION. METHOD handle_data_changed. " 简单验证示例:价格不能为负数 LOOP AT er_data_changed->mt_mod_cells ASSIGNING FIELD-SYMBOL(<mod>). IF <mod>-fieldname = 'PRICE' AND <mod>-value < 0. CALL METHOD er_data_changed->add_protocol_entry EXPORTING i_msgid = 'ZMSG' i_msgty = 'E' i_msgno = '001' i_fieldname = <mod>-fieldname i_row_id = <mod>-row_id. ENDIF. ENDLOOP. ENDMETHOD. ENDCLASS. START-OF-SELECTION. SELECT * FROM sflight INTO TABLE gt_sflight UP TO 50 ROWS. CALL SCREEN 100. MODULE status_0100 OUTPUT. SET PF-STATUS 'MAIN'. SET TITLEBAR 'T100'. IF go_container IS INITIAL. " 创建容器和ALV CREATE OBJECT go_container EXPORTING container_name = 'CC_ALV'. CREATE OBJECT go_grid EXPORTING i_parent = go_container. " 设置布局 gs_layout-edit = 'X'. gs_layout-sel_mode = 'A'. " 注册事件 DATA(go_events) = NEW lcl_events( ). SET HANDLER go_events->handle_data_changed FOR go_grid. " 显示ALV CALL METHOD go_grid->set_table_for_first_display EXPORTING is_layout = gs_layout CHANGING it_outtab = gt_sflight. ENDIF. ENDMODULE. MODULE user_command_0100 INPUT. CASE sy-ucomm. WHEN 'SAVE'. PERFORM save_data. WHEN 'BACK' OR 'EXIT'. LEAVE PROGRAM. ENDCASE. ENDMODULE. FORM save_data. CALL METHOD go_grid->check_changed_data. MODIFY sflight FROM TABLE gt_sflight. IF sy-subrc = 0. COMMIT WORK. MESSAGE '数据更新成功' TYPE 'S'. ENDIF. ENDFORM. ``` #### 关键注意事项 1. **事件处理** - `DATA_CHANGED` 事件在用户修改单元格时触发 - 使用 `ER_DATA_CHANGED->MT_MOD_CELLS` 获取修改记录 - 通过 `ADD_PROTOCOL_ENTRY` 添加验证错误 2. **数据保存** - 必须调用 `CHECK_CHANGED_DATA()` 方法刷新缓冲区 - 使用 `MODIFY ... FROM TABLE` 批量更新数据库 - 添加 `COMMIT WORK` 提交事务 3. **字段控制** 使用字段目录控制可编辑字段: ```abap DATA: gt_fieldcat TYPE lvc_t_fcat. gs_fieldcat-edit = 'X'. " 使特定字段可编辑 ``` #### 高级优化 1. **自动保存标记** 添加修改标志字段自动标记更改行: ```abap TYPES: BEGIN OF ty_data, mark TYPE c, " 其他字段... END OF ty_data. ``` 2. **批量操作支持** 实现全选/取消全选功能: ```abap METHOD handle_toolbar. e_object->mt_toolbar = VALUE #( ( function = 'SELECT_ALL' icon = '@2C@' quickinfo = '全选' ) ( function = 'DESELECT_ALL' icon = '@2D@' quickinfo = '取消全选' ) ). ENDMETHOD. ``` 3. **性能优化** - 使用 `SET_READY_FOR_INPUT(1)` 禁用渲染 - 大数据量时启用延迟滚动 [^1]: SAP 官方文档 - ALV Grid Control 编程指南 [^2]: ABAP 开发手册 - 数据持久化最佳实践
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值