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.
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.
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.
perform create_object.
perform set_event.
perform set_fieldcat.
perform set_layout.
perform create_alv.
endif.