분류 전체보기 (122)
공지사항 (3)
주저리 주저리 (26)
Ubuntu (3)
개발관련 (37)
개발이야기 (6)
Language (20)
Framework (5)
Pattern (2)
DataBase (4)
Server (4)
Book (9)
스터디 (0)
oracle  다짐  HFSD  ubuntu netbook remix  자바  mylyn  db connection  STRUTS2  Head First Software Development  Eclipse 
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
+ dazzi님 블로그
+ 온 오프 믹스! (모임,세미…
+ kenu blog
+ OKJSP: 사는 얘기
+ 정호님 블로그
+ 존경하는회수형님
+ 자바지기님 블로그
+ 루비나라 출입구
+ 은정이누나 블롯
+ Total :
+ Today :
+ Yesterday :
  

 

 

 

ABAP 6일차
+   [Language/ABAP]   |  2009. 9. 28. 17:20  
unit 7부터 ...

Structure 는 ...

field 1 ,field 2 , field 3 ,  field 4(itab)

Structure type 안에 internal Table 형태로

component가 지정 될 수 있다.


structure   -> wa

namming 을 할때..

보통  "wa" 로 시작하면 Structure라고 생각 할 수 있고...

"Itab" , "it" 로 시작하면... Internal table이다.



중첩 Structure 와 Internal Table~ 예~



실습

199page

SE11

domain 생성

domain checked

screen field

data element 생성시

field label 에서 shot , Medium , Long, Heading
                          (10) , (15),          (20), (15)
                         
default Long 으로 적용되고 실제 Screen field에서

First Name 네모

 중 보여지는 이름을 구성하는 부분이 된다.
 
 
 SE38에서 Excutable Program을 만들어 봅니다.
 
 ZBC430_08_DATA_ELEMENTS 라고 이름을 지어 줍니다.
 
 
 오늘 배우는 것들은 domain 을 만들고
 
 domain 에서의 Data Element 를 만드는 과정을 알고...
 
 
*  정리 1
 
 FIELD    REF FIELD
 --------------------------
 CURR     CUKY
 QUAN     UNIT
 
 
CURR은 원화 FIELD이다. 하지만 ($, \, ... ) 인지 알아야 하기 때문에

CUKY 에 (USI ) 등의 식으로 값이 들어가 있다면 $인 것을 알 수 있다.


테이블 만들기 ㅋㅋㅋㅋ


* 정리 2

*TWO-Level Domain Concept

Table F1 | F2 |  F3 |  F4   -> Data element
           ----------------               |
          |    |     |       |      |            └-> Domain Data Type
                                                                          length
                                                                          value range ┌ fixed value
                                                                                                └ value Table
                                                                                               
F1 /  name         /  Char60

    dataElement        domain
F2 / class / NUM 1
                  ------
                        1
                        2
                        3
                        4   value range

F3 / City / CHAR 50         ------------------------> |City       |
                                                                                   ├------┤
                                                                                   |Seoul   |
                                                     value table          ├------┤
                                                                                   |London|
                                                                                  
                                                                                  
fixed value 는 20 종류 정도 넣을 수 있게 되어있다.

-> 짧은 domain의 값을 지정

value Table

-> 많은 종류의 값을 지정할 때 사용...



initial value
 Key field 일 경우 num4 : 00004 같이 값이 들어갈 수 있도록 만들어 준다.
 
 
 
테크니컬 셋팅부분.

 
data class : master * 사번 이름 등의 한번 들어가면 변경되지 않는

size category :  이 테이블은 이정도의 크기를 가지고 만들겠다. & 사이즈가 더 오버되어 들어가도 들어가지 않는 것은 아니다.

buffering

1. 하지 않겠다.

2. 버퍼링은 하지만 스위칭은 하지 않겠다.

3. 둘다 하겠다. <- 이게 버퍼링을 할꺼다

3번을 선택한 뒤에는...

버퍼링 타입을 지정할 수 있다.

log는 자세하게 로그 관리를 할 것인지 말 것인지..

를 셋팅할 수 있다.





머 이거 지정하고 저장하고 뒤로 돌아가면 활성화가 되겠습니다.

브라보



 
 
        

 

ABAP 4일차.
+   [Language/ABAP]   |  2009. 9. 24. 15:39  



Data ElementField Type 이다. - 구체적인 type이 지정


Dictionary에서는 접근한 개체가

Transparent Table 일 경우에는  Field  로...

Structure 일 경우에는 Component 로 표시한다.


만약 T-Code 가 va01 인 화면에서...이 코드가 무엇을 하는 코드인지 알고 싶으면?

Transparent Table 의 경우 va01 T-Code로 접근 하였을때

Technical Infomation을 이용해서 화면에 사용되는 field 를 알려주게 된다.

field를 더블 클릭 하면 Dictionary로 이동하여 Table의 정보를 보여준다.



단건을 가져 오는 경우는 그냥 조회가 가능하지만... 여러건의 데이터를 가져오는 경우에는

ENDSELECT 를 넣어 주어야 한다.

SELECT 문은 반복문이다.~

DATA: wa1 TYPE spfli.

DATA: carrid TYPE spfli-carrid,
connid TYPE spfli-connid.

SELECT carrid connid
   FROM spfli
    INTO (carrid, connid).
   WRITE:/ carrid, connid.
ENDSELECT.

보통 * 를 사용 하겠지만 원하는 필드만 가져오고 싶을때 사용합니다.


DATA: BEGIN OF wa1,
           carrid TYPE spfli-carrid,
           connid TYPE spfli-connid,
          END OF wa1.

SELECT carrid connid
   FROM spfli
    INTO (wa1-carrid, wa1-connid).
WRITE:/ wa1-carrid, wa1-connid.
ENDSELECT.


만약 work area 일때


만약 *(전체)를 조회하면 ERROR가 난다.

*DATA: wa1 TYPE spfli.

DATA: BEGIN OF wa1,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
END OF wa1.


SELECT *
FROM spfli
INTO wa1.
WRITE:/ wa1-carrid, wa1-connid.
ENDSELECT.


wa1의 field와 조회된 spfli 의 field 순서가 같지 않기 때문에 그리고 mandt field 때문에 문제가 생긴다.

이럴 때는 CORRESPONDING 명령으로 해결 할 수 있다.

SELECT *
FROM spfli
INTO CORRESPONDING OF FIELD wa1.
WRITE:/ wa1-carrid, wa1-connid.
ENDSELECT.

하지만 속도가 느리니 데이터의 형태를 맞추어 주는 것을 권장한다.



T-Code : se30으로 접속하여 속도를 확인 해 보겠습니다.

SE30 접속


* CORRESPONDING을 사용 하는 경우

DATA: wa1 TYPE z08_s_kdn_1.
DATA: it1 TYPE TABLE OF z00_s_kdn_1.

SELECT *
   FROM sbook
    INTO CORRESPONDING FIELDS OF wa1.
WRITE:/ wa1-carrid, wa1-connid , wa1-fldate , wa1-bookid , wa1-customid.
ENDSELECT.


* CORRESPONDING을 사용하지 않는 경우

DATA: wa1 TYPE z08_s_kdn_1.
DATA: it1 TYPE TABLE OF z00_s_kdn_1.

SELECT carrid connid fldate bookid customid
   FROM sbook
     INTO TABLE it1.

LOOP AT it1 INTO wa1.
WRITE:/ wa1-carrid, wa1-connid , wa1-fldate , wa1-bookid , wa1-customid.
ENDLOOP.


SELECT 문장에 대해서...


Array Fatch(Into Table) - ENDSELECT 를 적어주지 않는다.

SELECT SINGLE - ENDSELECT 를 적어 주어야 한다.

SELECT ~ CORRESPONDING - ENDSELECT 를 적어주어야 한다.


질문: System 정보를 가지고 있는 것은 ?

Strutcture 이다.

se16으로 접속하여 tstc로 접속 하고 SE*로 검색해보면...

T-code : tstc

각 모듈의 T-CODE 는 어떤 글자로 시작 할까요?

co - c

fi - f

pp - p

mm - m

hr - p

sale - v

머 이런 식으로 들어 간다 하네요.

Client - mandt 가 들어가 있는 T-CODE 는?

T000 : client 에 대한 정보 Table

DD02L : 테이블 정보
TADIR : Repository 정보를 가지는 테이블

TRDIR : System Table 정보

SM04 User의 Session 을 죽일 수 있다.

SM50 : process over view








꼭 KEY가 아니라도 필요한 Field들은 Secondary Index를 줄 수 있다.




권한에 대해서...

프로그램을 하나 짜 보겠습니다.


PARAMETERS: pa_carr TYPE scarr-carrid.

AT SELECTION-SCREEN.
IF sy-uname NE 'ABAP-00'.
MESSAGE e000(z08_kdn) WITH '당신은 권한이 없습니다..'.
ENDIF.


START-OF-SELECTION.


PARAMETERS: pa_carr TYPE scarr-carrid.

AT SELECTION-SCREEN.

*만약 00~ 15까지 라면?
IF Not ( sy-uname between 'abap-00' and 'abap-15' ).
MESSAGE e000(z08_kdn) WITH '당신은 권한이 없습니다..'.
ENDIF.


START-OF-SELECTION.


Eq, GT, LT 등등등 정리하세요.


권한.

SE16 -> TSTC -> SU* -> SU21 더블클릭 -> BC_C -> S_CARRID

tact

SE38 -> pattern -> authority check -> carrid 입력


PARAMETERS: pa_carr TYPE scarr-carrid.

AT SELECTION-SCREEN.

AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD pa_carr
ID 'ACTVT' FIELD '03'.

IF sy-subrc NE 0.
MESSAGE e002(z00_kdn) WITH 'You do not have any auth.'.
ENDIF.

START-OF-SELECTION.

WRITE: / pa_carr.

-> 아무도 사용하지 않는다.

Auth에 대해 더 이야기를 해 보자면...

pfcg (전체를 다 주거나 아예 안주거나 . )

T-CODE 를 막는다.


OPEN-SQL - 책 한번 읽어보기...

join 을 사용 하는 실습.

DATA: it1 TYPE TABLE OF z08_s_kdn_1.
*inner join Example
SELECT spfli~carrid spfli~connid spfli~cityfrom spfli~cityto
scarr~carrname
FROM spfli INNER JOIN scarr
ON spfli~carrid = scarr~carrid
INTO CORRESPONDING FIELDS OF TABLE it1.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_structure_name = 'Z00_S_KDN_1'
TABLES
t_outtab = it1.

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.




join 을 할 수 없는 상황 (2개의 table에서의 데이터를 합치려고 할때....)

1 . from insert table 을 하면 잘못된 결과가 나온다. (LH만 여러건이 조회되는 현상)

-> FROM APPEND TABLE 로 적어 주어야 올바르게 동작

하지만 속도가 느린 문제가 있다.

2. for All Entries in 을 사용 하자.

속도가 빨라요...

SQL문 실습 하겠습니다. - 이쪽 부분은 책을 읽어 보라는 부분이 많네요

DATA: wa1 TYPE spfli,
wa2 TYPE sflight,
it1 TYPE TABLE OF spfli,
it2 TYPE TABLE OF sflight.

SELECT * FROM spfli INTO TABLE it1.

" MOVE, DELETE....


"틀린구문 INSERT
*LOOP AT it1 INTO wa1.
* SELECT * FROM sflight INSERT TABLE it2
* WHERE carrid = wa1-carrid
* AND connid = wa1-connid.
*ENDLOOP.

"옳은구문 APPEND
LOOP AT it1 INTO wa1.
SELECT * FROM sflight APPENDING TABLE it2
WHERE carrid = wa1-carrid
AND connid = wa1-connid.
ENDLOOP.




*이러면 느리대요

DATA: wa1 TYPE spfli,
wa2 TYPE sflight,
it1 TYPE TABLE OF spfli,
it2 TYPE TABLE OF sflight.

SELECT * FROM spfli INTO TABLE it1.

SELECT * FROM sflight INTO TABLE it2
FOR ALL ENTRIES IN it1
WHERE carrid = it1-carrid
AND connid = it1-connid.


CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_structure_name = 'SFLIGHT'
TABLES
t_outtab = it2.

*FOR ALL ENTRIES IN 을 사용하면 더 빠른 조회가 가능하다.

~~~~~ open SQL 쪽 설명은 지향해야 할 부분과 지양 해야할 부분들에 대해서 설명하고 있습니다. UNIT11. 부분






Unit12 - SELECTION-SCREEN

Para

goto -> Text element -> 표기되는 이름 변경

변수명은 8자리로 제한.

Radio 는 그룹으로 묶여 있어야 한다.


PARAMETERS : pa_carr TYPE scarr-carrid DEFAULT 'AA',
pa_chk1 AS CHECKBOX DEFAULT 'X',
pa_rd1 RADIOBUTTON GROUP lim,
pa_rd2 RADIOBUTTON GROUP lim.
PARAMETERS : pa_rd3 RADIOBUTTON GROUP lim2,
pa_rd4 RADIOBUTTON GROUP lim2.


라디오 버튼은 Group으로 묶여야 사용 할 수 있다.

현재는 2개의 Radio Group이 존재...



select-option

header line을 가진 Internal Table 이 생성됨

SIGN | OPTION | LOW | HIGH
모자| | | |
-------------------------------------
| | | |
body| | | |
| | | |


select option for sign option low high in


tables 로 선언해야하는 3가지 이유중 1개

*select-option 에 Object 형으로 지정하기 위해서....

1. SELECT-OPTIONS xxx FOR ( ) 다음의 DATA OBJECT 가 <str>-field로 사용된다면...

위에 TABLES 로 선언해야만 한다.

2. SELECT * FROM spfli into spfli 처럼 into clause에 strutcure type이 바로 올 경우

위에 TABLES 로 선언해야만 한다.

3. Screen design 시에 Dictionary Program Field 처리로 Structure Type 을 사용할 경우

ABAP Program 의 선언부에 Tables 로 처리해야만 한다.



EVENT 에 관련된 이야기

EVENT 는 SE80 에서 확인 할 수 있다.

1. Initalization -> 2. at SELECTION-SCREEN OUTPUT -> 3. Selection-screen -> 4. at start selection -> 5. start of selection

* 문제 없을때 1 2 3 4 5

* 문제 있을때 1 2 3 4 3 4 3 4 3 4





푸시버튼 쓰는법

1. TABLES: SSCRFIELDS. 넣어주고

2. SELECTION-SCREEN PUSHBUTTON /~~~~~~

3. INITIALIZATION 에 DET_ON = 'SHOW DETAILS'(S01) 과 같이 입력해주기.

4. AT SELECTION-SCREEN. 에 버튼을 눌렀을 때 일어날 이벤트에 해당하는 코드를 입력해준다.


CASE sscrfields-ucomm.
WHEN 'ON'.
SUBMIT z12_kdn_20090924_1 VIA SELECTION-SCREEN.
ENDCASE.



예제 입니다.

TABLES: sscrfields.
DATA: it1 TYPE TABLE OF spfli.
SELECTION-SCREEN BEGIN OF BLOCK frm1 WITH FRAME TITLE text-001.
PARAMETERS: pa_carr TYPE scarr-carrid DEFAULT 'AA'.
SELECT-OPTIONS: so_carr FOR pa_carr.
SELECTION-SCREEN PUSHBUTTON /pos_low(12) det_on USER-COMMAND on.
SELECTION-SCREEN PUSHBUTTON /pos_low(10) gg_on USER-COMMAND meme.
SELECTION-SCREEN END OF BLOCK frm1.

INITIALIZATION.
pa_carr = 'LH'.
det_on = 'show details'(s01).
gg_on = 'HAHAHAHAHA'.

AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'ON'.
SUBMIT z12_kdn_20090924_1 VIA SELECTION-SCREEN.
WHEN 'MEME'.
MESSAGE i000(z08_kdn) WITH 'HAHAHAHAHAHAHAHAAHAHA'.

ENDCASE.


START-OF-SELECTION.

SELECT * FROM spfli INTO TABLE it1 WHERE carrid IN so_carr.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_structure_name = 'SPFLI'
TABLES
t_outtab = it1.



프로그램을 부르는 방법.

프로그램으로 보내는 방법과

보낸 뒤에 다시 돌아오게 하는 방법 2가지가 있다.


submit z08_kdn_20090924_4 VIA SELECTION-SCREEN.

call TRANSFORMATION 'VA01'.


internal Session 끼리는 Memory를 공유하지 않는다.

프로그램이 프로그램을 콜하면 internal Session 이 2개 생긴다.


T-CODE로 프로그램을 부르되 돌아오지 못 한다.

leave to transaction 'VA01'.



다른 프로그램을 호출 하면서 DATA를 전달하는 방법.


INTERFACE 를 사용하는 방법

submit z03_kdn_20090924_3
with so_carr between 'AA' AND 'LH' AND RETURN.
* via selection-screen.





Z00_kdn_20090924_06.

2. Z00_kdn_20090924_07. (Itab은 선언 되어있지만 채워지는 부분이 만들어져 있지 않다.)

DATA: itab TYPE TABLE OF spfli.

SUBMIT z00_kdn_called AND RETURN.

IMPORT
alias TO itab
FROM MEMORY ID 'KDN'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_structure_name = 'SPFLI'
TABLES
t_outtab = itab.

3. z00_kdn_called. (데이터를 조회하여 KDN이라는 메모리 아이디에 저장하여 EXPORT한다.)

DATA: it1 TYPE TABLE OF spfli.

PARAMETERS: pa_carr TYPE scarr-carrid DEFAULT 'AA'.
SELECT-OPTIONS: so_carr FOR pa_carr.

SELECT * FROM spfli INTO TABLE it1 WHERE carrid IN so_carr.

EXPORT
alias FROM it1
TO MEMORY ID 'KDN'.

* MEMORY ID 는 지정하기 나름이다 아무거나 만들수 있다.


2번 프로그램에서 3번 프로그램을 호출하여 ABAP MEMORY를 이용하여 INTERNAL TABLE 에 저장되어야 할 값을

넘겨받게 된다.

이번 예제는 한 INTERNAL Session 안에서 2개의 프로그램이 열린거다.


SAP 메모리 이용하기. (EXTERNAL SESSION 끼리는 어떤식으로 DATA를 공유하게 되는가?)

Z00_KDN_SM1



Z00_KDN_SM2

김셈설명

Z00_KDN_SM1
에 set parameter id 와

get parameter id 가 존재한다면.

Z00_KDN_SM1프로그램에 한 Session 에서 넣은 값이 ..

다른 Session 에서 사용하는 Z00_KDN_SM1 프로그램에 영향을 미치게 된다.

PARAMETERS: pa_carr TYPE spfli-carrid.

INITIALIZATION.
GET PARAMETER ID 'CAR' FIELD pa_carr.

AT SELECTION-SCREEN.
SET PARAMETER ID 'CAR' FIELD pa_carr.




 
 
        

 

ABAP 3일차
+   [Language/ABAP]   |  2009. 9. 23. 14:28  


(오전 시간)

Function Modual





Program 입장에서는 ID와 NAME 을 TEST_FUNCTION 으로 EXPORTING 하는 것이고...

Function 입장에서는 Program에서 전달해준 ID와 NAME 라는 데이터를 IM_ID와 IM_NAME이라는 이름으로

IMPORTING 하게 된다.


* import Parameters , Export Parameters : 대입 연산자가 아니라는군요.

저번시간: SESSION 에는 두가지가 있는데 머머가 있지요?

Internal Session(프로그램이 프로그램을 여는 경우)

External Session(하나입니다.)

그림 넣을 자리.



Backup 하는 방법(잠깐 알려 주셨네요...)

SE38  display or change Mode  menuutility more utilities upload & download

Executable Program 은 UPLOAD  와 DOWNLOAD가 모두 가능하다.

MODULE POOL은 DOWNLOAD 만 가능하다. (UPLOAD방법이 있지만 좀 복잡하다.)



Function을 관리하는 T-CODE는 ? (Function의 형태를 확인하는 방법을 익힌다.)

1. SE37 로 접속합니다.

2. POPUP_TO_CONFIRM_LOSS_OF_DATA 입력.

FUNCTION을 모아놓은 곳은 어디일까요? - FUNCTION GROUP

3. ATTRIBUTES 텝으로 들어가면 FUNCTION GROUP인 SP01을 확인 할 수 있다.

4. MAIN PROGRAM 버튼을 누른다.


DEBUG

 

버튼을 눌러준다.

IMPORT에서 OPTIONAL 에 기본 DEFAULT 값이 찍혀 있는 것을 볼 수 있다.

PASS VALUE CHECK일 경우 값을 변경할 수 있다.

이에 해당하는 값을 입력창에 넣어준 후 DEBUG버튼을 누른다.

POPUP이 뜨는걸 확인 할 수 있다.

" 이 POPUP은 데이터가 삭제될 수도 있을 경우에 실제 실행을 하겠느냐는 것을

FUNCTION으로 제공합니다.

Y , N 버튼을 눌러볼 수 있는데 ...

Y 를 누르면 EXPORT PARAMETERS 인 ANSWER에 J가 돌아오고

N 을 누르면 N 이 돌아오게 된다.

- SAP는 너무도 많은 FUNCTION이 만들어져 있으므로 잘 찾아서 사용해야 한다.


더블클릭의 효과:

FORWARD NAVIGATION.  이라고 불리는데 ... (없으면 만들고 있으면 이동.)


Function group - Function Module이 모여있는 집합체

INCLUDE 프로그램 :  프로그램이지만 자체적으로 실행을 할 수는 없다.

메인 프로그램에 붙어서만 사용 할 수 있다.

공통되는 프로그램을 모아놓는 영역 SUBROUTINE ( LOCAL 영역)


명명 규칙상 끝의 3자리가 TOP으로 끝나거나 UXX로 끝나는 INCLUDE Program의 의미

INClUDE LSPO1TOP. "명명 규칙 중 마지막 3자리가 TOP로 끝남.

GLOBAL한 영역은 INCLUDE LSPO1TOP. " Global Data 과 같이 TOP으로 지정했더라.

INCLUDE LSPO1UXX .  "3자리가 'UXX'로 끝남.

FUNCTION Module 들을 모아서 INCLUDE 하여 관리한다.



Function Module 설명


SE37에서나오는 Function Builder 에 대해서 확인해보도록 하자.

POPUP_TO_CONFIRM_LOSS_OF_DATA를 기준으로 각 TAB을 이해하자면

Attribute TAB : SP01이라는 Function module 에 속한다는 것을 알 수 있다.



Import TAB :  6개의 Parameter를 사용 한다는 것을 알 수 있다.


Export TAB : Function Module이 실행 후  ANSER이라는 1개의 결과를 내보내게 될 것이다.



CHANGING TAB : Reference 를 받아서 처리하야할 Parameter가 없다.























Tables TAB : InternalTable을 사용하지 않는다.




















EXCEPTIONS 없슴
- 그림 없음.



SE38 에서는 APPLICATION TOOL BAR 에서 PATTERN버튼을 눌러서 Function명을

POPUP_TO_CONFIRM_LOSS_OF_DATA
로 입력 한 후 Enter를 치게 되면 Editor창에 다음 코드를 자동으로

만들어 준다.

CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA'
       EXPORTING
            textline1 =
* TEXTLINE2 = ' '
            titel =
* START_COLUMN = 25
* START_ROW = 6
* DEFAULTOPTION = 'N'
* IMPORTING
* ANSWER =
.

이 Templete 를 이용하여 알맞게 정의하게 되면 다음과 같은 코드가 만들어 진다.

DATA: re_answer. "결과를 받아야 하기 때문에 변수를 선언하고

CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA'
   EXPORTING
       textline1       = 'All entries will be lost'
       textline2       = 'Do you want to cancel'
       titel              = 'Cancel'
       start_column = 25
       start_row      = 6
       defaultoption = 'N'
   IMPORTING
       answer        = re_answer.

CASE re_answer.
   WHEN 'J'.
        WRITE:/ 'Cancel...'.
   WHEN OTHERS.
       WRITE:/ 'No...'.
ENDCASE.


Debug모드시에...





OPEN SQL 과 WORK AREA ,INTERNAL TABLE의 사용.


STRUCTURE 라는 것은 TEMPARY하게 사용 되게 된다.

WORK AREA는 하나의 구조화된 데이터만 가지므로 다중의 구조화된 데이터를 가져 올 때에는

INTERNAL TABLE 을 사용하게 된다.

다음은 WORK AREAINTERNAL TABLE을 이용해서 데이터를 담는 예제이다.

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

SELECT SINGLE *
     INTO wa1
   FROM scarr
  WHERE carrid = 'AA'.
APPEND wa1 TO it1.

SELECT SINGLE *
     INTO wa1
   FROM scarr
  WHERE carrid = 'LH'.
APPEND wa1 TO it1.

SELECT SINGLE *
     INTO wa1
   FROM scarr
  WHERE carrid = 'UA'.
APPEND wa1 TO it1.

LOOP AT it1 INTO wa1.
    WRITE: / wa1-carrid,wa1-carrname.
    CLEAR: wa1.
ENDLOOP.

WRITE: / wa1-carrid, wa1-carrname.

~ Work Area와 Internal Table 을 따로 작성하여 프로그래밍 하는 것을 '명시적' 이라고 한다.


장점

1. CLASS를 사용할 때 변경 없이 적용할 수 있다.

2. 속도가 빠르다.

3. 웹딘 PRO를 사용하려면 이 방법을 사용해야 한다.


명시적인 이 방법을 권장사항 이라고 한다.

질문 : ':'가 들어간것도 있고 안 들어간것도 있는데 이는 어떤 차이인가요?

답변
':' 는 CHAND STATEMENT 라고 하여 여러번의 선언을 한 번에 할 수 있도록 해주는 효과가 있다.

':' 를 구문에 넣는 행동은 좋은 버릇이다. -> 나중에 변경에 용이하다.



* WORK AREA는 활용을 다 하고 난 후에는 꼭 CLEAR하자.

DEBUG MODE - 첫 번째 프로그램

1. ABAP EDITOR 에서 버니어켈리퍼스 버튼을 눌러서 실행한다.

2. 1번 프로그램에서는 WORK AREA와 INTERNAL TABLE이 불리되어있는 것을 확인 할 수 있다..

3. INTERNAL TABLE 인 IT1을 더블클릭 해보면 모자가 없다는 것이 확인된다.

4. WA1에 값이 들어간 후 INTERNAL TABLE IT1에 값이 들어가는 것을 볼 수 있다.

고로 WA1 을 임시기억 장소로 사용하고 INTERNAL TABLE에 값을 관리함을 알 수 있다.







두번째 예제 : INTERNAL TABLE 의 HEADER LINE을 이용함

DATA: itab TYPE TABLE OF scarr WITH HEADER LINE.

SELECT SINGLE *
     INTO itab
   FROM scarr
WHERE carrid = 'AA'.
APPEND itab.

SELECT SINGLE *
     INTO itab
  FROM scarr
WHERE carrid = 'LH'.
APPEND itab.

SELECT SINGLE *
    INTO itab
  FROM scarr
WHERE carrid = 'UA'.
APPEND itab.

LOOP AT itab.
   WRITE: / itab-carrid,itab-carrname.
   CLEAR: itab.
ENDLOOP.


WORK AREAINTANAL TABLE명이 같다.

INTERNAL TABLEHEADER LINE을 선언 한 것이다.

바꾸어 말하면 INTERNAL TABLE 에는 2종류가 있으며

하나는 HEADER있는 INTERNAL TABLE

또 하나는 HEADER없는 INTERNAL TABLE 이다

이로 인해 선언문에서의 작성이 간결해 질 수 있다.



DEBUG MODE - 두 번째 프로그램

TAB중에 FIELD 옆에 TABLE TAB 을 선택하면 현재 DEBUG를 선택한 INTERNAL TABLE에

모자 모양이 있는 것을 확인 할 수 있다.

이 모자모양의 HEADER를 이용하여 임시 저장을 해놓고 인터널 테이블로 값을 옮기는 것을

확인 할 수 있다.





장점 : 간결한 구문과 손쉬운 사용을 들수 있겠다.



사용자가 만든 FUNCTION을 호출하는 예제 프로그램

1. FUNCTION Group 만들기 .
2. FUNCTION Module 만들기
3. FUNCTION을 호출하는 PROGRAM 만들기


Function Group 만들기


1. SE80 으로 접속한다.

2. SELECT BOX의 Function Group을 선택한다.

3. 아래에 생성하고 싶은 Function Group명을 입력한다. 'Z08_KDN_2 '


4. Enter 를 치면 Create Object POPUP창이 열린다.


5. Create Function Group 창에서 Short text를 입력하고 Save버튼을 누른다.


6. Create Object Directory Entry 라는 창이 나오는데 Package를 입력하라고 한다.
여기서는 Local Object를 선택 합니다.


7. Z08_KDN_2이 만들어 진 것을 볼 수 있습니다.




Function Module 만들기


1. SE37로 접속한다.

2. Function Module명을 Z08FM_KDN_2으로 만들어 보겠습니다. 입력!



3. Create Function Module 창이 나옵니다. Function group 과 short text를 입력 하라고 합니다.

Function group에는 바로 전에 만들었던 Z08_KDN_2 를 입력하고 Short text에는 보기 좋은 이름을 입력하고

하단의 Save버튼을 눌러 줍니다.



4. Function module name이 만들어 졌다는 메시지가 나옵니다.

Function Builder 로 이동이 되어있습니다.




5. Import에는 'Z08FM_KDN_3' Function Module에서 받아서 사용하게 되는 Parameter를 선언합니다.

다음과 같이 입력합니다.

( Parameter Name : IM_CARRID , Type : TYPE , Associated Type : SPFLI-CARRID)




6. INTERNAL TABLE에 결과를 돌려 받을 것이라 Tables Tab에서 지정 하게 됩니다.

( Parameter Name : ITAB1 , Type : TYPE , Associated Type : SPFLI-CARRID)




7. Source code 를 입력해 줍니다.

FUNCTION z08fm_kdn_1.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IM_CARRID)
*" TABLES
*" ITAB1 STRUCTURE SPFLI OPTIONAL
*" ITAB2 TYPE Z08_T_KDN_SPFLI OPTIONAL
*"----------------------------------------------------------------------

   SELECT *
     FROM spfli
       INTO TABLE itab1
    WHERE carrid = im_carrid.

    itab2[] = itab1[]. "BODY DATA를 넘기는 ...

