메뉴 건너뛰기

SAP 한국 커뮤니티



abap 교육정리

열공아밥 2010.02.01 21:52 조회 수 : 16359 추천:2

http://hanoori.pe.kr/122?srchid=BR1http%3A%2F%2Fhanoori.pe.kr%2F122































3-2장 .

SE11 -> SE16으로 볼때...

SPFLI  Table 을 이용하여 확인을 하여본다.

파란색은  Key

노란색은 Check Table을 가지고 있음을 뜻한다.

spfli -> zkdn_spfli08 로 복사.

Single insert를 하기 위하여.

z08_kdn_20091007_1  의 Excutable program을 만든다.


REPORT  z08_kdn_20091007_1.

DATA: wa1 TYPE zkdn_spfli08.

SELECT SINGLE * FROM spfli INTO wa1.

INSERT into zkdn_spfli08 values wa1.

WRITE: / sy-subrc.


이렇게 하고 SE16 에서 Table 에 데이터가 들어가 있는지 확인해본다.

0 이 나오고 데이터가 삽입 된 것을 볼 수 있다.


자 이제 전체 데이터를 삽입 하는 것을 해보자.



DATA: wa1 TYPE zkdn_spfli08,
              it1 TYPE TABLE OF zkdn_spfli08.

SELECT *
  FROM spfli
     INTO TABLE it1.

INSERT zkdn_spfli08
  FROM TABLE it1.
 

 
업데이트도 해보자~



DATA: wa1 TYPE zkdn_spfli08,
              it1 TYPE TABLE OF zkdn_spfli08.

SELECT *
   FROM spfli
    INTO TABLE it1
 WHERE  carrid EQ 'AA'.


UPDATE zkdn_spfli08
       SET cityfrom = 'SEOUL'
   WHERE carrid EQ 'AA'.



modifying single Record / Several Records 중요합니다.


원래는 modify가 인터널 테이블만 수정하게 되어있거든요

하지만 데이터베이스에도 적용이 됩니다.

있으면 업데이트 없으면 인서트~


MODIFY zkdn_spfli08 FROM TABLE it1.


update는 있는 데이터에 대해서만 적용을 할 수 있지만...

modify 는 없는 데이터도 넣어 줄 수 있다.

oracle 의 merge insert 와 똑같다.

14 page

Rollback 을 일으킬수 있는 방법은 2가지 방법.

☆★☆ ,, causing a database rollback.

1. Sending a termination dialog message (A-Message)

2. Using the ROLLBACK WORK ABAP Statement.



Message A Type 을 이용하는 방법과 Abap Statement 인 Rollback Work 를 이용하는 방법

이 있는데 .. Rollback Work 를 이용하면 DB는 Rollback 되지만 프로그램이 종료되지 않는 문제가 있다.

이 때문에 A-Message 를 사용하는것이 올바르다.

terminates program  - program 을 끝낸다.

Page 44

LUW - Logical Unit of Work


Commit WORK

여기서 시험문제가 간혹 나오는데...

각 데이터베이스에 대한 테이블들은 하나인것처럼 움직이게 되고 이것이 바로 LUW이다.

Hint

Due to the abobe-mentioned, implicit DB commits, changes that belong to an

SAP LUW may not be placed in different dialog steps( dialog step = program

processing after a screen). The reson is because these steps would thus not because

within a DB LUW.


Locks Concept

1. Lock 걸고                2. Read 하고                   3.  Change 하고                     4.    Lock 풀어라

E-WP(LockTable)

1. Lock Object(se11에서 생성)  / (EZ* / EY*)                                   
  
                                                                                                            
      Lock mode   ┌   E : Write Lock                           - 누적 O            
                         ├   S : Shared Lock(Read Lock)      - 누적 O               
                         └   X : Exclusive Write Lock            - 누적 X                 --------------------┼-------------------
                                                                                                             
     Lock Parameter - (Lock Argument.)Key Field                               
                                 Key field 들의 묶음.                                                                  


    예를 들어 SPFLI Table 을 보면
    MANDT, CARRID , CONNID 가  Key Field 인데...
    MANDT 만 제공 하였을때와  MANDT , CARRID , CONNID 까지 모두를 제공 하였을 때의 
    범위가 틀리다는 이야기이다.

2. Lock Module.

 
Lock Object를 Active(불) 될때  Lock Module 이 만들어 진다.
  2개   ENQUEUE_EZ* ---------(Function Module) Lock 잡기
          DEQUEUE_EZ* ---------(Function Module) Lock 풀기


3. Using Lock ( Monitering : sm12)


(프로그램에서 호출)


















 프로그램 내에서 호출  서로다른 user가 호출
 E :누적O  Lock걸 수 O  Lock 걸 수 X
 X :누적X  Lock걸 수 O  Lock 걸 수 X
 S :누적O  Lock걸 수 O  Lock 걸 수 O


4. flush_enqueue (Lock Container)     : lock Container 의 데이터를 lock Table 다 쏟아 낸다.(하나라도 안 들어가면..  안 들어간다.)
  Lock Container (RESET_ENQUENE) : lock Container 의 데이터를 초기화 시킨다.


