분류 전.. (119)
공지사항 (3)
주저리.. (25)
Ubuntu (2)
개발관련 (36)
개발이야기 (6)
Language (20)
Framework (5)
Pattern (2)
DataBase (4)
Server (4)
Book (9)
스터디 (0)
Eclipse  STRUTS2  oracle  mylyn  HFSD  db connection  다짐  Head First Software Development  자바  unmarshalling 
«   2009/09   »
    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 : 21,227
+ Today : 0
+ Yesterday : 16
  

 

 

 

2009/09 _해당되는 글 11건
2009/09/29   ABAP 7일차 
2009/09/28   ABAP 6일차 
2009/09/24   ABAP 4일차. 
2009/09/23   ABAP 3일차 
2009/09/22   Abap 2일차 
2009/09/04   Project의 구조 정하기 
2009/09/03   게시판 만들기! 처음에는 이런식으로 계획을 해 보겠습니다. (1)
2009/09/02   Struts2 의 환경정보 설정하기. (1)
2009/09/01   Mylyn을 이용하여 Todo list를 관리하기 
2009/09/01   오늘하루... 

 

ABAP 7일차
+   [Language/ABAP]   |  2009/09/29 16:28  
SAP KEY field 랑 index의 관계...

buffering 의 3가지 방법

1. full buffering 방법.                   - 테이블의 모든 레코드를 버퍼에 담는다.
2. generic buffering 방법              - 테이블의 키에 맞는 레코드만 버퍼에 담는다.
3. single-Record buffering 방법    - 테이블의 유니크한 1개 레코드만 버퍼에 담는다.



TEXT Table

code                          text

mandt | code            mandt | code| language | text
-------------         -----------------------------
300         1       --->   300     |    1     | EN          | EN1
300         2       --->   300     |    1     | DE          | DE1
300         3       --->   300     |    1     | KO          | KO1



* append structure 주의사항 3가지

1. Pooled / Cluster table 에는 효과 줄수 없음.

2. 긴필드 (L CHR / L RAW ) 는 table 맨 마지막에 두어야 함.
                   └-> Data Type...)
   그래서 LCHR/LRAW 필드 뒤에 APPEND Structure 할 수 없음.

3. YY/ZZ 로 시작해서 Field append 함.
(Standard field 와 충돌 방지위해)

append structure는
(ZA*------------) 생성함





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

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

ABAP 6일차
+   [Language/ABAP]   |  2009/09/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는 자세하게 로그 관리를 할 것인지 말 것인지..

를 셋팅할 수 있다.





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

브라보



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

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

ABAP 4일차.
+   [Language/ABAP]   |  2009/09/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.




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

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

ABAP 3일차
+   [Language/ABAP]   |  2009/09/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 역할을 합니다.






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

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

Abap 2일차
+   [Language/ABAP]   |  2009/09/22 14:58  

2009년 9월 22일(오전 시간)




*&---------------------------------------------------------------------*
*& Report Z08KDN_20090922_1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z08kdn_20090922_1.

WRITE: /,/'hahahahahahahahahahahahahahaha.',
/'hahahahahahahahahahahahahahaha.',
/'hahahahahahahahahahahahahahaha.',
/'hahahahahahahahahahahahahahaha.'.

*NEW-LINE.
SKIP 8.
WRITE 'This is second word...'.



여기서 WRITE 명령 안의 '/'은 줄을 새로운 줄을 표시하며

NEW-LINE의 명령과 동일한 효과를 낸다.

SKIP 명령어를 이용해서 여러 줄의 공백을 표시할 수 있다.

 단축키  설명
 shift + F1  pretty Printer
 ctrl + F2  check 검증
 ctrl + F3  active 활성화

Transaction Code 만들기

A. 방법

1. /nSE80 으로 접근

2. selectbox를 'program'으로 변경 입력 창에 'Z08_KDN_20090922_1'를 입력

3. 하단의 object Name 에서 마우스 오른쪽 버튼을 누르고 Create -> Transaction

