본문 바로가기
ERP-SAP/ABAP

<ABAP> SAP MEMORY, ABAP MEMORY 사용법 및 강좌

by 행복한워니의 기록 2012. 8. 16.
728x90
반응형



SAP 세션에 대해 완벽하게 그려진 그림입니다. 총 3가지의 세션을 가지는데



1. 유저 세션 : 로그인 한번 할때 마다 생기는 세션입니다. 그래서 같은 아디로 2번째 로그인할때 전의 세션을

종료할 건지 유지할건지 이런 선택창이 뜹니다. 로그인 안하고는 GUI접속이 안되기 때문에

가장 큰 의미의 세션입니다.

2. 익스터널 세션 : GUI창 하나 하나를 의미합니다. 처음에 들어가면 당연히 익스터널 세션은 1개이고

/o 를 통해 새로 생성되는 창은 2번째 익스터널 세션이 됩니다. BC가 설정하지 않는

이상 기본 디폴트 최대 6개의 세션을 가질수 있습니다.

3. 인터널 세션 : 창 하나 안에서 내부적으로 도는 세션들을 말합니다. 쉽게 설명해서 더블클릭해서 아밥에디터에서

바로 아밥 딕셔너리로 이동이나, 클래스를 클릭하면 클래스 빌더로 이동한다거나. 화면상으로는

이동한 화면만 보이지만 내부적으로 그전 화면의 인터널 세션도 같이 돌고 있기 때문에 F3으로

BACK해서 다시 원래의 화면으로 돌아갈 수 있는겁니다.. 기본 설정으로 20개의 세션을 가진다고 합니다.

∴ 유저세션 > 익스터널 세션 > 인터널세션

SAP MEMORY


- 익스터널세션간의 공유메모리, 단순한 변수형(값넣는거정도)만 선언가능.

즉 한번의 로그인으로 생기는 유저세션안에서 여러개의 익스터널세션(GUI창) 사이에서 공유되게됩니다.

그렇다면 로그아웃으로 유저세션이 종료된다면???

말 그대로 메모리이기 때문에 클리어하게 됩니다.

간단 예제를 통해 알아 봅시다.


REPORT zwr_sap1.
DATA gv_carrid TYPE scarr-carrid.
gv_carrid = 'AA'.
SET PARAMETER ID 'SAP00' FIELD gv_carrid.

"SET PARAMETER를 통해 메모리 아디이름을 부여하고 필드 뒤의 값을 넣어줍니다.


=========================================

REPORT zwr_sap2.
DATA gv_carrid2 TYPE scarr-carrid.
GET PARAMETER ID 'SAP00' FIELD gv_carrid2.

"GET PARAMETER를 통해 메모리 아디에 해당하는 값을 가져온 다음에 필드 뒤에 넣어줍니다.
WRITE gv_carrid2.


WRITE로 찍어보면 zwr_sap1에서 셋팅했던 AA라는 값이 그대로 2에서도 찍힙니다. 단..

1번 프로그램을 먼저 실행해서 메모리 셋팅을 해야됩니다.

확실한 개념을 알기위해 2번째 프로그램은 /o 해서 새로운 GUI창에서 실행해보시기 바랍니다.

그리고 현 유저세션은 놔두고 새로 로그인해서(기존세션유지해서 로그인) 2가지의 유저세션을 가진후

실행해 봅니다.







ABAP MEMORY


- 인터널 세션간의 공유메모리 여러가지 변수형(워크에어리어, 인터널테이블, 변수) 선언가능.

역시 로그아웃하게 되면 클리어 되게 되는 메모리이며, 다른 익스터널 세션(GUI창)에서는

공유가 안됩니다.

REPORT zwr_abap1.
DATA: itab TYPE TABLE OF sflight WITH HEADER LINE.
SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE itab
WHERE carrid = 'AA'.

"자 이제 값을 담은 인터널테이블을 아밥 메모리를 통해 공유해 봅시다.
EXPORT
memory_abap FROM itab
TO MEMORY ID 'ABAP00'.

" EXPORT 뒤의 내용이 중요합니다. ABAP00라는 메모리 ID에 변수 memory_abap을 넣는데

" 그 값을 from 뒤의 itab과 동일하게 알아서 맞춰줍니다.(변수=변수, 워크에어리어=

" 워크에어리어, 인터널테이블=인터널테이블)


*SUBMIT zwr_abap2. "주석풀어서도 실행해보세요!

"SUMMIT zwr_abap2를 호출하는데 현재 프로그램으로 복귀를 하지 않습니다.

"현재의 프로그램을 종료하고 zwr_abap2를 여신다고 보셔도 되겠습니다.

"다시돌아오기 위해서는 and return이 옵션으로 필요합니다. and return을 쓰게되면

"서브루틴을 도는 것처럼 호출한 프로그램을 탄 다음에 and return 다음라인으로

"오게됩니다.



=======================================================================



REPORT zwr_abap2.
DATA: itab2 TYPE TABLE OF sflight WITH HEADER LINE. "데이터를 받아올 인터널테이블선언

" 자이제 import로 받아옵시다! 역시 동일하게 메모리 ID가 ABAP00인 memory_abap을 itab2에

" 넣어줍니다.
IMPORT
memory_abap TO itab2
FROM MEMORY ID 'ABAP00'.
LOOP AT itab2.
WRITE:/ itab2-carrid, itab2-connid, itab2-fldate.
ENDLOOP.





이제 비교하면서 실행할때의 팁입니다. zwr_abap1을 실행한후에 f3으로 돌아와 zwr_abap2를 실행합니다.

결과를 보시고 zwr_abap1의 submit을 주석해제후에 실행해봅니다.

그 결과를 보시고 /ose80으로 하셔서 다른 익스터널 세션에서 zwr_abap2를 실행해 봅니다.












참고로 이런 녀석도 있습니다.

SHARED MEMORY - catalog 클래스와 root클래스 그리고 area 클래스 객체변수로 가르켜서 공유

728x90
반응형