ENDFUNCTION.



Program 에서 만들어 놓은 function 호출하기.

방법 1.

1. SE38 에서 수정 모드로 Z08KDN_20090923_1를 열어 놓는다.

2. pattern버튼을 누르고 'Z08FM_KDN_2' 를 입력하여 준다.

3. Editor에 Call Function Code가 나오면 다음과 같이 작성하여 줍니다.

DATA: itab TYPE TABLE OF spfli WITH HEADER LINE.
PARAMETERS: pa_carr TYPE spfli-carrid. "user가 1000화면으로 부터 입력을 받게 하겠다.

CALL FUNCTION 'Z08FM_KDN_2'
    EXPORTING
        im_carrid = pa_carr
    TABLES
        itab1 = itab.
* itab2 =

방법 2.

1. SE80 에서 Z08KDN_20090923_1(작업을 원하는 프로그램) 를 수정 모드로 열어 놓는다.

2. 왼쪽 창에 Function group 을 선택하고 Z08_KDN_2 그룹을 선택한다.

3. 왼쪽 밑의 창에 Z08FM_KDN_2를 끌어다가 Editor 에 옮겨 놓으면 pattern 버튼과 똑같은 효과가 나온다.


Standard를 이용하여 SAP ABAP LIST View 사용해 보기