4. 원하는 Transaction code,short text, (report transaction 선택) 를 입력 한다.

5. program 명을 입력하고 Standard Tool Bar의 저장 버튼을 누른다.

6. 이제 Command Field 에 Transaction code를 입력하여 Page에 접근할 수 있다.

B. 방법
1. /nSE93 으로 접근

2. 원하는 Transaction Code , Short text, (Program명을 입력)

3. 이제 Command Field 에 Transaction code를 입력하여 Page에 접근할 수 있다.



ABAP 의 Data Type은?

D - date

T - time

i - integer, length

F - Floating ,length 

C - Character

N - Numerical Character

P - Packed Number



Report.    언부 (Data) Data: xxx Type Global ~ (1.Data Element 2. Structure Type 3. Table Type)

               출부 (Select)

               공부 (More)

               력부 (Write)


선언부에서 Data를 선언하는 부분에는...

Data: xxx Type D.E (Data Element = Field Type ->[10%] Component Type).

Data   - 한 개만 선언
Data:  - 여러개를 선언

변수명, Data Object 명

타입 타입에는 Data Element(File Type) 이나 Component Type , Structure Type , Table Type이 적용 되어진다.


Type에는 데이터를 넣을 수가 없다. (Type은 틀일 뿐..이라고 합니다..)

Type              : 그릇 만드는 기계
Data Object   : 그릇

 
T-CODE

SE11 - ABAP DICTIONARY

SE16 - 데이터 브라우저

SE93 - TRANSACTION CODE 만들기

SE84 - DISPLAY DATA ELEMENT. - (데이터 엘리먼트의 타입과 길이 등을 가지고 검색할수 있다.)

SE80 - 오브젝트 네비게이터

SE38 - ABAP 편집기

SE37 - FUNCTION 작성기



T-CODE SE11를 이용하여 데이터의 형태를 본다 , application tool barcontents 버튼을 이용해서

executable program
을 실행시키면 내용도 확인 할 수 있다.

data browser를 이용하여 볼때 - 파란색이 키필드이다. 노란색은 일반 필드.

실제 예제를 작성해 볼텐데 이를 위하여 TABLE의 정보를 살펴 보기로 합니다.

T-CODE : SE11을 이용하여 SCARR, SPFLI, SFLIGHT, SBOOK 의 4개의 테이블을 조회하여

KEY FIELD 및 사용할 FIELD명을 알아 놓도록 합니다.

Tables - 우리가 실습시 사용해볼 테이블에서 필요한 Field명을 뽑아보았다.

scarr   : CARRID, CARRNAME

spfli    : CARRID, CONNID / CTIYFROM,CITYTO

sflight : CARRID, CONNID, FLDATE / SEATSMAX , SEATSOCC

sbook : CARRID, CONNID, FLDATE , BOOKID


설명잠깐 :

많이 강조 하셨던 부분이다. TABLE의 선언 만으로는 DATA를 가져 올 수 없는 거라고....

선언부의 Table-element는 Data는 없고 Type만 정의 한다하여 Structure 라고 이야기 한다.

기본 정의 형태의 Type보다는 Structure 의 Type을 가져다 사용 하는 이유는 ERP이기 때문이라고 한다.

기준이 되는 Type을 여러 연관되는 여러 곳에서 사용하고 이와 관련된 정보가 변경되면 모두 변경이 되는게

옳다는 설명이었다.

설명잠깐2:

데이터 베이스에서 키값이나 사용할 field 에 대한 정보는 꼭 숙지해 놓아야 프로그램을 작성할 때

좀 더 쉽게 ABAP CODE에 접근이 가능하다.

P.S

일반 적인 Type의 사용은 10%정도로 나머지 90%는 실제 사용중인 Structure Type을 사용하여 작업하게 된다.

더해서 Standard Table에는 변화가 거의 일어나지 않는다고 함.

결국 테이블을 얼마나 잘 알고 있느냐가 중요한 것이다.



Data xxx Type (Structure Type = Work Area)
         │
         └->Data Object

