누구나 알고있는 내용을 정리해 보았습니다.
Search Help개체를 사용하지 않고 프로그램을 구성하는 방법.
1) Selection-Screen을 구상한후 명령어를 통해 해당 화면을 구성한다.
2) Selection-Screen의 구성원중 F4(Input Help)를 구성할 항목을 선택한 후 Event 처리 루틴을 삽입한다.
사용자가 F4(Input Help/ Possible Entry)를 누른경우를 Event처리한다.
At SELECTION-SCREEN On VALUE-REQUEST FOR s_connid-low.
PERFORM SS_VALUE_REQUEST_S_CONNID.
문법설명(Type-1 Event처리에 대한 이해가 필요합니다. 영문법으로 나누어 봅시다)
At SELECTION-SCREEN : At (Selection-Screen) => Selection Screen에서
On Value-Request : On ( Value-Request) => Value-Request(값의 요청, Input Help, F4, Possible Entry)에 대해서.
FOR s_connid : For( s_connid) => 개체 s_connid-low 를 위해서.
Perform ss_value_request_s_connid. 를 수행해라.
3) Perform SS_VALUE_REQUEST_S_CONNID를 구성한다.
가) 현시점에서의 Selection-Screen에 있는 화면 Field의 내용을 읽어들인다.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = sy-cprog
DYNUMB = sy-dynnr
TRANSLATE_TO_UPPER = 'X'
REQUEST = 'A'
TABLES
DYNPFIELDS = LT_DYREAD .
READ TABLE LT_DYREAD WITH KEY fieldname = 'S_CARRID-LOW'.
lt_carrid = LT_DYREAD-fieldvalue.
나) 앞선 데이타를 기준으로 Data Select를 수행한다.
if lv_s1 is INITIAL.
lv_s1 = '%'.
endif.
SELECT CONNID FLDATE
INTO CORRESPONDING FIELDS OF TABLE lt_v1
FROM SFLIGHT
WHERE CARRID like LV_S1.
다-1) 화면에 표시할수 방법(1)
[VALUE_ORG = 'S' ] / 장점 : 쉽고 빠르게 적용할수 있다 / 단점 : Return값이 1개이고, Field이름을 정의가 안된다
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CD' Value_tab 의 Internal Table에서 사용자가 선택후 되돌려줄 Field Name.
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'S_PROD3' RETFIELD 에 의해 선택된 값이 화면상에 들어올 개체이름. -Low/-High가 의미가 없음
WINDOW_TITLE = '제품그룹3 선택' PopUp 제목
VALUE_ORG = 'S' Return종류 C [Cell], S[Structure]
TABLES
VALUE_TAB = LT_F4 화면에 표시될 itab (내 마음대로 정의한 itab사용가능)
RETURN_TAB = LT_F4_RETURN POP후 선택된 값이 들어올 테이블.
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
다-2) 화면에 표시할수 방법(2)
[VALUE_ORG = 'C' ] / 장점 : Return값이 n개 이상 이고/ Field이름을 정의가 된다 / 단점 : 다소복잡하다
화면에 Display되어 있는 데이타를 읽어들인다.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = sy-cprog
DYNUMB = sy-dynnr
TRANSLATE_TO_UPPER = 'X'
REQUEST = 'A'
TABLES
DYNPFIELDS = LT_DYREAD.
READ TABLE LT_DYREAD WITH KEY FIELDNAME = 'P_USER01'.
IF not lt_dyread-fieldvalue is INITIAL.
lv_carrid = lt_dyread-fieldvalue.
ELSE.
lv_carrid = '%'.
ENDIF.
화면에 읽어온 데이타를 바탕으로 화면에 뿌려줄 데이타를 가공한다.
DATA : BEGIN OF lt_popup OCCURS 0, 팝업의 데이타를 가지고 있을 테이블
datas(20) type c,
END OF lt_popup.
팝업으로 뿌려줄 데이타를 가공한다.
SELECT *
FROM SFLIGHT
INTO CORRESPONDING FIELDS OF TABLE lt_sflight
WHERE CARRID LIKE lv_carrid.
데이타를 가공한다. (열로 나열한다)
LOOP AT lt_sflight.
lt_popup-datas = lt_sflight-carrid.
append lt_popup.
lt_popup-datas = lt_sflight-connid.
append lt_popup.
lt_popup-datas = lt_sflight-fldate.
append lt_popup.
ENDLOOP.
화면에 뿌려질 Field Cataloge를 작성한다.
DATA : lt_field like STANDARD TABLE OF DFIES INITIAL SIZE 0 with HEADER LINE.
화면에 표시될 Field정보를 가공한다.
CALL FUNCTION 'DDIF_FIELDINFO_GET' 테이블 명과 field명을 제공하면 기본정보를 가져온다
EXPORTING
TABNAME = 'SFLIGHT'
FIELDNAME = 'CARRID'
LFIELDNAME = 'CARRID'
IMPORTING
DFIES_WA = lt_field.
LT_FIELD-SCRTEXT_S = '내맘대로001'.
LT_FIELD-SCRTEXT_M = '내맘대로001'.
LT_FIELD-SCRTEXT_L = '내맘대로001'.
LT_FIELD-REPTEXT = '내맘대로001'.
APPEND LT_FIELD.
Return값을 늘리기 위해 Mapping 용 테이블에 데이타를 넣는다.
DATA : lt_map like STANDARD TABLE OF DSELC INITIAL SIZE 0 with HEADER LINE.
사용자가 데이타를 선택한후 화면필드와 매치시킬 mapping을 작성한다.
lt_map-fldname = 'CARRID'.
lt_map-dyfldname = 'P_USER01'.
append lt_map.
lt_map-fldname = 'CONNID'.
lt_map-dyfldname = 'P_USER02'.
append lt_map.
화면에 Popup을 올린다.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'FLDATE'
WINDOW_TITLE = 'SFLIGHT 필터링된내용' 팝업제목
TABLES
VALUE_TAB = lt_popup
FIELD_TAB = lt_field
RETURN_TAB = lt_rtn
DYNPFLD_MAPPING = lt_map
가져온 데이타를 화면에 넣어준다.
DATA : LT_UPDATE LIKE DYNPREAD OCCURS 0 WITH HEADER LINE. Dynp_values_read/화면데이타 쓰기용
lt_update-FIELDNAME = 'P_USER01'.
READ TABLE lt_rtn with key RETFIELD = lt_update-fieldname.
IF SY-SUBRC = 0.
lt_update-FIELDVALUE = lt_rtn-fieldval.
APPEND lt_update.
endif.
lt_update-FIELDNAME = 'P_USER02'.
READ TABLE lt_rtn with key RETFIELD = lt_update-fieldname.
IF SY-SUBRC = 0.
lt_update-FIELDVALUE = lt_rtn-fieldval.
APPEND lt_update.
endif.
화면에 데이타를 기록한다.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = lt_update.
댓글 13
-
양키
2012.04.03 08:58
-
문바이
2012.04.03 10:35
넵. 그럭저럭.
다음에 정모때 기회되면 볼수 잇으면 좋겠네요.^^;
-
병하
2012.04.03 09:56
감사합니다~^^
-
슈퍼복덩이
2012.04.03 10:26
꼭 필요한 내용 잘보고 갑니다..^^
-
OPAL
2012.04.03 14:28
감사합니다.^^
-
zambia21
2012.04.05 14:13
감사합니다.^^
-
병하
2012.04.17 17:13
감사합니다~
-
Robert-jo
2012.07.02 14:59
잘볼께여~
-
iweppy
2012.08.17 17:06
감사합니다.
-
깜상
2013.07.24 09:52
대부분 search help개체를 이용해서 프로그램을 구성했었는데, 아주 유익한 자료입니다. 한번 해봐야겠네요. 감사합니다.
-
이수현
2013.08.01 12:04
감사합니다.
-
U&I
2013.09.09 14:06
감사합니다.
-
jetainm
2013.11.21 09:41
감사합니다.
F4 Search Help 내용 잘봤습니다 ^^
문바이님 잘계시죠~?