ex> REUSE_ALV_LIST_DISPLAY, REUSE_ALV_GRID_DISPLAY

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
        i_structure_name = 'SPFLI'
    TABLES
        t_outtab = itab.


Program 을 작성하여 확인해 본다.

DATA: itab TYPE TABLE OF spfli WITH HEADER LINE.
PARAMETERS: pa_carr TYPE spfli-carrid. "user가 1000화면으로 부터 입력을 받게 하겠다.

CALL FUNCTION 'Z08FM_KDN_1'
    EXPORTING
        im_carrid = pa_carr
    TABLES
        itab1 = itab.
* itab2 =

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
        i_structure_name = 'SPFLI'
    TABLES
        t_outtab = itab.

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.




ABAP Dictionary :

TRANSPARENT(투명하다.?) . TABLE

DATABASE 영역과 DICTIONARY 영역과 데이터가 일치한다.

DATABASE에 릴레이션이 없다.

APPLICATION 에 릴레이션이 걸려 있으며 (CTRL+ SHIFT + F11) 버튼을 눌러 릴레이션을 확인 할 수 있다.

STRUTCTURE 와 TRANSP. TABLE 의 차이

STRUTCTURE 에는 MANDT 컬럼이 없다는 것을 알 수 있다.







Strutcture 만들기.