* Table 명이 나와도 Structure Type이 된다. ~~~(Type 다음에는..)


 (오후 시간)

TYPE VS LIKE

DATA : wa1 TYPE spfli.
DATA : wa2 TYPE wa1.

* 이렇게 선언을 하게 되면 ERROR 가 나게 된다.
* 이유는 wa1 이 Data Element , Table Type , Structure Type 이 아닌  Data Object 이기 때문이다.


DATA : wa1 TYPE spfli.
DATA : wa2 LIKE wa1.

* Data Object를 이용하기 위해서는 LIKE , (STRUCTURE, TYPE ...)등을 이용하기 위해서는 TYPE를 이용한다.

Work Area의 선언

1. TABLES  : spfli.
2. DATA      : spfli TYPE spfli.

위의 2개 명령은 같은 명령어 이다.
이렇게 선언을 해주면 spfli는 Work Area가 된다.

DATA: BEGIN OF wa1_spfli ,
carrid     TYPE spfli-carrid ,
connid    TYPE spfli-connid ,
cityfrom  TYPE spfli-cityfrom ,
cityto      TYPE spfli-cityto ,
END OF wa1. "wa1이라는 WORK AREA를 선언한다.


wa1-carrid     = 'AA'.
wa1-connid    = '0017'.
wa1-cityfrom  = 'seoul'.
wa1-cityto      = 'busan'.
* wa1에 값을 정의한다.

WRITE : wa1-carrid ,
              wa1-connid ,
              wa1-cityfrom ,
              wa1-cityto .
* wa1에 값을 출력한다..

위는 begin of 를 이용하여 Work Area를 선언하는 방법입니다.

Internal Table 의 선언

1. DATA : it1 TYPE TABLE OF spfli.
2. DATA : it2 LIKE TABLE OF wa1.
3. DATA : it3 LIKE it1.

으로 선언 되어질수 있다.


TABLES : sflight.

WRITE:   sflight-carrid ,
               sflight-connid ,
               sflight-fldate ,
               sflight-seatsmax ,
               sflight-seatsocc.


1. TYPES kim1 TYPE c.
2. DATA kim2   TYPE c.
3. DATA kim3   LIKE kim1.
4. DATA kim3   TYPE kim1.

이중 Error 가 나는 부분을 확인해보기.

: 3번은 kim1 은 TYPE으로 선언이 되어 있지만 LIKE로 kim3에 적용 하려 하고 있는 것을 볼 수 있다.

LIKE는 Data Object일 경우에 사용 할 수 있다.


STRUTCTURE 선언 - (TABLE TYPE)
1. SE11 로 접근.

2. DATA TYPE 의 RADIO 버튼 선택 후 "Z08_T_KDN_SPFLI" 입력

3. CREATE 버튼을 눌러준다.

4. TABLE TYPE 의 RADIO 버튼을 선택한다.

5. SHORT TEXT 를 넣어준다.

6. LINE TYPE 에 SPFLI 를 입력해 준다.

7. APPLICATION TOOL BAR에 활성화 버튼을 눌러준다.

8. STANDARD TOOL BAR 의 저장 버튼을 눌러준다.



이제 Z08_T_KDN_SPFLI 라는 TABLE TYPE이 생겼으므로...

DATA: it2 TYPE TABLE OF z08_t_kdn_spfli.

라고 선언해서 작업할 수 있다.


Literals 관련 (page Number 201)


Text Simbol 만들기

WRITE: 'H'(aaa).

* aaa를 더블 클릭해서 들어가는 부분에서 H라는 text에 대해 변경을 할 수 있다.

WRITE: / text-aaa.

* 이렇게 한 번 선언된 aaa는 text-aaa라는 표기로 계속 불러내서 사용할 수 있다.




DATA: carrid1 TYPE scarr-carrid,
carrid2 TYPE scarr-carrid.

carrid1 = 'AA'.
MOVE 'AA' TO carrid1.
MOVE carrid1 TO carrid2.

