SAP Memory와 ABAP Memory
SAP GUI에 로그인하면 하나의 사용자 터미널 세션이 생성된다.
이 터미널 세션에는 최대 6개의 GUI윈도우를 실행할 수 있다.
이때 6개의 윈도우를 외부세션(External Session)이라고 한다.
하나의 외부세션은 최대 20개의 내부세션(Internal Session)을 가질 수 있다.
내부세션은 하나의 외부세션 내에서 실행중인 프로그램이 다른 프로그램을 호출할때 성되는 세션이다.
사용자 터미널 세션: SAP에 로그인하면 생기는 전체 작업 공간이야.
외부 세션: 이 작업 공간 안에서 열 수 있는 최대 6개(또는 S/4 HANA의 경우 16개)의 창들 . 각 창은 독립적인 것처럼 보이지만, 사실 메모리를 공유하고 있다 .
내부 세션: 하나의 외부 세션 안에서 프로그램이 다른 프로그램을 부를 때 생기는 작은 작업 공간. 최대 20개까지 만들 수 있다.
ABAP 메모리: 동일한 외부 세션 안에서 실행되는 프로그램들끼리 데이터를 공유하는 메모리.
각각의 외부세션에 하나만 존재한다.
각각의 프로그램은 자신의 내부세션을 가지고, 내부세션은 스택에 쌓인다.
데이터를 주고받을 때는 EXPORT/IMPORT 구문을 사용한다.
SAP 메모리: 사용자 터미널 세션 내의 모든 외부 세션에서 접근할 수 있는 Global Memory

User Terminal Session (최상위): 사용자가 SAP GUI에 로그인할 때 생성되는 가장 큰 단위.
External Session: 사용자가 새 창을 열 때 생성되는 메인 세션입니다.
Internal Session: 하나의 외부 세션 내에서 프로그램이 실행되거나 다른 프로그램을 호출할 때 생성되는 세션.
ABAP Memory: 동일한 외부 세션 내에 있는 내부 세션들끼리만 데이터를 주고받을 수 있는 메모리 . External Session 레벨에 존재.
SAP Memory : 모든 외부 세션이 공통으로 접근할 수 있다. User Terminal Session 레벨에 존재.
TYPE-1(리포트 프로그램 프로그램을 호출할때,
Submit 구문을 이용해 Selection screen의 Input필드에 값을 입력하거나,
Parameters (단일 값): WITH [필드명] = [값]
Select-options (범위 값): WITH [필드명] IN [Range 인터널 테이블]
DATA: lr_date TYPE RANGE OF sy-datum,
ls_date LIKE LINE OF lr_date.
" Select-option을 위한 Range 데이터 준비
ls_date-sign = 'I'.
ls_date-option = 'BT'.
ls_date-low = '20240101'.
ls_date-high = '20241231'.
APPEND ls_date TO lr_date.
SUBMIT z_target_report
WITH p_user = sy-uname " Parameter에 값 전달
WITH s_date IN lr_date " Select-option에 Range 테이블 전달
VIA SELECTION-SCREEN " (선택) 화면을 보여줄지 여부
AND RETURN. " 실행 후 다시 현재 프로그램으로 복귀
Selection screen의 Variant를 호출하는 방법
(복잡한 입력 조건을 매번 넣기 힘들 때, 백그라운드 작업(Batch Job)을 돌릴 때 등 )
" 예시: 'MONTHLY_BATCH'라는 이름의 Variant를 사용하여 호출
SUBMIT z_target_report
USING SELECTION-SET 'MONTHLY_BATCH'
AND RETURN.
ABAP Memory를 이용하여 EXPROT, IMPORT 구문을 사용한다. 동일한 파라미터 명을 사용한다.
" [프로그램 A] 데이터를 메모리에 저장 (보내기)
DATA: gv_text TYPE string VALUE 'j_wisdom_h'.
EXPORT p1 = gv_text TO MEMORY ID 'ZMY_NICKNAME'.
" 'ZMY_NICKNAME'이라는 메모리id에
" gv_text를
"'p1'이라는 이름으로 데이터를 넣음
" --------------------------------------------------
" [프로그램 B] 메모리에서 데이터를 읽기 (받기)
DATA: gv_received TYPE string.
IMPORT p1 = gv_received FROM MEMORY ID 'ZMY_MEM'.
" 'ZMY_NICKNAME' 메모리id에서
" 'p1'이라는 이름을 찾아 데이터를 꺼냄
SAP Memory영역의 파라미너 ID를 이용해 데이터를 넘겨준다.
" [창 1] 사용자가 입력한 회사 코드를 글로벌하게 저장
SET PARAMETER ID 'BUK' FIELD '1000'.
" 'BUK'라는 공용 게시판 위치에 '1000'이라는 값을 딱! 붙여둠
" --------------------------------------------------
" [창 2] 다른 프로그램에서 그 값을 자동으로 가져옴
DATA: gv_bukrs TYPE bukrs.
GET PARAMETER ID 'BUK' FIELD gv_bukrs.
" 공용 게시판 'BUK' 위치에 있는 값을 읽어와서 변수에 담음
가장 일반적인 방법.
프로그램 A가 데이터를 테이블에 저장하고,
프로그램 B가 테이블에서 데이터를 조회
SAP GUI가 실행 중인 로컬PC에 데이터를 파일로 다운로드했다가 업로드하는 방법 (GUI_DOWNLOAD, GUI_UPLOAD)