메뉴 건너뛰기

SAP 한국 커뮤니티

ABAP & SAP Memory 정리

문바이 2012.04.08 23:08 조회 수 : 7067 추천:2

SAP Memory & ABAP Memory

사용목적 : 1명의 End User가  연관성 있는 프로그램을 사용하게 될 경우, A -> B로 또는 B-> A로 데이타를 넘겨주는 상황을 처리함

[프로그램A] 에서 [프로그램B]로 데이타를 넘겨주는 방법.
   1) Interface : submit명령사용, Selection Screen의 Input Field에 값을 직접입력하여 호출한다.
   2) ABAP Memory :

       [프로그램A]에서 Export명령을 통해 데이타를 내보낸후 Call Transaction을 통해 프로그램 [프로그램B]를 실행,

       [프로그램B]에서 Import명령을 통해 데이타를 확인한다.
   3) SAP Memory :

      [프로그램A]와 [프로그램B]가 동시에 실행중이다.

      [프로그램A]는 set명령을 통해 데이타를 기록한다. [프로그램B]는 get명령을 통해 데이타를 확인한다
   4) Database Table :

      [프로그램A]와 [프로그램B]가 동시에 실행중이다.

      중간 데이타 매개체로 임시테이블에 Write/Read/Delete등을 수행 Data를 공유한다. (임시테이블을 만들어야 함)
   5) Presentation Server :

      [프로그램A]에서 외부파일로 Local PC에 저장했다가

      [프로그램B]에서 아까 그 Local File을 Import하여 가공한다. (로컬PC에 download, Upload를 해야하는 단점이 있다) 

[프로그램A] 에서 [프로그램B]을 호출하는 방법. ( Internal Session 사용, ABAP Memory사용) 
   1) [프로그램A]실행 -> A에서 [프로그램B]호출 -> [프로그램B]실행 -> [프로그램B]종료 ->[프로그램A]복귀             
       [프로그램A] : Call Transaction 'Z14_007' AND SKIP FIRST SCREEN.             
       [프로그램B] : Leave Program.             
   2) [프로그램A]실행 -> A에서 [프로그램B]호출 -> [프로그램B]실행 -> [프로그램B]종료              
       [프로그램A] : Leave TO Transaction 'Z14_007' AND SKIP FIRST SCREEN.             
       [프로그램B] : Leave Program.             

용어설명 및 이론편        
   Terminal Session  : 1명의 End User는 Login을 통해 1개의 Terminal Session을 갖는다.
   External Session  : 1개의 Terminal Session은 동시에 실행할수 있는 Window 6개를 갖는다. (이는 세팅값을 통해 조절가능)
   Internal Session   : 1개의 External Session "Call Transaction" 명령을 통해 20개의 Internal Session을 가질수 있다.
         120EA Internal Session = (1 Terminal Session  * 6 External Session * 20 Internal Session )
   SAP   Memory :

       External Session간에 데이타를 공유할 목적으로 Login된 순간부터 종료될때 까지 유지되는 메모리 영역. (Static, Global) 

   ABAP Memory :

      1개의 프로그램 Window가 "Call Transaction"을 통해 순간적으로 데이타를 넘겨주고 받아야 할경우 사용되는 메모리 영역. 

  SPA/GPA Technic (Set Parameter Area/Get Parameter Area Technic) :SAP Memory를 이용하여 데이타를 공유하는 기술. 

sap memory.jpg

SAP Memory (SPA/GPA 기술 )를 이용하여 데이타를 공유하는 방법

SPA/GPA Parameter (User specific Parameter) : SAP Memory에 매개체가 되는 변수

SAP

Memory

SM30(T-CODE)를 이용 테이블명(TPARA)를 실행. 

사용하기 전 SAP Memory에서 사용할 Parameter Name<pid>의 Unique를 확인하고 값을 설정해야 한다. 
SET PARAMETER ID <pid> FIELD <f>.    " ABAP Memory에     <pid> = <f>를 할당한다. 
GET PARAMETER ID <pid> FIELD <f>.    " ABAP Memory로 부터 <f> = <pid>를 할당한다. 
PARAMETERS : p_1 TYPE c MEMORY ID 'pid'.  "  ABAP Memory 'pid'를 화면파라멘타 p_1에 연계시킨다.

                                                                                      "  Selection Screen은 안된다.       
SCREEN PAINTER를 이용하여  [SET Parameter, GET Parameter] 속성을 통해 구현할 수도 있다.
 
장점 : SAP Terminal Session에서 Global하게 사용할 수 있다.   
단점 : SAP Memory에 저장할수 있는 데이타의 제약이 너무크다. Parameter만가능. (itab , Structure는 저장할 수 없음)
         SAP Memory를 사용하기전 Memory ID를 지정해야만 한다. (너무 많이 사용하면 중복이 발생할 수 있다)

Debugging을 통해 ABAP Memory를 확인하는 방법.
   ECC 6.0 이상.            
   가) 디버깅 창에 동그라미친 아이콘이 존재한다. 이것을 클릭하면 선택영역이 나오는데
   나) 여기서 System Areas를 선택한다.

   다) 새로등장한 창에서 Area항목에 "SMEM"을 입력해 주면 현재 ABAP메모리를 확인할수 있다.

 debug.jpg

ABAP Memory : Window  변수 (instant 변수)

주로 Call Transaction명령들을 통해 다른 화면을 호출할 경우, itab/변수/구조체를 넘길 때 사용한다. [매우 빈번히 사용된다.]

ABAP

Memory

EXPORT obj1 ... objn TO MEMORY ID key.     "ABAP메모리에  데이타를 넘겨준다. [key]값은 임이로 만들면 된다. 
   EXPORT gt_sflight TO MEMORY ID 'TEST_ID'.
IMPORT obj1 ... objn FROM MEMORY ID key.     "ABAP메모리로 부터 [key]에 해당하는 값을  받아온다.
   IMPORT gt_sflight FROM MEMORY ID 'TEST_ID'.
FREE MEMORY [ID key].    " ABAP메모리로부터 [key]또는 전체를 삭제한다. 
            
EXPORT obj1 .. objn TO SHARED BUFFER indx(st) ID key.    "SAP Memory의 SAP Buffer을 이용하여 광역변수를 줄수있다 
IMPORT obj1 ... objn FROM SHARED BUFFER indx(ST) ID key. "SAP Memory의 SAP Buffer을 이용 광역변수를 받을수 있다
            
장점 : dobj(ABAP에 정의하는 변수)는 모두 주고 받을 수 있다.