* MOVE명령을 이용하면 Data 값을 옮길 수 있다.


제어문 배워보기

if 는 논리적 표현이 있어야 한다.

case는 data Object가 있어야 한다.

DATA: carrid1 TYPE scarr-carrid VALUE 'AA'.

CASE carrid1.
WHEN 'AA'.
WRITE:/ carrid1.
WHEN OTHERS.
WRITE:/ 'WRONG...'.
ENDCASE.

IF carrid1 EQ 'AA'.
WRITE: / carrid1.
ELSE.
WRITE: /'WRONG....'.
ENDIF.


반복문

DATA: int1 TYPE i.

DO 10 TIMES.
ADD 1 TO int1.
WRITE : / int1.
ENDDO.


DO 10 TIMES.
WRITE: / sy-index.
ENDDO.


select 에서는
sy-dbcnt 을 사용한다.

System Fields

se11 -> data type (radio button) -> syst 입력 -> 조회


sy-subrc (server return code) 성공 0: success ,
그외 실패 ~: fail

= exception


*Dialog message

message 는 000은 000~ 999 까지의 글을 넣을수 있다.

MESSAGE i000(z08_kdn). " ->이렇게 적어준 뒤에 z08_kdn을 더블클릭 해주면 해당 메시지를 추가 수정할수 있는 창이 나온다.
WRITE: / sy-uname.

-> 경고창이 발생합니다.


MESSAGE s000(z08_kdn).
WRITE: / sy-uname.

-> 하단에 초록색 표시와 함께 표시 됩니다.


MESSAGE w000(z08_kdn).
WRITE: / sy-uname.

-> 하단에 빨간색 표시와 함께 표시 됩니다. 엔터를 치면 넘어갑니다.


MESSAGE e000(z08_kdn).
WRITE: / sy-uname.


-> 하단에 빨간색 표시와 함께 표시 됩니다.

MESSAGE a000(z08_kdn).
WRITE: / sy-uname.

-> X박스가 떠있는 경고창이 발생합니다. -> 프로그램이 끝남


MESSAGE x000(z08_kdn).
WRITE: / sy-uname.

-> Runtime Error 가 발생합니다. -> 역씨 프로그램이 끝남

자 프로그램을 만들어 봅시다.

* 일반 Data Type을 적용한 예제
PARAMETERS: pa_carr(3) TYPE c.
WRITE:/ pa_carr, pa_conn.

*ERP parameter 를 사용하기
PARAMETERS: pa_carr TYPE sflight-carrid,
pa_conn TYPE sflight-connid.

WRITE:/ pa_carr, pa_conn.

무엇이 틀린가요?

ERP는 이미 형태가 만들어져 있습니다.

Parameter의 TYPE을 Structure 인 sflight-carrid 로 정의 하였을 때 이에 대한 특성을 모두 물려 받게 됩니다.

이로 인해 carrid가 조회 조건으로서 개발자가 따로 작성하지 않아도 Helper창이 나오게 됩니다.


*ERP 경고창을 추가하여 작업합니다.
PARAMETERS: pa_carr TYPE sflight-carrid,
pa_conn TYPE sflight-connid.

AT SELECTION-SCREEN. "eventCode~
IF pa_carr = 'AA'.
MESSAGE w001(z00_kdn) WITH pa_carr.
ENDIF.


*이벤트를 넣어서 다음 페이지로 넘어갈 수 없게 작업
START-OF-SELECTION. "eventCode
WRITE:/ pa_carr, pa_conn.


AT SELECTION-SCREEN 에서 성공하지 못하면 이벤트상 START-OF-SELECTION 의 코드가 실행
되지 않는다.


*디버그

application tool bar의 두개의 디버깅 버튼 중 왼쪽의 디버깅을 눌러서 작업하면

자기 자신에게만 유효한 버깅이 된다.

break point. 를 적어주게 되면...

프로그램을 사용하는 모든 사용자에게 나타난다.

