지난번 포스팅까지 Searh Help에 관해서 알아보았다. 이번 포스팅은 실제 프로그램에서 Search Help를 사용하는 방법을 예시로 살펴보고자 한다.
사용 변수가 Domain 또는 Check Table 등의 Context가 없어서, 데이터 유형에 대해 입력 도움말을 사용할 수가 없는 경우 코딩으로 개발자가 추가할 수 있는 방법 위주로 예를 들어보려 한다.
1) Type-1 리포트 프로그램에서의 사용.
2) Type-M 온라인 프로그램에서의 사용.
3) ALV Grid에서의 사용.
위와 같이 빈번하게 사용되어지는 경우를 순서적으로 예를 들어보자.
1) Type-1 레포트 프로그램에서의 구현.
1-1) MATCHCODE OBJECT 구문.
PARAMETERS 변수의 선언 시 사용 가능하고 가장 간편하다. 아래 구문처럼 선언하면 되겠다.
PARAMETERS :p_bklas LIKE t025-bklas MATCHCODE OBJECT ZTMPH0001.
1-2) AT SELECTION-SCREEN ON VALUE-REQUEST FOR 변수.
변수가 PARAMETERS 변수이면 변수명을 바로 사용하면 되고 SELECT-OPTIONS 변수라면 Ranges변수이므로 LOW, HIGH로 나누어 사용해야겠다. 해당 구문 밑에 Possible Enrty 구현 코딩을 넣어주면 되겠다.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_bklas.
PERFORM f4_bklas.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_bklas-low.
PERFORM f4_bklas.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_bklas-high.
PERFORM f4_bklas.
2) Type-M 온라인 프로그램에서의 구현.
Type-M 온라인 프로그램에서는 PROCESS ON VALUE-REQUEST 이벤트 밑에 Possible Enrty를 띄울 필드(변수)와 그 로직이 구현될 MODULE문을 명시하여 사용할 수 있다.
PROCESS ON VALUE-REQUEST.
FIELD p_bklas MODULE f4_bklas.
3) ALV Grid에서 구현.
Class로 구현된 ALV Grid를 기준으로 보자. CL_GUI_ALV_GRID Class를 사용한 이벤트 Receiver에 Possible Enrty구현을 위한 Method를 추가하고 그 속에 로직을 기술하면 되겠다.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS : handle_onf4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname e_fieldvalue es_row_no
er_event_data et_bad_cells e_display.
ALV는 Possible Entry를 띄우기 위해 여러 코딩이 필요하지만 자세한 사항은 뒤에서 다뤄보고 Search Help에 공통되는 사항만 살펴보자.
4) 구현
Search Help 구현을 위한 코딩을 넣을 때 두 가지를 감안하여 펑션을 사용하면 되겠다.
해당 필드에 적당한 Search Help가 이미 있다.( Standard 것 이든 CBO 것 이든) => F4IF_FIELD_VALUE_REQUEST
Hit List부터 Internal Table로 다 만들어 띄우겠다. => F4IF_INT_TABLE_VALUE_REQUEST
4-1) F4IF_FIELD_VALUE_REQUEST
리포트 프로그램에 해당 SELECTION-SCREEN을 만들고 예로 사용법을 살펴보자.
기본적인 사용법으로 기존에 만들어둔 ZTMPH001을 필드 KKREF에 Possible Enrty로 붙이는 코딩이다.
파라미터명 | 설명 |
tabname | 기본 Search Help를 찾아올 테이블( searchhelp 파라미터 값이 없을때) |
fieldname | 기본 Search Help를 찾아올 테이블의 필드( searchhelp 파라미터 값이 없을때) |
searchhelp | Search Help Name |
shlpparam | Search Help에서 값을 가져올 Field 이름(값이 없으면 Hit List의 첫번째 값이 사용됨) |
dynpprog | EXP 파리미터를 내보낼 프로그램( 보통 sy-repid) |
dynpnr | EXP 파리미터를 내보낼 프로그램의 Screen 번호 (보통 sy-dynnr) |
dynprofield | EXP 파리미터를 내보낼 프로그램의 Screend의 Field |
여기서 tabname, fieldname파라미터는 searchhelp 파라미터 값을 넣지 않았을 때 입력받은 Table의 Field에 달려있는 Search Help를 자동으로 찾아오는 데 사용된다. 이때는 정확하게 값을 넣으주고, searchhelp 파라미터에 값을 넣어주면 아무 값을 넣어도 무시된다.
다음으로 두 필드를 연결하여 P_KKREF에 입력된 값으로 제한된 Hit List를 띄워 P_BKLAS값을 선택할 수 있게 코딩해보자. 화면으로 보자면 아래와 같겠다. P_KKREF = '0010'을 입력 후 엔터를 친 후 P_BKLAS의 Possible Enrty를 불러보자.
아래 코딩을 추가하자.
callback_program : Call Back Form문이 있는 프로 그래 명..
callback_form : Call Back Form문의 명.
추가된 두 개의 파라미터를 보면, 보통 call back 프로그램은 외부의 로직을 가져다 실행할 때 실행할 Form문의 위치를 나타낸다. 여기서 등록된 Form문에서 Search Help로 넘겨줄 값을 지정하는 코딩을 추가해준다.
callback_form 파리 미터에 등록된 값과 동일한 Form문을 만들어 코딩을 넣으면 되겠다.
shlp_descr_t Type으로 선언된 pt_shlp에 Ranges변수 형태로 값을 넘겨주는데 이유는 이전 포스팅인 Search Help-Exit을 확인해보자.
2020/12/18 - [ABAP] - [SAP ABAP 강좌 10] Search Help - Exit
4-2) F4IF_INT_TABLE_VALUE_REQUEST
지정된 Search Help 없이 Hit List Internal Table을 만들어 사용할 때 사용한다.
파라미터명 | 설명 |
retfield | Possible Entry를 사용할 필드명 |
dynpprog | EXP 파리미터를 내보낼 프로그램( 보통 sy-repid) |
dynpnr | EXP 파리미터를 내보낼 프로그램의 Screen 번호 (보통 sy-dynnr) |
dynprofield | EXP 파리미터를 내보낼 프로그램의 Screend의 Field |
value_org | 'S'(Struture), 'C'(Column) Hit List를 위해 입력해주는 value_tab Internal Table의 구조를 선택한다. 'S'는 보통의 Internal Table을 넣어주면 되고 'C'는 CHAR or String 필드만가진 Internal Table을 선언하여 값을 넣어주어야 한다. 예는 아래에서 보자. |
window_title | Hit List 타이틀명 |
field_tab | Hit List의 컬럼명을 지정하는 Internal Table |
value_tab | Hit List에 보여줄 값을 가진 Internal Table |
return_tab | Hit List에서 사용자가 선택한 리턴값을 가진 Internal Table |
dynpfld_mapping | Hit List에서 사용자가 선택한 리턴값을 넣을 변수를 지정할수 있는 Internal Table |
field_tab, value_tab을 만드는 로직을 아래에서 보면 value_org = 'C' (기본값이라 파라미터 없음) 인경우 string 테이블에 칼럼명 없이 Hit List를 저장해서 펑션에 입력하고,
Hit List의 칼럼명을 보여주기 위해서 field_tab에 각 칼럼의 필드명과 이름, 길이 등을 저장하여 펑션의 Table 파라미터에 넣어주어야 한다.
아래의 경우처럼 dynpfld_mapping에 리턴 값이 들어갈 필드를 기술하여 S_BKLAS-LOW에 Possible Entry를 구현하였지만 선택한 데이터는 S_BKLAS-HIGH에 들어가게 할 수도 있다.
value_org = 'S' 인경 우의 사용법도 살펴보면 일반 Internal Table을 value_tab으로 바로 사용 가능하다.
하지만 위의 경우처럼 dynpfld_mapping을 사용한 리턴 필드 변경은 불가능하다.
이상으로 Search Help에 대한 포스팅을 마칩니다.
긴 글 읽어주셔서 감사합니다.
'ABAP' 카테고리의 다른 글
[SAP ABAP 강좌 14] VIEW - Maintenance View (유지보수뷰) (0) | 2021.04.20 |
---|---|
[SAP ABAP 강좌 13] Search Help 예제 - ALV (0) | 2021.02.08 |
[SAP ABAP 강좌 11] Collective Search Help (0) | 2020.12.28 |
[SAP ABAP 강좌 10] Search Help - Exit (0) | 2020.12.18 |
[SAP ABAP 강좌 9] Search Help - 생성 (0) | 2020.12.14 |
최근댓글