se11창을 2개 띄웁니다.

z08_s_kdn_1 이라는 Structure에 복사해 보도록 한다.

복사하는 방법 설명:

각 테이블 들에서 필요한 Feild를 ctrl + 마우스 오른쪽 버튼으로 선택 후 복사



sbook : CARRID, CONNID, FLDATE , BOOKID

sflight : CARRID, CONNID, FLDATE / SEATSMAX , SEATSOCC

spfli : CARRID, CONNID / CTIYFROM,CITYTO

scarr : CARRID, CARRNAME


완료가 되었으면 활성화 버튼을 눌러준다.


Copying Structure Copy

* Strutcture 끼리 값을 복사 한다.

DATA: wa1 TYPE spfli,
          wa2 TYPE z08_s_kdn_1.

SELECT SINGLE *
  FROM spfli
    INTO wa1.

MOVE-CORRESPONDING wa1 TO wa2.

WRITE: / wa2-carrid, wa2-connid, wa2-cityfrom, wa2-cityto.


CORRESPONDING ㅋㅋㅋ 보충 하기...

TABLE TYPE != TABLE


Internal Table 은 다음과 같고

LINE TYPE = STRUTCTURE TYPE = ROW TYPE

DB TABLE 처럼 키도 줄 수 있다.



김샘 말씀.

