안녕하세요 오늘은 비가 오네요..ㅜㅜ
필드 두개가 있는데요 한 필드는 체크 박스 한필드는 날짜 박스입니다.
평션으로 짲고요
FORM data_changed USING fp_data_changed TYPE REF TO
cl_alv_changed_data_protocol.
***리프레쉬 기능이 없음
endform.
FORM user_command USING fp_ucomm LIKE sy-ucomm
fs TYPE slis_selfield.
fs-refresh = 'X'. 리프레쉬 기능이 있습니다.
endform
화면에서 체크 박스 클릭홤녀 해당일자를 날짜 필드에 넣어서 보여 주고 싶은데
data_changed 이벤트만 일어나서 해당 클릭한 필드만 보여지고 날짜 필드에 값은 안 보여지네요
user_command를 불러서 fs-refresh를 사용할수 있게 하면 좋을텐데
user_command를 강제로 발생시키는 방법 쫌 갈켜주세요.. 다시 말씀 드리지만 평션입니다. 클래스가 아니예요.
댓글 7
-
낭랑18세
2009.12.10 23:41
-
아밥고지를 찾아서
2009.12.10 23:50
감사 감사 드립니다. 이거였어요...ㅜ.ㅜ
-
낭랑18세
2009.12.10 23:55
도움이 되셨다니 다행이네요~^^ -
아밥고지를 찾아서
2009.12.10 23:59
지송합니다. 안되네요..
해결은 했는데요 방법이
* CALL METHOD fp_data_changed->modify_cell
* EXPORTING
* i_row_id = ls_mod_cells-row_id
* i_fieldname = i_fieldname
* i_value = '@0A@'. "RED
뭐 대충 이런식으로 해당 필드의 모디파이해서 했는데
강제로 alv user command 를 발생시킬수 없을까요?
-
낭랑18세
2009.12.11 00:34
alv 화면 필드를 modify 하셨다면 screen 에는 변경된 값이 들어 있지 않나요 ??
다른 이벤트가 타면 변경된 화면필드가 자동으로 인터널 테이블로 변경 될 터인데..
정확히 Reuse 에서 changed 메소드를 어떤 방식으로 구현 하셨느지요..
-
요요
2009.12.11 01:06
혹시나 해서 테스트 해 봤는데 되는 것 같네요.
아래 코드 복사해서 실행하여 테스트해보신 후에
원래 프로그램에 맞게 적용하시면 될 것 같네요. ^^;
그리고 SET_NEW_OK_CODE 는 현재 그리드가 실행되는 화면에 대한
OKCODE 를 수행하는 건데요. REUSE 펑션을 사용하셨다면 PAI 부분이
없어서 안될 거예요. CL_GUI_ALV_GRID 를 사용하셨다면 되었을 거구요.
억지로 아래처럼 할 수밖에 없었네요.
REUSE 는 FUNCTION-GROUP "SLVC_FULLSCREEN"을 사용하기 때문에 가능한 것 같네요.
부득이한 경우를 제외하고는 사용을 제한하여 주심이 좋을 것 같습니다.
TYPE-POOLS: slis.
* Data to be displayed
DATA: gt_sflight TYPE TABLE OF sflight.
DATA: gs_layout TYPE slis_layout_alv.
DATA: gt_event TYPE slis_t_event.
DATA: gs_event TYPE slis_alv_event.
gs_event-name = slis_ev_data_changed.
gs_event-form = 'DATA_CHANGED'.
APPEND gs_event TO gt_event.
*---------------------------------------------------------------------*
* Selection
SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_sflight.
* Eingabebereit
gs_layout-edit = 'X'.
* Call ABAP List Viewer (ALV)
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
i_structure_name = 'SFLIGHT'
is_layout = gs_layout
it_events = gt_event
TABLES
t_outtab = gt_sflight.
*&---------------------------------------------------------------------*
*& Form DATA_CHANGED
*&---------------------------------------------------------------------*
FORM data_changed USING er_data_changed
TYPE REF TO cl_alv_changed_data_protocol.
DATA ls_stable TYPE lvc_s_stbl VALUE 'XX'.
FIELD-SYMBOLS : <lfs_grid> TYPE REF TO cl_gui_alv_grid,
<lfs_modi> TYPE lvc_s_modi,
<lfs_sflight> LIKE LINE OF gt_sflight.
ASSIGN ('(SAPLSLVC_FULLSCREEN)GT_GRID-GRID') TO <lfs_grid>.
CHECK <lfs_grid> IS BOUND.
READ TABLE er_data_changed->mt_mod_cells
ASSIGNING <lfs_modi>
INDEX 1.
CHECK sy-subrc IS INITIAL.
READ TABLE gt_sflight
ASSIGNING <lfs_sflight>
INDEX <lfs_modi>-row_id.
CHECK sy-subrc IS INITIAL.
<lfs_sflight>-seatsmax = 999.
<lfs_grid>->refresh_table_display( is_stable = ls_stable ).
ENDFORM. "DATA_CHANGED
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
FORM user_command USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield.
ENDFORM. "user_command -
낭랑18세
2009.12.11 01:25
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.
LOOP AT RR_DATA_CHANGED->MT_MOD_CELLS INTO LS_MOD_CELLS.
CASE LS_MOD_CELLS-FIELDNAME.
WHEN 'CHKBOX'.
PERFORM MARK_CHANGED USING RR_DATA_CHANGED LS_MOD_CELLS.
ENDCASE.
ENDLOOP.
ENDFORM. " alv_data_changed
FORM MARK_CHANGED USING RR_DATA_CHANGED TYPE REF TO
CL_ALV_CHANGED_DATA_PROTOCOL
RS_MOD_CELLS TYPE LVC_S_MODI.
CASE RS_MOD_CELLS-FIELDNAME.
WHEN 'CHKBOX'.
CALL METHOD RR_data_changed->modify_cell
EXPORTING
i_row_id = Rs_mod_cells-row_id
i_fieldname = i_fieldname
i_value = '@0A@'. "RED
ENDCASE.
ENDFORM. " MARK_CHANGED
위소소 대로 해보세요. 잘되는군요.
CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE
EXPORTING
NEW_CODE = 'ENTER'.
사용해 보세요.