zoukankan      html  css  js  c++  java
  • ABAP基础二:ALV基础之ALV的简单编辑

    前两天有个打印需求变更,需要在ALV显示列表中添加两个字段,可编辑,而我自己用的是函数:REUSE_ALV_GRID_DISPLAY_LVC

    因为之前做可编辑基本都是固定套路,定义类,画屏幕。。。。

    很是麻烦,所以才看看能不能不用屏幕,不用定义方法,结果是可以的,分享给大家!

    前提:ALV使用自定义的工具栏(工具栏引用标准的工具按钮,有个小技巧,有空的自己研究)

    一:只是做编辑,修改,自动更新内表:

    只需添加几行代码即可:

    在SET_STATUS里加入:

    FORM prm_set_status USING rt_extab TYPE slis_t_extab.
      SET PF-STATUS 'ZSTAT'.
    
      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid = lr_grid.
    
      CALL METHOD lr_grid->register_edit_event
        EXPORTING
          i_event_id = cl_gui_alv_grid=>mc_evt_modified.
      IF sy-subrc <> 0.
      ENDIF.
    
    ENDFORM.

    这样系统用自己的modify事件,修改数据,回车的时候就会触发更新内表

    这种方式结合字段目录中定义的参考表和字段,就可以轻松实现F4功能,简单使用。

    二:用自定义的修改逻辑:

    给ALV添加事件和FORM

      REFRESH:lt_event.
      ls_event-form = 'DATA_CHANGED_METHOD'.
      ls_event-name = 'DATA_CHANGED'.
      APPEND ls_event TO lt_event.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_callback_program       = sy-repid
          i_callback_pf_status_set = 'PRM_SET_STATUS'
          i_callback_user_command  = 'PRM_USER_COMMAND'
          is_layout_lvc            = ls_layout
          it_fieldcat_lvc          = gt_fieldcat[]
          i_default                = 'X'
          i_save                   = 'A'
          it_events                = lt_event[]
        TABLES
          t_outtab                 = gt_show[]
        EXCEPTIONS
          program_error            = 1
          OTHERS                   = 2.
      IF sy-subrc <> 0.
      ENDIF.

    注意:用此方法,也需要一中的代码

    然后在程序中添加自己的代码处理内表就可以了,用这种方法可以做数据更新,关联更新

    FORM data_changed_method
                  USING pa_data_changed TYPE REF TO cl_alv_changed_data_protocol .
      DATA:
        l_it_data TYPE         lvc_t_modi,
        l_wa_data LIKE LINE OF l_it_data.
      FIELD-SYMBOLS:<lv_field> TYPE any.
    
      l_it_data = pa_data_changed->mt_mod_cells.
    
      CHECK l_it_data IS NOT INITIAL.
    
      LOOP AT pa_data_changed->mt_mod_cells INTO l_wa_data.
        READ TABLE gt_show INTO gw_show INDEX l_wa_data-row_id.
        IF sy-subrc = 0.
          ASSIGN COMPONENT l_wa_data-fieldname OF STRUCTURE gw_show TO <lv_field>.
          IF sy-subrc = 0.
            <lv_field> = l_wa_data-value.
            MODIFY gt_show FROM gw_show INDEX l_wa_data-row_id.
          ENDIF.
        ENDIF.
      ENDLOOP.
    
      CALL METHOD lr_grid->refresh_table_display.
    ENDFORM.                    " DATA_CHANGED_METHOD
  • 相关阅读:
    内置函数
    递归函数:
    函数(迭代器与生成器)
    函数的装饰器
    函数:(函数的名字,闭包)
    函数(命名空间,作用域,嵌套)
    函数:(定义,调用,返回值和参数)
    hdu 4267 A Simple Problem with Integers(线段树)
    hdu 2089 不要62 hdu 3555 Bomb (数位DP)
    poj 2955 Brackets (区间DP)
  • 原文地址:https://www.cnblogs.com/sapSB/p/5168184.html
Copyright © 2011-2022 走看看