program 실행 중에 command field에 /h를 입력하고 F8을 누르면 debug모드로 변경된다

 Mode Function Key   Description
 Single step  F5  개별 문장 처리 statement by statement
 Execute  F6  줄 단위 처리 line by line
 Return  F7  현재 실행중인 하위 구조에서 상위로 빠져 나가기 (본문으로 복귀) return to the main program
Run(to cursor)  F8  전부 실행해 버리기(프로그램의 끝까지 수행) run to the end of program


Modularization

- 간단한 식들을 모아놓은 것.

Local Program Modularization

- 현재의 프로그램에서만 사용이 가능 함을 뜻합니다.

Separation Data

- 각 데이터의 영역이 다르기 때문에 서로 프로그램간의 데이터 공유는 되지 않는다.


중복 되는 계산식등 프로그램 자체에서 사용하게 될 공식이나 중복 구문이 있다면 이를 perform - form 을

이용해서 작업 할수 있다.

자 이제 중복되는 부분의 식을 form을 활용하여 만들어 보자.


CONSTANTS: pi TYPE p DECIMALS 4 VALUE '3.121592'.

DATA: r1 TYPE i.
DATA: result TYPE p DECIMALS 6.

r1 = 10.

PERFORM circumference.
WRITE : result.
*&---------------------------------------------------------------------*
*& Form circumference
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM circumference .
result = 2 * pi * r1.
ENDFORM. " circumference



perform 을 만들고 더블클릭 하면 main에 form을 자동으로 선언해준다.


DATA: a(2) , b(2) , c(2).

a = b = c = 'AA'.

PERFORM value_result USING a CHANGING b c.

WRITE :/ a, b, c.

*&---------------------------------------------------------------------*
*& Form value_result
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_A text
* <--P_B text
* <--P_C text
*----------------------------------------------------------------------*
FORM value_result USING         p_a
                             CHANGING p_b
                                                p_c.
p_a = p_b = p_c = 'BB'.

ENDFORM. " value_result



Actual Parameter  : a      b     c
                                 |      |     |
Formal Parameter : p_a  p_b  p_c


p_c 를 변경하면 c는 자동으로 변경되게 된다..

p_c를 변경하게 된다면 c는 동시에 변경이 될 것이다.


★ Call By Referance


FORM value_result USING         p_a
                            CHANGING p_b
                                                p_c.
p_a = p_b = p_c = 'BB'.

ENDFORM. " value_result

p_b, p_c 는 call by referance이기 때문에 b와 c는 바로 변경된다.

p_a 는 using 이기 때문에 넣을 수 없다는 Error가 뜨든데?

Call by Value

FORM value_result USING         value(p_a)
                            CHANGING         p_b
                                                          p_c.
p_a = p_b = p_c = 'BB'.

ENDFORM. " value_result


p_a 를 value(p_a)로 변경하면 value만을 넘기게 되기 때문에

p_a와 관련 없게 되게 된다.


Call by Value & Result

FORM value_result USING        value(p_a)
                            CHANGING value(p_b)
                                                        p_c.
p_a = p_b = p_c = 'BB'.

ENDFORM. " value_result

changing 부분에 p_b 를 value(p_b)로 변경하면

call by value & result 라고 칭하며 b가 변경되는 시점은

return이 되는 시점이 된다.


using과 changing 의 차이

using 에 적용하는 Data Object는 변경이 아닌 단지 사용 하기 위함이고.
changing 은 변경 하려는 것이다

internal table 을 이용하는 시점이면 form에서 using call by reference를

사용한다면 Pointing 을 하기 때문에 프로그램이 좀 더 가볍다.



Typing the interface parameters

- parameter에 구체적인 type을 명시해 준다.

Visibility of Global and Local Data Objects

Using 과 changing 를 통하고 변경하지 않는다.








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

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

Project의 구조 정하기
+   [개발관련/주말스터디]   |  2009/09/04 23:30  
 처음 이야기 드릴때 Struts2를 진행하는 작업이었으므로...

Struts2를 이용한 MVC모델로 만들어 보는 시간을 가지겠습니다.