INTERNAL TABLE 에서의 Index(인덱스)는...

몇번째 라인이냐? 하는 것을 의미한다.

Internal Table 에 3가지 종류

Standard , Sorted , Hashed

(메모리의 영역이다.)

DB Table 의 3가지 종류

Transparent Table , Pool(ed) Table , Cluster Table

(물리 적인 영역이다.)




INTERNAL TABLE 에 TYPE과 특성


Attributes and Use of the Table Types

이제부터 나오는 내용은 굉장히 중요하다고 합니다.


 Index Table Hashed Table
 T(standard) S(sorted) H(Hashed)
 주로 Index사용 주로 Key사용 Key만 사용
 중복만 허락 중복O | 중복X 중복X
  DB로 부터 DATA를 가져올 때 자동 SORT를 함.(KEY별로)

그런데 만약 EDITOR 상에서 SORT라는 KEYWORD를 쓰면 Syntax Error를 일으킵니다. 자체가 sort가 되기 때문에 강제로 SORT를 할수 없다.

Key와 상관관계가 아주 높습니다. Index 는 아님

질문: T(Standard Table) 에서 중복을 허용 하는 것이 안전 할까요... 허용하지 않는 것이 안전 할까요?

Data 무결성을 생각하고 중복이 허용되지 않는다고 말하였다면 ...