POC 방식 ...:  Perform on commit       

Page 85 (Setting and Releasing Locks - Timecourse)
         

1. Setting locks for the data to be processed.

2. If the lock has been successfully set , read the current data from the database.

3. Change the program data (user inputs) and update the changes to the database

4. Release set locks once again.

이 원칙을 잘 정리해 놓으셔야 합니다.


         
         

Lock 을 먼져 해야하는 이유는?


Lock 을 걸거나 Lock 이 걸린 것을 확인 하는 작업을 먼져 하지 않고 Read를 해버리면...

다른 사람이 같은 테이블을 건드리거나 할때 변경이 일어난 데이터를 가져와서 작업 할 수도 있고

-- 이는 동기화에 대한 문제이다. --

고로 Lock 을 먼져 걸고 모든 작업을 할 수 있도록 해야한다.

lock object 를 생성합니다.

se11 로 이동후 이름은 EZKDN_SPFLI08 로 준다.




Lock Parameter 에 key Field 를 어떻게 주느냐에 따라서 ... 데이터의 양이 틀리다.

키가 3개인데 3개를 다 적용하게 되면 데이터는 범위가 작아지고 1개만 적용하면 데이터의 범위가 더 많아지게 된다.


Lock Object 를 적용 시킨것은 se37 (function module 이기 때문에)  Function Module       ENQUEUE_EZKDN_SPFLI08에 접근하여

확인 할 수 있다.



* SM12 를 이용해서 Table 을 확인 할 수 있다.

Program 을 실행 시키고 Table 명을 주면 어떤 계정이 Table 을 작업하고 있는 것을 확인이 가능하다.


SE11을 이용해서 LOCK OBJECT를 만들어 주고...

LOCK MODULESE38 및 프로그램에서 PATTERNFUNCTION 에서 불러 낸다.

E, X, S  중 어떤 것으로 LOCK 을 실행하는지에 따라 적용이 틀리다.


_COLLECT 를 X 로 지정하면 LOCK 들을 LOCK CONTAINER 에 담아둔다.

FLUSH_ENQUEUE 라는 FUNCTION 을 실행시켜서 작업.

LOCK CONTAINER 를 삭제 하게 하려면...

교재 83  의 RESET ENQUEUE 를 사용한다.


                      function Module : DEQUEUE_ALL 을 하면 Lock 을 모두 풀 때...
  (A, B, C)



(오후)
100 Page 시작

맨 마지막에 지금까지 update해야 할 것들을 묶어서 한방에 update 를 하게 된다.

- last Dialog step


*CHANGE

~모아서 처리.

 
1. 일반적인 방식(Program 내부:  POC 방식) - WITHIN THE APPLICATION PROGRAM
        EX) PERFORM xxxx ON COMMIT.
        바로 Update 를 하지 않고, Commit work 가 수행될 때 일괄 처리
        SIMPLE ... QUICKLY , LIGHT LUW 를 사용해라.

 
  2. 진보적 방식(Function Module)
        Attribute (update check)
        내부 update 문장들...
           rollback 처리 Message A Type .

 
 

 
  COMMIT WORK 설명 중 짠 PROGRAM - Z08_KDN_20091007_3
 

DATA: wa1 TYPE zkdn_spfli08.

SELECT SINGLE *
  FROM zkdn_spfli08
  INTO wa1
 WHERE carrid = 'AA'
  AND connid = '0007'.

wa1-cityfrom = 'DAEJEON'.
wa1-cityto = 'KWANGJU'
PERFORM update_zkdn_spfli001 ON COMMIT.
COMMIT WORK.
perform update_zkdn_spfli08.
*&---------------------------------------------------------------------*
*&      Form  update_zkdn_spfli08
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM update_zkdn_spfli08 .
  MODIFY sairport FROM wa1.
ENDFORM.                    " update_zkdn_spfli08



Page 109

PROCESS : WRITING REQUESTS

* CALL Function 'XXX' In UPDATE Task
cflcct

Log Table 에  Request 형태로 쌓아지게 된다.

Commit work 을 만날때 수행(일괄처리)


SE37 로 이동.

ZKDN_UPD08_1 로 만들고

attributes tab에

update module 선택 해주기.

FUNCTION 에서 IMPORT 되는 IM_WA 에 대해서

PASS VALUE 를 CHECK 해주기 바람.

SOURCE CODE 에 값을 넣어주기.

       
MODIFY zkdn_spfli08 FROM im_wa.

        IF sy-subrc NE 0.
          MESSAGE a002(z08_kdn) WITH 'could not be update'.
        ENDIF.



PROGRAM 짜기...


DATA: wa1 TYPE zkdn_spfli08.

      SELECT SINGLE *
        FROM zkdn_spfli08
        INTO wa1
       WHERE carrid = 'AA'
        AND connid = '0007'.

      wa1-cityfrom = 'SEOUL'.
      wa1-cityto   = 'BUSAN'.
     
