ABAP 물타기/ALV

ALV : Make F4 Data (ONF4 EVENT)

물타기 2011. 8. 29. 18:47

alv에서 possible entry를 만드는 방법은 두 가지 방법이 있다.

첫 번째는 Dictionary의 것과 같게 만드는 방법과,
두 번째는 데이터 자체를 내가 원하는 테이블 형식으로 보여주는 방법이다.
아래는 이를 구현한 소스를 적었다. 적절히 수정해서 사용하면 된다.

1.

  DATA : lt_return_tab LIKE TABLE OF ddshretval WITH HEADER LINE.
  DATA : LV_KOKRS LIKE CSKS-KOKRS.

  READ TABLE GT_DATA INDEX pa_row-row_id.
  CHECK sy-subrc = 0.


  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
     EXPORTING
       tabname    = 'CSKS'
       fieldname  = 'KOKRS'
     TABLES
       return_tab = lt_return_tab.

  LOOP AT lt_return_tab.
    CASE lt_return_tab-FIELDNAME.
      WHEN 'KOKRS'.
        LV_KOKRS = lt_return_tab-FIELDVAL.
    ENDCASE.
  ENDLOOP.


  CLEAR: lt_return_tab[], lt_return_tab.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
     EXPORTING
       tabname    = 'CSKS'
       fieldname  = 'KOSTL'
     TABLES
       return_tab = lt_return_tab.

  LOOP AT lt_return_tab.
    CASE lt_return_tab-FIELDNAME.
      WHEN 'KOSTL'.
        GT_DETAIL-COSTCENTER = lt_return_tab-FIELDVAL.

        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT         = GT_DETAIL-COSTCENTER
          IMPORTING
            OUTPUT        = GT_DETAIL-COSTCENTER
                  .
    ENDCASE.
  ENDLOOP.

  SELECT SINGLE KOKRS
  INTO LV_KOKRS
  FROM CSKS
  WHERE KOSTL = GT_DETAIL-COSTCENTER
    AND KOKRS = LV_KOKRS.
  IF SY-SUBRC NE 0.
    MESSAGE E000 WITH TEXT-M02.
    EXIT.
  ELSE.
    GT_DETAIL-KOKRS = LV_KOKRS.
  ENDIF.

*    CALL METHOD pa_data_changed->add_protocol_entry
*                EXPORTING
*                  i_msgid     = 'Z33QMM'
*                  i_msgty     = 'E'
*                  i_msgno     = '000'
*                  i_msgv1     = text-M02
*                  i_fieldname = 'COSTCENTER'
*                  i_row_id    = pa_good-row_id.
*    EXIT.
*  ENDIF.



  READ TABLE GT_CSKT WITH KEY KOSTL = GT_DETAIL-COSTCENTER.
  IF SY-SUBRC = 0.
    GT_DETAIL-KTEXT = GT_CSKT-KTEXT.
  ENDIF.

  MODIFY GT_DETAIL INDEX pa_row-row_id
          TRANSPORTING COSTCENTER KTEXT KOKRS.

  PERFORM alv_efresh_table_display USING grid2.






2.


  DATA : lt_return TYPE TABLE OF ddshretval WITH HEADER LINE.


  DATABEGIN OF LT_QPCD OCCURS 0,
          KATALOGART LIKE QPCD-KATALOGART,
          CODEGRUPPE LIKE QPCD-CODEGRUPPE,
          CODE       LIKE QPCD-CODE      , "코드
          KURZTEXT   LIKE QPCT-KURZTEXT  , "내역
        END OF  LT_QPCD.
  DATA : lt_return_tab LIKE TABLE OF ddshretval WITH HEADER LINE.

  SELECT *
  INTO CORRESPONDING FIELDS OF TABLE LT_QPCD
  FROM QPCD
  WHERE KATALOGART = GC_TYPE
    AND CODEGRUPPE = GC_GROUP
    .

  LOOP AT LT_QPCD.

    SELECT SINGLE KURZTEXT
    INTO LT_QPCD-KURZTEXT
    FROM QPCT
    WHERE KATALOGART = LT_QPCD-KATALOGART
      AND CODEGRUPPE = LT_QPCD-CODEGRUPPE
      AND CODE = LT_QPCD-CODE
      AND SPRACHE = SY-LANGU.
    IF SY-SUBRC = 0.
      MODIFY LT_QPCD TRANSPORTING KURZTEXT.
    ENDIF.

  ENDLOOP.


"아래 부분이 화면에 보여줄 SEARCH HELP LIST

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = 'CODE'
        value_org       = 'S'
      TABLES
        value_tab       = LT_QPCD
        return_tab      = lt_return
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2
        OTHERS          = 3.
    IF sy-subrc = 0" AND return_tab-fieldval <> ''.
      READ TABLE lt_return INDEX 1.
      IF SY-SUBRC = 0.
        GT_DETAIL-RE_CODE = lt_return-fieldval.

        SELECT SINGLE KURZTEXT
        INTO GT_DETAIL-RE_CODETXT
        FROM QPCT
        WHERE KATALOGART = GC_TYPE
          AND CODEGRUPPE = GC_GROUP
          AND CODE = lt_return-fieldval
          AND SPRACHE = SY-LANGU.

        GT_DETAIL-RE_TYPE = GC_TYPE.
        GT_DETAIL-RE_GROUP = GC_GROUP.
        MODIFY GT_DETAIL INDEX pa_row-row_id
            TRANSPORTING RE_TYPE RE_GROUP RE_CODE RE_CODETXT.
      ENDIF.

    ENDIF.

  PERFORM alv_efresh_table_display USING grid2.