현재 이야기 하고 있는 것은 INTERNAL TABLE 이기 때문에 MEMORY에서 사용하는 것이기 때문에 데이터의 무결성을 확인 할 필요는 없다 용도에 맞게 화면에 뿌려주고 ... 등등등.. 이 가능하다.


그림 1-4


* 툴을 이용하여 Table의 Type과 Key설정들을 변경할 수 있다.



Initialization and Access TAB을 이용하여 Access Type을 변경 할 수 있다.

Key TAB을 이용하면 unique, non-unique 등등의 설정을 할 수 있다.

질문: global type 3가지 무엇이 있죠?

data element, strutcture type, table type

* 아마도 자주 질문을 던지는건 중요한 듯 싶어서 그냥 적어봄.





* 코딩을 이용하여 standard , sorted , hashed 테이블을 만드는 방법



DATA: it1 TYPE TABLE OF spfli.

DATA: it2 TYPE STANDARD TABLE OF spfli
              WITH NON-UNIQUE KEY carrid connid.

DATA: it3 TYPE SORTED TABLE OF spfli
              WITH UNIQUE KEY carrid connid.

DATA: it4 TYPE SORTED TABLE OF spfli
              WITH NON-UNIQUE KEY carrid connid.

DATA: it5 TYPE HASHED TABLE OF spfli
              WITH UNIQUE KEY carrid connid.

