ALV F4

니언·2022년 4월 22일
0

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.
profile
쭈니어 개발자

0개의 댓글