*pattern 을 사용하여...  ZKDN_UPD08_1 을 입력하고~  알맞은 값을 넣어준다.

      CALL FUNCTION 'ZKDN_UPD08_1' IN UPDATE TASK
        EXPORTING
          im_wa = wa1.

      COMMIT WORK.

     

update 에 대한 function module 을 사용하여 작업을 해 보았다.

log table 에 값을 넣어 두었다가 update process 에서 적용을 하더라....



그림 51 밑에 보세요 114 page


Both procedures

delete all previous update flags

delete all previously set locks,

discard all of the updates executed in the current DB LUW,

and discard all of the form routines registered using "PERFORM ON COMMIT".



* Program 까지 함께 죽이려면 Message Type A 를 사용하라.

* ROLLBACK WORK 이나  COMMIT WORK 은 function module에 적지 않는다.


page 117

* update mode 3가지.


1. Asynchronous Update


D - WP                                     U-WP

LUW1

COMMIT WORK   ->       바로 이관

LUW2



2. Synchronous Update



D-WP                                                    U-WP

LUW1

COMMIT WORK AND WAIT         -이관이 될 동안 LUW2 를 실행 안 하고 기다리고 있다.


LUW2


3. Local Update


D-WP
--------------------------
SET UPDATE TASK LOCAL
--------------------------
LUW1

commit work

LUW2
---------------------------


*기다리고 빠르게 느껴진다. (메모리 관리를 한다.)
   


    log Table 에 들어가게 하려면...

    CFIUT 를 해야 request 형태로 들어간다.
       


Function Module 의 내부 :  Attribute


V1 ┌  1번째.   
     │             Priority 중요성 높음 (Async , sync ,local)
     └  2번째.
      
V2  ┌  3번째.
      │            Priority 중요성 낮음 (Async , sync )
      └  4번째.


* V1 은 Memory 사용 , V2는 Memory 미사용.


V1 이 성공해야 V2가 실행... 된다....

Lock 메카니즘은 .. V1까지 ... 적용된다.

sm13에서 확인이 가능하다.

update module 에.. V1update 에서

Page 136

submit 은 report program 만 호출이 가능함.

돌아오지 못함.

external Session 이 열려서 function Call.. 예~

패스패스패스

Page 151

Navigation

Starting new Task 'T1'

  External Session 을 하나 더 열어서 실행.
 
  Call Function
 
  Submit and Return
 
  Call Transaction


땀돌이 08 풀어보기

An Authority-Check 는 At selection-Screen 에서 사용된다.



 
 
     0   0



















이 글의 관련글(트랙백) 주소 ::    http://hanoori.pe.kr/trackback/122



> > > >
관련글 쓰기

































아이디 
비밀번호 
홈페이지 

비밀글   











 











<<이전 | 1 ... | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 ... | 118 | 다음>>





별책부록's Blog is powered by Daum


 





























번호 제목 글쓴이 날짜 조회 수
» abap 교육정리 [5] 열공아밥 2010.02.01 16359
1223 SAP 용어 총괄 [19] file 블루레인 2007.02.14 16349
1222 Report zdynamic_itab_05 Error [3] file 청이 2011.03.31 16327
1221 <img src=c.gif>3D 그래픽 출력 프로그램[추천:e-abap][추천:열공아밥] [23] file 양키 2010.06.18 16324
1220 sap 문서가 열리지 않을때 참조하세요 [6] kim jong dae 2010.10.14 16312
1219 Using selection-screen in Table Maintenance Generator [9] file 양키 2012.12.12 16294
1218 <img src=d.gif>notes 번호로 검색하는 프로그램[추천:보나] [9] 열공아밥 2010.07.15 16233
1217 심심풀이 빙고게임...;;(초보니..이해해주세요 ^^;;;) [10] 그림장이 2012.01.20 16196
1216 영문 abap 교재 입니다. [12] 아밥뽀 2012.03.22 16168
1215 좀 오래된거지만.. Timer test요.. [4] file 밥~~ 2010.12.05 16127
1214 ABAP 교육 자료 입니다. (한글 6권 및 샘플 1권 입니다.) [85] file 촌놈악마 2010.05.28 16043
1213 BW 데이터 소스 자료입니다. [7] file rednut79 2010.10.04 15947
1212 <img src=d.gif>SAP screen에 그림파일 조회하기(5)[추천:보나] [19] file 춘풍 2011.03.11 15909
1211 <img src=d.gif>note적용하기 snote 사용[추천:e-abap] [16] file 신촌독수리 2010.05.11 15909
1210 Abap Workbench Concepts (TAW12) [7] file 모포 2010.06.18 15859
1209 ABAP for Power Users [8] file 나침반친구 2007.02.09 15833
1208 CO 용어집 [21] file 플래툰K 2012.01.18 15815
1207 <img src=c.gif>SAPexecute 프로그램 만들어봤습니다.[추천:e-abap][추천:열공아밥] [19] file 양키 2010.06.21 15802
1206 Webdynpro for ABAP vs JAVA 영문문서 [7] file 열공아밥 2010.07.15 15788
1205 <img src=d.gif>SAP screen에 그림파일 조회하기(6)[추천:보나] [18] file 춘풍 2011.03.11 15782