BREAK-POINT.


질문 : 원칙상 Hashed Table은 sorting을 해야 할까요 하지 말아야 할까요?

-> 해야한다.(성능상 영향이 있다고 함.)



* Index를 기준으로 조회하는 방식.

READ TABLE it1 INTO wa1 INDEX 5.

결과: index기준으로 it1의 데이터를 1~5까지 담는다.


* Key를 기준으로 조회하는 방식.


READ TABLE it1 INTO wa1
   WITH TABLE KEY
       mandt = sy-mandt
       carrid  = 'LH'
       connid = '0400'.


READ TABLE it1 INTO wa1
   WITH KEY
       carrid   = 'LH'
       connid  = '0400'.


table key로 작성하면 Dictionary상의 해당 TABLE에 정의되어있는 key를 정확히 기입 하여야 한다.

정의되어있는 키 형식과는 다른 방식으로 사용 하고 싶을 때는 WITH TABLE KEY -> WITH KEY로 변경하면 된다.




Data Browser 설정하기


현재 보여지는 sorting 은 프로그램이 해준 것입니다.

menu -> setting -> format_list-> choose field 선택

menu -> setting -> user parameter ->

Output list 에서는 ALV Grid , ALV 를 선택 할 수 있다.

Keyword 에서는 db Field Name 대신에 field Label을 선택하여 의미있는 정보를 파악할 수 있다.



시험문제: Hashed Table은 Sorted Table 처럼 이미 Sorting이 되어있기 때문에 Sorting할 필요가 없다!

-> false


 Sorting 관련하여 생략하면 Default로  ASCENDING 이 적용된다..


초기화 명령


REFLESHFREE 명령은  INTERNAL TABLE 을 초기화 시켜주는 기능이 있다.

CLEAR: ITAB. HEADER 만 초기화 됨
CLEAR: ITAB[]. BODY가 초기화 됨
REFRESH: ITAB. BODY가 초기화 됨
FREE ITAB. MEMORY 에 있는 것들을 초기화함

Tip.!    HASHED TABLE 은 INSERT가 APPEND 역할을 합니다.






 
 
        
<<이전 | 1 | ··· | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ··· | 41 | 다음>>

별책부록's Blog is powered by Daum