[율밥퍼] SAP ABAP - Search Help F4
오늘은 내가 일하다가 딕셔너리에서
탐색도움말을 만든김에~~~~~
이것도 블로그에 작성해서 남겨두면 좋겠다 생각이 들었당..
초보 개발자들을 위해..
촙봅 주니어
나중에 나도 보러와야징

보통 나는 조회화면 (Screen 1000)에서
서치헬프를 띄울때 Function을 이용하는 편이다.
이번에 Search Help를 띄우면서 교육생때 알지 못한 꿀팁들을 알게 되었다.
1. F4IF_INT_TABLE_VALUE_REQUEST
일단 기본적으로 조회화면에 Function을 이용하여 F4를 만들게 된다면,
AT SELECTION SCREEN ON VALUE-REQUEST FOR
구문을 사용한다.
암튼 고수들은 다 알겠지만.
AT SELECTION-SCREEN OUTPUT 앞단에 사용하는 이벤트다.
(짧게 설명하자면 AT SELECTION-SCREEN OUTPUT은 조회화면에서 내가 선택한 옵션을 처리하거나, 화면을 출력하기 전에 필요한 작업을 수행해야 할때 쓰는 이벤트라고 생각하면 된다.
뭔가 입력을 하면 output단에서 입력받은 값을 알 수 있당.)
암튼 AT SELECTION SCREEN 파트에 적으면 됨.
암튼 스크린 화면에서 구성한 PARAMETER나 SELECT-OPTIONS의 변수명을
FOR 뒤에 적어 주쇼
이 이벤트는 특정 필드의 도움말이나 팝업 창을 열거나 할때 쓰는데..
특정 필드를 적어주고 그 밑에 로직을 적어주면 된다. 보통 PERFORM문을 많이 이용한다.
예시 )

요런식으루~~~
초보개발자라면 모를 수 도있겠지만.
Select-options는 다중값을 받을 수 있기 때문에 LOW값에 F4를 띄울지 HIGH값에 띄울지 명확히 해줘야한당.
(parameter는 어차피 한 칸이라 괜츈.. ㅎㅎ)
그다음에 PERFORM문 안에 로직을 적어주면 되는데영~~~

이렇게 해주면 내가 띄우고 싶은 내용의 F4를 띄울수 있움.
일단 이 예시는 BUKRS 회사코드를 받고 싶었고,
회사코드에 대한 회사명을 같이 띄우기 위해 회사코드 텍스트테이블을 Select해와서 담았당 ^___^
- LT_RETURN 파라미터.
서치헬프에서 선택한 값을 테이블로도 받아올 수 있다.
나는 안필요해서 안썼는데 필요하다면..
TABLES에 RETURN_TAB 추가해주면된다.

LT_RETURN의 선언은
DATA : LT_RETURN TYPE TABLE OF DDSHRETVAL.
요렇게ㅎㅎ
안필요하면 안써도 된다.
혹시 몰라서 내용추가함 ㅎㅎ.
SCREEN 1000에서 F4를 띄운다면 이정도 옵션만 사용해도 충분하다.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'BUKRS' "내가 만들은 TABLE에서 받아올 값.
DYNPPROG = SY-REPID "프로그램명
DYNPNR = SY-DYNNR "스크린 번호!
DYNPROFIELD = 'S_BUKRS-LOW' "데이터를 할당할 스크린의 변수명
WINDOW_TITLE = '회사코드' "창이름.
VALUE_ORG = 'S' "S는 스트럭쳐 / C는 칼럼.
TABLES
VALUE_TAB = LT_BUKRS. "Seach Help 데이터를 담고있는 테이블.
Value_org는 보통 값 하나만 받아올땐 S값을 많이 이용한다.
여러값 받아올때는 C값을 사용하는데 이건 나중에 기회가 되면 또 폿스팅.

이렇게 룰루랄라 평소와 같이 코딩하던 중,
문제가 생겼다.

회사코드에 따라 사번들을 다르게 가지고 오고 싶었다.
(회사선택하면 그 회사에 있는 사원들만 서치헬프로 띄우고 싶었던 것.)
근데 AT SELECTION-SCREEN단에서는
내가 입력하거나 서치헬프로 값을 입력해도 S_BUKRS-LOW값을 못불러왔다 ㅠㅠ.
(빈값으로 뜸 )

그래서 방법을 찾던 중 알게된 꿀팁.

이 펑션을 쓰게 되면 현재 스크린에 있는 값을 읽어와 준다.
저 펑션을 돌리고 LT_DYNPFIELDS 테이블의 값을디버깅 돌려서 확인해보면,

내가 회사코드를 2000번을 선택하였다 ㅎㅎㅎ.
LT_DYNPFIELDS의 FIELDNAME이 S_BUKRS-LOW인 행의
FIELDVALUE를 읽어와서 서치헬프 만들 때 쓰거나
다른방식으로 활용하면 된다.
초보밥퍼들을 위해 어떤식으로 썼는지 보여주겠다.
(정말 친절 그잡채)

간단한 서치헬프 펑션 사용하기 끗~~~~~~
.
.
.
.
.
.
인줄 알았는데 문제점이 하나 있었다.
SELECT OPTION의 LOW/HIGH값에 서치헬프는 불러오지만..

아..놔 저는 저기서도 F4가 떴으면 좋겠어용...
해결방법으로는 SELECT-OPTIONS에 사용된 엘리먼트에 Search help를 달아주면 된다.

남이 만든 엘리먼트에 서치헬프 달겠다고 이곳저곳 연락해서 말하고 해야하는게 너무 귀찮았다...
그래서 고민하다가.
MACHCODE OBJECT를 사용하기로 결심.
사용 예를 보여주자면..(별거없다.)

MATCHCODE OBJECT는 서치헬프 사용할때 쓰는건데.
뒤에 서치헬프 명을 입력해주면 그 서치헬프(탐색도움말)를 사용한다.
엘리먼트에 따로 서치헬프를 안달아주고 내가 임의로 만든
탐색도움말로 F4를 간단(?)하게 활성화 시킬 수 있당 ^-^
2. 탐색도움말 만들기.
그래서 하는김에 탐색도움말 만드는 방법도 적어보고자 한다.

ㅎㅎ내 패키지에서 우클릭
Create-Dictionaty Object- Search Help
클릭.

나는 로컬로 해서 YMDMS_PERNR이라고 했다 ㅎㅎ.
(MDM은.. 나으1 모듈이다.)

DATA COLLECTION은 어떤 테이블에서 읽어와서 값을 보여줄건지 물어보는거다.
나는 HR테이블을 선택하였고, 검색 도움말 매개변수는 보여줄 변수들이다.

저기서 내가 서치헬프 보여줄때 사용할 필드를 선택하면 된당.
IMP : 받아올 데이터들
EXP : 내보낼 데이터
LPOS : 순서
나는 PERNR만 필요하므로 PERNR만 체크했다. ㅎㅎ
이렇게 지정해주고 저장 및 활성 시키면 끝~~~
ㅇㅣ정도만 해도 SEARCH HELP는 간단하게 띄울수있다.
다음번에 혹시 궁금하다면 ALV에서 서치헬프띄우는법.. 올리겠당.
모두에게 도움이 되었길.
