이전 글에서는 기본적인 Search Help의 생성과 각 항목이 가지는 의미를 살펴보았다. 기본적인 Elementay Search Help의 경우 Table, View 등의 제공되는 데이터를 보여주는 기능이라면, 사용자가 생성한 임의의 데이터를 Search Help에 보여주려면 어떻게 해야 할까? 테이블이 하나가 아니거나, 조건에 의해 생성된 데이터를 보여주고 싶을 때 Search Help Exit을 사용하면 편리하다.
Search Help Exit은 Search Help를 구현할 때 조건을 받는 IMP 파라미터 값으로 화면에 보여줄 데이터를 출력하는 Internal Table(Hit List)을 코딩을 이용해 가공한다. 이런 작업을 지정한 Function 안에서 구현하는 형태라 하겠다.
Search Help Exit을 위한 Function에는 Changing 파라미터 2개와 Table 파라미터 2개가 필수로 필요하다.
Parameter Type | Parameter Name | Data Type |
Changing | SHLP | TYPE SHLP_DESCR |
Changing | CALLCONTROL | TYPE DDSHF4CTRL |
Tables | SHLP_TAB | TYPE SHLP_DESCT |
Tables | RECORD_TAB | LIKE SEAHLPRES |
해당 파리미터의 이름은 마음대로 바꾸면 활성화 시 아래와 같은 에러가 발생한다. 이것은 Standard 프로그램과 데이터를 주고받는데 필요한 규약이라 보면 된다.
1) Function 생성.
아래와 같이 Function을 하나 생성하고 4개의 파라미터를 추가해주자.
2) Search Help Exit 매핑.
Search Help에 생성한 Function을 Search Help Exit 항목에 매핑해보자. 활성화 버튼을 누르면 무난하게 활성화가 가능할 것이다. 또한 테스트를 위해 KKREF필드를 IMP 파라미터로 선언해주자.
3) 코딩으로 데이터 생성.
Callcontrol
: Exit의 어느 단계에 영향을 주는지 결정되므로 원하는 단계에 코딩을 넣어 데이터를 설정한다.
Callcontrol-Step 필드의 값
SELONE | Collective search helps가 Call 될때만 사용가능한 Step 이 단계에서 변경이 없으면 Elementay Search Help를 선택하는 화면으로 넘어 갑니다. 선택화면을 Skip하고 자신이 원하는 Elementay Search Help를 선택하려면 SHLP 파라미터에 설정가능합니다. 변경후 다음 Step은 'PRESEL' or 'SELECT'가 가능합니다. |
PRESEL | Selection conditions이 보여지기 전에 영향을 줄수있는 Step Selection conditions 대화창을 Skip 하거나, 화면이 표시되기전에 값을 변경할수 있다. 대화창을 Skip 하려면 CALLCONTROL-STEP을 'SELECT'로 변경하면 된다. 만약 Selection conditions값을 바꾸려면 이 Step에서 SHLP-SELOPT 값을 변경하며된다. |
SELECT | Hit List 화면의 데이터를 보여주기전에 제어한다. 빈번히 사용되는 단계이다. 데이타추출 자체를 Skip 하려면 CALLCONTROL-STEP을 'DISP'로 변경하면 된다. 화면에 보여줄 데이타가 1건이면 보여주는게 의미가 없으므로 CALLCONTROL-STEP = 'RETURN'으로 변경하여 바로 EXP필드에 입력이 되게도 가능하다. |
DISP | 결과목록이 표시되기전 마지막 단계에 영향을 줄수있는 Step 만약 표시된 데이타가 없어서 다시 선택화면으로 돌아가고 싶으면 CALLCONTROL-STEP을 'PRESEL'로 변경하면 된다. |
EXIT | 처리 Block을 빠져나감. |
RETURN | 데이타 List를 생략하고 바로 EXP필드에 넣어주고 종료. (화면에 바로반영됨) |
이 무슨 말인지 어렵다. 위의 STEP은 사용자가 코딩을 이용해 Search Help를 제어할 수 있는 제어점을 준 것이라 보자.
순서로 보면 SELONE -> SELECT -> DISP가 기본이고 옵션은 넣는다면 SELONE -> (PRESEL) -> SELECT -> DISP 정도의 순서로 움직인다 보면 되겠다.
1) Exit을 통한 Hit List 제어.
Search Help Exit을 이용해 가장 많이 하는 작업은 Possible Enrty로 보여줄 데이터를 조작하는 것일 것이다.
T025 테이블의 BKLAS 가 3000 ~ 3999 사이만 나오게 제한을 해보겠다.
아래 변수를 선언해 주자.
보여줄 데이타를 가공해야 하므로 CALLCONTROL-STEP = 'SELECT'에 코딩을 하자.
T025 테이블에서 3000 ~ 3999를 읽은 Internal Table을 F4UT_RESULTS_MAP의 source_tab에 넣어주면 화면에 보여주기 위한 형태로 가공되어 record_tab으로 리턴해준다.
결과를 보기 위해 ZTMPT0001 테이블에 EXP파라미터와 동일한 필드 2개를 넣어주고, BKLAS 필드에 Entry help/check탭에서 Search Help를 달아줘 보자. 이때 Search Help와 두 개의 필드를 매핑해준다.
테이블에 Search Help 다는 방법은 이전 글을 참고하자 [SAP ABAP 강좌 6] 테이블 (Table) - Search Help
두 개의 필드 BKLAS, KKREF가 Search Help와 매핑되게 넣어준다.
테이블의 데이터 보는 버튼인 Contents 버튼을 눌러보자. 여기서 BKLAS 필드의 Possible Entry를 띄워보면 3000번 때만 화면에 표시되는 것을 볼 수 있다.
여기서 임의로 읽어둔 Internal Table을 한건만 남기고 지워보자. 화면에 선택을 위한 Hit List 없이 바로 필드에 값이 들어간다. 이것은 1건이면 CALLCONTROL-STEP = 'RETURN'으로 설정이 되어있기 때문이다.
2) IMP 파라미터 받기.
다음은 IMP 파리 미터로 값을 받아 Hit List를 제한해 보자. KKREF 필드에 0010을 넣을 상태에서 BKLAS의 Possible Entry를 띄워보자. (Internal Table을 한건만 남기는 코딩은 지워 원복 한다.)
값을 받을 Range 변수를 추가 선언한다.
IMP 파라미터 값을 위한 아래 코딩을 추가하고, SELECT문에도 Range 변수를 조건으로 추가해준다.
이렇게 하고 KKREF필드에 0010 넣은 상태로 BKLAS의 Possible Entry를 띄워보자.
IMP파라미터 값을 받아 Hit List가 제한됨을 볼 수 있다.
주의할 점은 Table의 필드에 Search Help Exit을 사용하면 IMP파라미터는 제대로 동작하니 않는 것처럼 보일 수 있다.
Seach Help를 매핑할 때 두 필드 BKLAS, KKREF를 매핑했고 BKLAS에 Seach Help를 달면 KKREF 즉 Seach Help를 연결하지 않은 미핑 된 필드들도 IMP처럼 동작한다. Exit이 사용자 제어를 위한 넓은 범위를 제공한다. Ranges 형식의 변수에서 값을 받을 경우 들어오는 값은 SHLP-SELOPT로 받을 수 있다.
여기서 한 가지 테스트를 더해보자. 테이블에 유지보수 틀(나중에 유지보수 뷰와 혼돈될 수 있어 틀이라 구분한다)을 만들고 SM30에서 테스트를 해보자.
Table의 한 라인처럼 데이터의 소속 라인이 특정되고, Range처럼 범위로 값이 주어지지 않을 경우는 아래처럼
IMP 파라미터를 SHLP-INTERFACE로 받아야 한다. 이렇게 동작하느것이 IMP파라미터를 사용한 것에 더 가깝겠다.
설명이 좀 어렵다. 하고 싶은 말이 많다 보니 두서가 없어지나 보다.
다음 포스팅은 Search Help를 좀 더 많은 예를 구현해 보고, Collective Search Help도 다뤄보자.
긴 글 읽어주셔서 감사합니다.
'ABAP' 카테고리의 다른 글
[SAP ABAP 강좌 12] Search Help 예제 (0) | 2020.12.30 |
---|---|
[SAP ABAP 강좌 11] Collective Search Help (0) | 2020.12.28 |
[SAP ABAP 강좌 9] Search Help - 생성 (0) | 2020.12.14 |
[SAP ABAP 강좌 8] 테이블 (Table) - Append,Include Structure (0) | 2020.12.08 |
[SAP ABAP 강좌 7] 테이블 (Table) - Index (0) | 2020.12.03 |
최근댓글