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.
DATA: BEGIN 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.