ALV F4 사용시 보여줘야 하는 필드가 두개 이상일때 F4IF_INT_TABLE_VALUE_REQUEST 펑션에 DYNPROFIELD 필드 사용.
METHODS:
HANDLE_ONF4 FOR EVENT ONF4 OF CL_GUI_ALV_GRID
IMPORTING
SENDER
E_FIELDNAME
ES_ROW_NO
ER_EVENT_DATA
ET_BAD_CELLS
E_DISPLAY.
METHOD HANDLE_ONF4 .
PERFORM HANDLE_ONF4 USING SENDER E_FIELDNAME ES_ROW_NO
ER_EVENT_DATA ET_BAD_CELLS
E_DISPLAY.
ENDMETHOD." HANDLE_ONF4
이벤트 등록 (ALV Display 이전)
DATA: GT_F4 TYPE LVC_T_F4 WITH HEADER LINE,
GS_F4 LIKE LINE OF GT_F4.
SET HANDLER GV_EVENT_RECEIVER->HANDLE_ONF4 FOR GO_GRID.
GT_F4-FIELDNAME = GC_MATNR. GT_F4-REGISTER = GC_X. INSERT TABLE GT_F4.
"ALV 셋팅시 F4 버튼을 사용한다고 등록하는 작업
CALL METHOD GO_GRID->REGISTER_F4_FOR_FIELDS
EXPORTING
IT_F4 = GT_F4[].
이벤트 구현 로직
FORM HANDLE_ONF4 USING PO_SENDER TYPE REF TO CL_GUI_ALV_GRID
PV_FIELDNAME
PV_ROW_NO TYPE LVC_S_ROID
PV_EVENT_DATA TYPE REF TO CL_ALV_EVENT_DATA
PV_BAD_CELLS
PV_DISPLAY.
FIELD-SYMBOLS <LF_F4TAB> TYPE STANDARD TABLE.
DATA: LV_MDATE LIKE ZMASTER02-MDATE.
DATA: LT_RETURN TYPE TABLE OF DDSHRETVAL.
IF PO_SENDER = GO_GRID AND PV_FIELDNAME = GC_MATNR.
IF GT_MATNR IS INITIAL.
EXIT.
ENDIF.
CLEAR LT_RETURN.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = GC_MATNR
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
VALUE_ORG = GC_S
DYNPROFIELD = CONV HELP_INFO-DYNPROFLD( GC_MAKTX )
TABLES
VALUE_TAB = GT_MATNR
RETURN_TAB = LT_RETURN[]
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
CHECK SY-SUBRC = 0.
PV_EVENT_DATA->M_EVENT_HANDLED = GC_X.
READ TABLE LT_RETURN INTO DATA(LS_RETURN) INDEX 1.
CHECK SY-SUBRC = 0.
* trigger data changed event
DATA(LT_F4TAB) =
VALUE LVC_T_MODI(
( ROW_ID = PV_ROW_NO-ROW_ID
FIELDNAME = GC_MATNR
VALUE = LS_RETURN-FIELDVAL
TABIX = 1 )
).
"아래 마지막 구문을 써주게 되면 데이타가 변하게 되어서 DATA CHANGED 이벤트를 탈수 있다.그로 인해 변하게 되는 TEXT 같은 요소 들은 DATA CHANGED 이벤트에서 변환 시켜 주면 된다.
ASSIGN PV_EVENT_DATA->M_DATA->* TO <LF_F4TAB>.
<LF_F4TAB> = LT_F4TAB.
ENDIF.
ENDFORM.