오랜만에 남기는 글이다.
언제나 그렇듯이 이제는 좀 자주 남기려고 생각은 하고 있다. 생각은 자유니께 ㅎ
별거 아니라도 말이다.. ㅎㅎ
(Case)
SUBMIT 기능 자주 사용은 하는데, 실제로 Process 제어를 넘기고 싶지는 않고,
Result Set 만 가져오고자 할 때 ABAP Memory 를 사용한다.
EXPORT (IMPORT) MEMORY 구문을 써서 하면 간단하면서도
이게.. 은근 귀찮다.
변수 타입도 정확하게 맞춰줘야 하고 Memory 변수명도 그렇고.
이럴 때, 귀찮은 과정 생략하고 결과만 딱 가져올 수 있는 방법이다.
(Solution)
클래스
CL_SALV_BS_RUNTIME_INFO
이 녀석을 사용하면 제공되는 메소드 중에 이런 유용한 기능을 하는 애들이 포함되어 있다.
간단하게 예제 프로그램 소스를 보면,
(Source)
REPORT YTSR00160.
FIELD-SYMBOLS <LT_OUTTAB> TYPE STANDARD TABLE.
* Instruct Model to get the data
CL_SALV_BS_RUNTIME_INFO=>SET(
DISPLAY = SPACE
METADATA = SPACE
DATA = 'X'
).
SUBMIT SALV_DEMO_TABLE_SIMPLE AND RETURN.
* Retrieve Data
DATA: LO_DATA TYPE REF TO DATA.
TRY.
CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF(
IMPORTING
R_DATA = LO_DATA
).
ASSIGN LO_DATA->* TO <LT_OUTTAB>.
BREAK-POINT.
CL_DEMO_OUTPUT=>DISPLAY_DATA( <LT_OUTTAB> ).
CATCH CX_SALV_BS_SC_RUNTIME_INFO.
MESSAGE 'Unable to get data from SALV' TYPE 'I'.
ENDTRY.
아래처럼 Debugging 상에서 데이터가 들어오는 것을 볼 수 있다.
여기까지 하고 끝내려고 했으나,
호출되는 프로그램의 조회조건에 조건을 걸어 줄 필요가 있다면.. 저대로는 쓸 수가 없다.
그래서 추가작업을 좀 해줘봤다.
1. 조회조건 세팅하는 로직을 넣어주기
2. 함수로 만들어서 범용으로 사용할 수 있도록 등록
1.조회조건 세팅 로직
1.1. 변수 / 매크로 선언부
(Src.)
DATA: LT_SELECTION TYPE RSPARAMS_TT.
DEFINE _GMC_INPUT_SELECTION.
APPEND VALUE #( SELNAME = &2
KIND = &3
SIGN = &4
OPTION = &5
LOW = &6
HIGH = &7 ) TO &1.
END-OF-DEFINITION.
SALV_DEMO_TABLE_SIMPLE 프로그램의 조회조건 중에
Parameter 와 Radio Button 이 있다.
1) Parameter (Number of Data Records)
- P_AMOUNT
2) Radio Btn (출력형태)
- P_FULL
- P_LIST
- P_GRID
1.2. 조회조건 Setting Logic
(Src.)
_GMC_INPUT_SELECTION: LT_SELECTION 'P_AMOUNT' 'P' 'I' 'EQ' 10 SPACE.
_GMC_INPUT_SELECTION: LT_SELECTION 'P_FULL' 'P' 'I' 'EQ' SPACE SPACE,
LT_SELECTION 'P_LIST' 'P' 'I' 'EQ' 'X' SPACE,
LT_SELECTION 'P_GRID' 'P' 'I' 'EQ' SPACE SPACE.
(중략)
SUBMIT SALV_DEMO_TABLE_SIMPLE WITH SELECTION-TABLE LT_SELECTION
AND RETURN.
(중략)
그런데,, 결과값만 Itab 형태로 가져올 것이기 때문에 사실 Radio Btn 조건은 의미가 없다.
바보짓. ㅎㅎ
어쨌든.. 조회건수 조건에 10 을 지정했더니, 30 이 아닌 10 건만 가져옴을 확인했다.
2. 범용 Function 으로 생성
(Src.)
FUNCTION ZMM_GET_SUBMIT_RESULT.
IF IV_PROGNAME IS INITIAL.
RAISE NO_PROGNAME.
ENDIF.
CL_SALV_BS_RUNTIME_INFO=>SET( EXPORTING DISPLAY = ABAP_FALSE
METADATA = IV_METADATA
DATA = ABAP_TRUE ).
TRY.
CLEAR SY-BATCH.
SUBMIT (IV_PROGNAME) WITH SELECTION-TABLE IT_SELECTION
AND RETURN.
CATCH CX_ROOT.
RAISE SUBMIT_ERROR.
ENDTRY.
TRY.
IF IV_METADATA = ABAP_TRUE.
ES_METADATA = CL_SALV_BS_RUNTIME_INFO=>GET_METADATA( ).
ENDIF.
CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF( IMPORTING R_DATA = EO_DATA ).
CATCH CX_SALV_BS_SC_RUNTIME_INFO.
CL_SALV_BS_RUNTIME_INFO=>CLEAR_ALL( ).
RAISE SALV_BS_RUNTIME_INFO_ERROR.
ENDTRY.
CL_SALV_BS_RUNTIME_INFO=>CLEAR_ALL( ).
ENDFUNCTION.
'SAP > ABAP' 카테고리의 다른 글
Popup with One(Several) Input Field(s) & Confirmation Button (0) | 2024.07.11 |
---|---|
스마트폼을 PDF 파일로 이메일에 첨부하기 (2) | 2024.05.09 |
SAP Customer Exit CLFM0002 (0) | 2023.08.01 |
Program 중복 실행 금지를 위한 Lock Object 처리 (0) | 2023.07.17 |
문자열에 있는 공백을 다른 문자로 치환하기 (0) | 2023.01.11 |