ABAP 물타기/ALV

ALV : Edit ALV (update)

물타기 2010. 6. 18. 10:29

  • Create Date   : 2010-06-18
  • Change Date : 2010-06-18

잡담 -ㅂ-;

지난밤 꿈을 꿨다...
Boss랑 플젝 나가서 열심히 일하는 꿈을... ㅜ  ㅜ
아이쿠 어깨 쭉지야~


Layout, Field Catalog

일단 편집 할 수 있도록 속성을 줘야한다.
두 가지 방법이 있다.
전체를 수정하거나 컬럼별로 지정하거나.

1. Layout

  gs_layout-edit = 'X'.  "edit all alv

2. Field Catalog

ls_fieldcat-edit = 'X'.  "edit column


EVENT

수정할 때 마다 itab에 담는다. 나중에 PAI에서 looping 하면서 하나 하나 Update 해주면 된다.
일단 EVENT 설정 부분이다.
노파심에 아래 핸들러 등록하는 부분도 넣었다.

  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.

class lcl_event_receiver implementation.
  method : handle_data_changed.

    data : ls_ztmart02 type ztmart02,
           ls_outtab like line of gt_ztmart02.

    clear : gt_modified_rows[].

    field-symbols : <fs> type table.
    assign er_data_changed->mp_mod_rows->* to <fs>.  "point! 

    loop at <fs> into ls_outtab.
      MOVE-CORRESPONDING ls_outtab to ls_ztmart02.
      append ls_ztmart02 to gt_modified_rows.
    endloop.

  endmethod.
endclass.
 

data : event_receiver type ref to lcl_event_receiver. 

"set handler
  create object event_receiver.
  set handler event_receiver->handle_data_changed for grid1.




PAI

데이터를 Update 한다.
    
case sy-ucomm.
    when 'SAVE'.
      data : l_valid type c.
      call method grid1->check_changed_data
        importing
          e_valid = l_valid.
      if l_valid is not initial.
        perform update_database.
      endif.

    when 'BACK' or 'EXIT' or 'CANC'.
      leave to screen 0.
  endcase

...

 
FORM UPDATE_DATABASE .
  modify ztmart02 from table gt_modified_rows.
  if sy-subrc eq 0.
    message 'Save OK!' type 'S'.
  endif.
ENDFORM.



Result




Tip!
grid를 계속 생성하면 Event가 한 번만 실행 되니 주의 하기 바란다.
PBO 에서 초기 설정은 한번만 하기 바란다.

    if con1 is initial.
    perform create_object.
    perform set_event.
    perform set_fieldcat.
    perform set_layout.
    perform create_alv.
  endif.