FUNCTION ALV 에서 DATA_CHANGED 후 REFRESH 기능이 있을까요?
FORM data_changed USING rr_data_changed TYPE REF TO
cl_alv_changed_data_protocol.
DATA : ls_mod_cells TYPE lvc_s_modi,
ls_cells TYPE lvc_s_modi,
l_matnr LIKE mara-matnr,
ls_list LIKE gt_list.
LOOP AT rr_data_changed->mt_good_cells INTO ls_mod_cells.
CASE ls_mod_cells-fieldname.
WHEN 'ABGDT'.
READ TABLE gt_list INDEX ls_mod_cells-row_id
INTO ls_list.
IF sy-subrc = 0.
LOOP AT gt_list WHERE aufnr = ls_list-aufnr.
gt_list-abgdt = ls_mod_cells-value.
modify gt_list .clear gt_list.
ENDLOOP.
IF sy-subrc = 0.
ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
ENDFORM.
갑자기 class alv 로 하면 간단한것을 괜히 function alv로 해서 ㅠㅜ
각설하고
소스를 보시면 ABGDT 에 값이 들어올때 같은 값을 가지는 다른 키값의 VALUE 값을 MODIFY 후
REFRESH 하여 화면에 뿌려주려합니다.
cl_alv_changed_data_protocol 에는 해당셀만 MODIFY 하는기능이 있고 다른 ROW를 수정하면 DUMP 가 발생합니다.
강제로 UCOMM 을 태워야 REFRESH 가 될듯한데 혹시 아시는분 부탁드립니다.
댓글 7
-
activeman
2008.10.07 06:50
-
왕초~삽질맨
2008.10.07 07:01
전 data changed 이벤트 발생할때 물어본건데... -
지의
2008.10.07 17:17
data changed 이벤트는 어떻게 실행하시나요? User-command 도 없이? 화면에 결과 뛰워 놓고 아무것도 안 하고 있으면 데이타가 막 바뀌나요? 잘 생각해 봅시다. 답 알려주셨는데도 딴 소리 하시면 답변 주신분 힘 빠지시죠. -
왕초~삽질맨
2008.10.07 19:09
화면에서 데이터를 입력하면고 커서가 입력한곳을 버서나면 바로 data_changed 로 들어오지 않나요?
user_command 는 그다음 버튼등의 액션이 있어야 타고 들어오는걸로
제말은 입력값이 들어올경우 data changed 이벤트를 통해서 다른라인의 값을 수정을 하는데 그결과가 다시 refresh 가 안되어 화면에 반
영이 안되어서 질문을 드렸던 겁니다.
물론 위의 코딩은 강제로 버튼 하나 눌러주면 보이겠죠
아무래도 먼가 제가 착각을 한거 아닌지 모르겠네요.
답변주신분들 감사합니다
-
SAP폐인
2008.10.07 21:45
ALV Function은 refresh를 위해서 user_command를 태워야 한다고 알고 있습니다.
저 또한 따로 레코드의 데이터가 바뀌었을때를 인식하는 메소드가 없는걸로 알고 있으며, 따라서 위의 답 밖에는 드릴수가 없을것 같습니다.
-
activeman
2008.10.08 01:05
질문하신 분이 Function ALV와 class ALV를 혼돈하고 계신듯 합니다.
Function ALV는 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 함수를 이용하여 alv를 생성하는 것이구요.
data_changed 의 이벤트를 사용하는 것은 class를 사용하여 ALV를 생성하는 것입니다..
질문에 function alv라고 하셨길래 function에서 사용하는 방법을 물으셨나 해서 그렇게 올렸네요..ㅋㅋ
CALL METHOD GRID->REFRESH_TABLE_DISPLAY.
이걸 한번 사용해 보십시요...
즐밥하세요..
-
왕초~삽질맨
2008.10.08 02:28
질문하신분은 혼동을 안하고 있습니다 ㅎㅎ
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 에서도 이벤트 등록후 data_changed 이벤트를 할 수 있습니답.
뭐 방법이 없어서 class alv로 변환중입니다;;
감사합니다.
FUNCTION을 이용한 ALV에서 USER_COMMAND 부분을 아래와 같이 한번 해보세요.
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_SELFIELD TYPE SLIS_SELFIELD.
CLEAR: SY-UCOMM.
CASE P_UCOMM.
WHEN 'STOC'.
PERFORM READ_STOCK.
WHEN 'REFRESH'.
PERFORM CREATE_DATA_TO_IT_TAB.
ENDCASE.
P_SELFIELD-REFRESH = 'X'. ===> 이부분 입니다.
즐밥하세요..