MVC 는 Model , View, Controller 로 각 영역에 맞는 개발을 하기 위해 구조를 나눈 것입니다.

머 세부적인 사항은 책 보시거나 간단히 검색 해보셔도 금방 나오기 때문에 간단하게 설명을 드리도록,,,

하겠습니다.

실제 사용자는 View만 보고 활용할 수 있습니다. - > 우리는 이 부분을 *.jsp 로 작성할 것입니다.

Web에서는 Html이 되겠지요?  브라우져에서 사용자가 시스템에서 하고자 하는 일을 처리할 수 있게 보여주는

부분이라고 하면 되는데요.

Controller 이 부분은 html page에서 전달되어져 오는 request를 WebServer의


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

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

게시판 만들기! 처음에는 이런식으로 계획을 해 보겠습니다.
+   [개발관련/주말스터디]   |  2009/09/03 06:00  
자 이제 간단한 CRUD부터 시작해 보아야 겠네요.

Create , Read, Update, Delete 이 4가지 처리가 JDBC프로그램에선 기본이 되겠죠.

Datebase에서 지원하는게 insert, delete, update, select 니까~ 이 정도가 샘플이 되겠지요?

만들어야 할 File들을 보면..

ActionSupport 를 상속 받게 되는 XXAction.java 가 있겠구요.

이 Action은 Controller가 된답니다.

Business Logic을 작업하는 XXService.java 를 작성할 것이구요. 

Database에 대한 JDBC프로그래밍을 위해 DAO(Data Access Object)를 만들어야 겠네요.

그리고 Action에서 화면과 매핑되는 Bean을 만들어 볼껀데요.

이 Bean은 View(화면)에 Element와 대응하게 만들어 주어서 Request.getParameter("Mong"); 같은 구문 없이도

값을 전달하려구 합니다.

어느 곳 부터 작성하던 관계 없겠지만...  

그렇다면 우리가 작성하려고 하는 Board에 대한 것으로 보면

BoardAction <-> BoardService <-> BoardDAO

실제 Action과 jsp와 관련성 있게 작업을 진행 하겠구요.

이 진행중에 DB에서 필요한 사항은 DAO로 접근하여 작업을 하게 되겠습니다.


 
 
     0   1
이 글의 관련글(트랙백) 주소 ::    http://hanoori.pe.kr/trackback/110 관련글 쓰기
BlogIcon wlsgp012@naver.com 2009/09/04 14:45
Bean이란놈이 파라미터값을 받는 과정을 대신해준다는게 좀 신기하더라구요. 책을 좀 보고 공부좀 해야겠어요.

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

Struts2 의 환경정보 설정하기.
+   [개발관련/주말스터디]   |  2009/09/02 11:38  

Web Project를 진행하기 위해 먼져 Server를 등록 시켜 주겠습니다.

1. Eclipse의 좌측 메뉴인  package Explorer나 resource Explorer 에서 마우스 오른쪽 버튼을 누릅니다.

2. Server를 선택합니다.

3. Tomcat 6.0을 선택해줍니다.

4-1. 다운 받아 놓은 Tomcat이 있으면 찾아보기로 지정을 해줍니다.

4-2. 다운 받아 놓은 Tomcat이 없으면 오른쪽에 보이는 Tomcat install을 눌러주시면 Local에 Tomcat을 설치하여

줍니다.

5. 서버등록 버튼을 눌러서 Eclipse에 Web Server로 등록이 되도록 합니다.



Struts2를 사용한 작업을 하기 위한 준비를 해 보겠습니다.

apache -> download -> struts -> struts.2.xx 다운로드 -> 바이너리

Eclipse에서 새로 Project를 생성해 볼껀데요.

1. Eclipse의 좌측 메뉴인  package Explorer나 resource Explorer 에서 마우스 오른쪽 버튼을 누릅니다.

2. New를 선택하여서 Dynamic Web Project를 선택해 줍니다.

3. 프로젝트명을 입력합니다.

4. Project에서 사용할 웹 서버를 아까 등록했던 서버로 지정 합니다.

5. 프로젝트를 생성 합니다.

6. 프로젝트를 생성 했다면 Eclipse의 일반 탐색기로 보면 Eclipse에 현재 사용중인 workspace에 새로 생성한 

Project의 이름으로 디렉토리가 만들어져 있다는 것을 확인 할 수 있습니다.

7. Project에 방금 다운 받았던 Struts2의 라이브러리들을

(Project명\webContent\WEB-INF\lib\) 경로 안에 넣어줍니다.


8. Project명\webContent\WEB-INF\web.xml을 수정합니다.



9. Project명\src에는 struts.xml을 넣어 주어야 합니다.

9.


8. web.xml 수정



 
 
     Eclipse, tomcat
     0   1
이 글의 관련글(트랙백) 주소 ::    http://hanoori.pe.kr/trackback/105 관련글 쓰기
BlogIcon wlsgp012@naver.com 2009/09/04 14:44
와오 포스팅 다시 시작하시는건가요?

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

Mylyn을 이용하여 Todo list를 관리하기
+   [개발관련/주말스터디]   |  2009/09/01 23:00  

 아무런 생각없이 프로그램을 작성하지는 않습니다.

그렇다면 그 생각을 정리해 놓으면 좀 더 효율적으로 프로그램을 할 수 있지 않을까요?

이를 위한 Eclipse의 plugin이 Mylyn이랍니다.

자 프로그램을 시작하기 전에 무엇을 해야할지 생각해 보도록 하죠.

게시판 입력을 예로 시작을 해보고자 합니다.

게시판 입력을 만들려고 합니다. 무엇을 입력할꺼예요?


1. 게시판의 글 제목을 입력합니다.

2. 게시판의 내용을 입력합니다.

3. 글쓴이를 입력합니다. 

그럼 입력 해야할 목록이 (제목, 내용, 글쓴이) 라는 것을 알 수 있고 해당하는 변수나 DB의 컬럼을 만들어야

겠다는 것을 알 수 있겠네요.

그런데 빠진게 있는 것 같네요. 언제 썼는지도 알아야 겠네요.

4. 글을 쓴 시간도 입력 되어져야 합니다.

자 시간까지 적용이 되어졌는데요. 그 다음 필요한게 무엇일까요?

머 일단 여기까지 적고 실제 코딩 하면서 Todo List를 변경해두 될테죠~ ^^~

Mylyn에 todolist를 적어 놓고 언제까지 완성할지 작성해주시면 되겠습니다.










 
 
     Eclipse, mylyn, todolist
     0   0
이 글의 관련글(트랙백) 주소 ::    http://hanoori.pe.kr/trackback/104 관련글 쓰기

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

오늘하루...
+   [주저리 주저리]   |  2009/09/01 18:23  
 이렇다할 결과를 내놓은 것도 없이 하루가 훌쩍 지나가 버렸다.

지금 Web Project를 하나 유지보수 해야 하는데...

인수인계 받은게 달랑 소스 뿐이였다. 그 이외에는 전무하달까...

왠지 짜증도 나고 이런저런 기분탓도 있는지 로직에 대해서는 전혀 파악하기도 싫었던것 같다.

머 정말 사수가 시키는 데로만 해주고 말이다.

그럼 안 되는데 ...

머 오늘은 갑자기 시간이 생겨서 쿼리만 쭉 분석해서 대략적으로만 알던 전체 흐름을 잡아보았다.

사실 겉보기에는 아무 것도 안 한 것 처럼 보일 수도 있겠지만...

나름대로 로직 점검이라는걸 했다고 적어볼 수도 있겠구나 싶다.

참... 어른스럽지 못하게~ 안일하게 보내버렸던게 조금은 후회가 되는듯 하다.

그럼 내일부터는 다시 광렙을 해봐야겠구나...

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

아이디 
비밀번호 
홈페이지 
비밀글   

 

<<이전 | 1 | 2 | 다음>>

별책부록's Blog is powered by Daum