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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM