분류 전체보기 (122)
공지사항 (3)
주저리 주저리 (26)
Ubuntu (3)
개발관련 (37)
개발이야기 (6)
Language (20)
Framework (5)
Pattern (2)
DataBase (4)
Server (4)
Book (9)
스터디 (0)
STRUTS2  Head First Software Development  oracle  다짐  Eclipse  자바  HFSD  mylyn  db connection  ubuntu netbook remix 
«   2024/05   »
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 31
+ dazzi님 블로그
+ 온 오프 믹스! (모임,세미…
+ kenu blog
+ OKJSP: 사는 얘기
+ 정호님 블로그
+ 존경하는회수형님
+ 자바지기님 블로그
+ 루비나라 출입구
+ 은정이누나 블롯
+ Total :
+ Today :
+ Yesterday :
  

 

 

 

겸손한 개발자가 만든 거만한 소프트웨어 리뷰
+   [Book]   |  2009. 10. 15. 11:27  

겸손한 개발자가 만든 거만한 소프트웨어 상세보기
신승환 지음 | 인사이트 펴냄
오토에버시스템즈 소속 신승환의 『겸손한 개발자가 만든 거만한 소프트웨어』. 개발 현장에서 겸손한...이 책은 저자가 그동안 겸손한 개발자로서 프로젝트를 진행하고 컨설팅하면서 느끼고 정리한 생각을 엮은...

오래간만에 상당히 재미나게 책을 읽었던 것 같다.
 
  과잉 친절의 서비스 시대에 살고 있는 우리들 ... 하지만..
 
  소프트웨어에선 왜 그렇지 못할까... 등이다.
 
  사용자를 알아가고 파악하고 그들이 더 쉽게 접근할 수 있도록 만드는 것이 올바르다고 알고는 있지만...
 
  대한민국이란 현실에서 일어나는 일정과의 타협 자기 자신과의 타협등등.. 여러가지 일들이 일어나고 있다.
 
  마음은 그렇지 않은데 어쩔수 없지 머.. 라고 하면서 넘어간 경우가 허다 한 것 같다.
 
  이 책의 초반부는 그런 이야기이다.
 
  아직 프로그램을 오래 한 것은 아니지만... 항상 그런 고민이 있었고 머 어쩔 수 없지라는 자기 타협으로.. 넘어가왔던
 
  자기 자신을 돌아볼 수 있는 이야기 들이 이어진다.
 
  그리고 종반부 Agile 관련한 여러가지 사용자에게 다가가는 방법등과 저자 본인의 경험들을 빗대어 독자에게 해결책을
 
  내놓게 된다. 사실 모두의 환경이 같은게 아닌지라... 모두 똑같은 방법으로 해결 할 수는 없겠지만...
 
  한 가지씩 바꿔가고 여러 예외 상황들에 대한 적절한 대처를 몸에 익히게 되면 보다 사용자에게 올바른 소프트웨어를
 
  공급 할 수 있게 될 것 같다.! 돈을 받고 일하고 그에 대해 자부심을 가지고 임해야 하지 않겠는가...
 
  저자는 많은 인용을 사용하고 알려줌에 독서량이 참으로 상당한 것 같았다. 왠지 부럽기도~! 정진하자!
 
  여러가지 부분에서 버프를 많이 주는 책이였다.



 
 
        

 

10월 14일
+   [Language/ABAP]   |  2009. 10. 14. 15:18  

2009년 10월 14일

role 은

t-code  : pfcg 로 접근하여 설정한다.

Table enhancements

append struture 적용시 주의해야 할 3가지.

1. POOL(ED) / CLUSTER TABLE 에 APPEND 할 수 없다.

2. YY*/ZZ* 의 필드명으로 시작해야 한다.

3. LCHR/LRAW 의 필드는 제일 마지막에 위치해야할 필드이므로,
   이들의 DATA TYPE 을 포함한 Structure 에는 APPEND 할 수 없다.

   
   za(zappend struture ),  zy 로 자동으로 붙는다.
  
  
   Append structure
  
se11 -> spfli -> append struture 버튼 클릭 후 적용하면 됨

(두 번 이상 할 수 있음.)

* table 입장에서는 Append structure 를 여러개 가질수 있고 append structure 는 한개의 Table 에만 적용 될 수 있다.


DATA: wa1 TYPE spfli,
           wa1 TYPE
          
          
se11 -> pa0001 ->맨 아래 있고 더블클릭 하면 열린다. component 에 z* 으로 시작하는 component 명을 줄 수 있다.''


Text Enhancements : 문제에 안 나온다.

help 창 (도움말) :. Data Element 가 document 를 가지고 있다.

data Element   F1 : Doc
                           Label(field)
                           built-in-type -> predefined Type (7.0)
                           직접 DATA TYPE , DATA LENGTH , DECIMAL PLACES
                           Search Help  할 수 있다.
                          
Domain               실질적인  ~ 을 가지고 있다.
                           Fixed value.
                           Value Talbe (check table) 처리 -> Relationship

                         
                          
T-Code CMOD (CUSTOMER ), SMOD (SAP MODIFY)

실습 예제를 합니다.

SAPBC425_FLIGHT08

/n bc425_##

로 접근하면 자기 T-Code가 있을꺼예요

요청사항 : 예매를 하는데 미래의 날짜로 입력을 받아야 합니다. 그리하여

               과거의 날짜를 선택하면 경고 Message 가 나오도록 변경하고 싶습니다.



menu 의 Sytem -> status 로 접속하여... -> program명을 확인 한 후 

 Double Click 하면 SAPBC425_FLIGHT##로 접속하여...

고치려고 하면

Access key 를 이용해야 접속할 수 있다 고 나온다.

CMOD -> Z08_kdn-> 저장~!

/nse84 로 접속 : repository infomation System 으로 접속 하는데

Enhancements -> Customer Exits -> Enhancements -> 상단의 + 버튼을 열고 ->

additional selections  block 에 Component name 에 *SAPBC425_FLIGHT08* 라고 입력

-> F8 (실행)

*SAPBC425_FLIGHT08* 을 기준으로 3개가 나오는데

SBC08E01 은 Function Module Exit
SBC08E02 은 Menu Exit
SBC08E03 은 Screen Exit

이다 .

Exit Name 을 카피해 놓는다. ( SBC08E01)

첫 번째 : Function Exits

CMOD 창에서 Enhancements Assignment 선택 !

function module 이름을 double clkck   하여 EXIT_SAPBC425_FLIGHT08_001 로 들어간다.

Include 안으로 다시 Double clkck 하여 들어가서

IF flight-fldate < sy-datum.
  MESSAGE w011(bc425) WITH sy-datum.
ENDIF.

라고 코딩을 넣어준다.

* 자기 테이블을 참조한 flight 에 대한녀석이 들어있는 것을 확인한다.

활성화 해준다.(불을 붙여요) 이러면 적용이 된거랍니다.

불을 끄고 BC425_08 에 접근하여 적용과 비적용에 대해서 확인을 하면 된다.




2번째 ... Menu Exit

1. components 선택

2. change 로 접근

3. function exit 의 명칭을 더블클릭 하고 bookings 라고  입력해 준후

Local 로 저장한다.

4.  include ZXBC425G08U02 를 double click 하여 다음과 같이 코딩하여 준다.

*&---------------------------------------------------------------------*
*&  Include           ZXBC425G08U02
*&---------------------------------------------------------------------*
SUBMIT sapbc425_booking_08
       WITH so_car = flight-carrid
       WITH so_con = flight-connid
       WITH so_fld = flight-fldate AND RETURN.

5. 활성화 버튼을 누르고...

6. /nbc425_08 로 접근한다.

7. 조회 조건을 넣고 F7 (Display)

8. Menu의 Goto -> Display Bookings 를 누르면...

9. 방금 만든 프로그램을 확인 할 수 있다.




3번째 Screen Exit

1. project 를 z08_kdn 으로 만든다.

2. enhancements Assignment 를 선택 하여 create 버튼 를 눌러준다.

3.  SBC08E03 를 입력하고 저장 한다.

4. F3(뒤로)으로 CMOD 화면으로 돌아온 후... component선택change 버튼 를 눌러준다.

5. screen exit 에 있는 SAPBC425_FLIGHT08 을 더블 클릭 한다.

6. lay out 을 눌러서 만들기 시작..~

7. F6 (Dictionary / Program field Window) 를 클릭 한다.

8. SFLIGHT 를 TABLE 명으로 입력 해준 후 ENTER

9. 아무 필드나 불러서 이름을 변경한다. 

10.  logic으로 돌아가서 F3 을 누른후~

11. function module 에 접근(double click)하여 아래와 같이 코딩한다.

*&---------------------------------------------------------------------*
*&  Include           ZXBC425G08U03
*&---------------------------------------------------------------------*

seatsfree = flight-seatsmax - flight-seatsocc.


12.  seatsfree  을 double click 하여 include top 으로 접근한다.
-> 다르게 접근 할 수 있는 방법이 있지만 쉬운 네비게이션으로 되어있지 않다.


13.  ZXBC425G08TOP 으로 들어가게 되면 seatsfree 를 아래와 같이 선언하여 준다.

*----------------------------------------------------------------------*
***INCLUDE ZXBC425G08TOP .
*----------------------------------------------------------------------*
DATA  seatsfree TYPE sflight08-seatsocc.

14. F3으로 뒤로 돌아간 후 활성화 시킨다.

15. /nbc425_08 화면에서  조회를 하면 Free Seats이 생성된 것을 확인 할 수 있다.




 

academy0 -  으로 미리 다 만들어져 있어서 실습 불가 =_=;;


김셈 정리 내용**************************************************

standard program 실행

menu*status)


program명 copy

SE84

Enhancements

* Program명 paste *

실행

Exit name(copy)

CMOD

project 명 작성

Assignment 시 (Exit Name ) 넣어주기.

Function Module 적용

활성화... 적용!
*********************************************** 김셈 정리 내용


Unit 4 : Business Add-Ins

책에는 빠진 내용이 있으므로 ... 프린트를 나누어 드리겠습니다.(오후)

FI 용으로 개발 된거랍니다

BTEs  (Business Transaction Event service)- enhancements 임

Module = FI

2 가지 (InterFace)   - P/S  Interface : SAP ----> Add-on (Multiole)
                              Process I/F     :SAP ----> Add-on (single)

                                              
BTE 는 client 에 종속 적이다.

BAdl 에 대해서 ...

최신의 기술...

OOP의 적용.. 및 .. 등등등..

잘 해 놓으면 Web Den Pro 도 사용하기 어렵지 않다.


이제부터 생성도 해보고 ... 적용도 해보자.

왼쪽이 basic 오른쪽이 customer 가운데가 partner

안 보여드린거 같은데

*****************************************************
/nsqvi : ㅋㅋㅋ

quickView : Initial Screen

(z00_test_1)
*****************************************************

이런 것도 있다.

interface 로 잠자는 메소드를 사용하는데 이때 Menu Exit 을 쓸꺼냐.. function module

exit Name 을 파악하는 과정

************************************************************
find/replace

find 에 call customer 으로 검색한다.   - ba
***************************************************************

1. 프로그램 안에 : cl_exithandler 를 검색하여 찾으면 된다. - page 89

2. reference Double Click.

3. if_ex_ 를 제외한 나머지 이름이 -> BAdI 명(찾을 수 있다.)

4. (자 이제 인터페이스를 찾아주기만 하면 됩니다.~) 'badi_book08'를 복사하여 SE18 로 이동한다.

5.  BAdI Name을 선택 후 badi_book08  을 붙여 넣기 하시고  display 버튼을 눌러 준다.

6. implimentation (SE19)로 접근 하면 된다 ... 여기서는 menu의 implement -> create 를 눌러서 접근한다.

7. Implementation Name 에  zim_08_kdn  를 눌러주고 Enter

8. Implementation Short Text에 Implementation Short Text 를 넣어주고...

9. output 으로 double click 하여 method 로 접속 한다.

10 . 다음과 같이 코딩을 한다.

METHOD if_ex_badi_book08~output.
  DATA: name TYPE s_custname.
  SELECT SINGLE name
    FROM scustom
    INTO name
    WHERE id EQ i_booking-customid.
  WRITE: / name.
ENDMETHOD.

11.  SE38 에서 SAPBC425_BOOKING_08로 접속 하여 확인을 한다.

12 . 사용자 명이 출력 되지만 라인이 늘어나야 되는 것을 확인 할 수 있다.

13. 다시 SE18 화면에서 menu의 implementcreate 혹은 change접속 한 화면 (SE19)에서

14 . interface TAB에 if_ex_badi_book08~change_vline 를 double clkck 하여 접속 한 뒤
아래와 같이 코딩한다.

METHOD if_ex_badi_book08~change_vline.
  c_pos = c_pos + 25.
ENDMETHOD.

15. 불을 붙여 준다.-> SE38 의  SAPBC425_BOOKING_08 로 접속 하여 다시 확인한다


.

 브라보.... 이히~
 
 

SE38로 접속 하여...

sapbc425_booking_08  을 입력..

실행하면..

이렇게 사용자 정의9 그림  처럼 나온다.

사용자가 이때 "이름"을 더 출력할 수 있게 요청하였다.

1-1 Standard 에서는 안 된다. 라고 끊는다.

1-2 Enhancements를 고려하라.

1-1-1 : edit -> find/ replace -> call customer ->d없네?

1-1-2  edit  -> find / replace-> cl_exit

instance 의 type  이 any 인 것을 확인한다.

알고보니 exit_book 은 referance 이다.

if_ex_badi_book08 <- 이름을 보면 interface임을 알 수 있다.










 
 
        

 

10월 13일
+   [Language/ABAP]   |  2009. 10. 13. 16:44  
10월 13일..

1. SINGLETON

보통 Singleton pattern 시스템에 객체를 오직 1개만 사용하기 위하여 만든다.

SE24 -> CL_SINGLETON

사용 이유 One Instance possible

Singleton의 대표적인 부분은 자바에서의 Servlet 객체일듯 하다. 1개만 ... 해서 모두 빌려쓰는...

2. Friend - FriendShip의 관계......

Private 인 객체나 메소드에도 Friend 관계가 정의되면 접근 할 수 있게 된다.

Visual basic 에 Friend 라는 접근자가 있는걸 본적이 있다 사용해 본적은 없지만...

그 언어에서도 사용을 지양하라고 봤던 것 같다.

A 운전자는 자기 자동차를 운전할 수 있다.

다른 사람들은 A운전자의 자동차를 운전할 수 없다.

근데 정비기사님 께서는 A운전자의 자동사를 시운전 할 수 있다는.. 그런 이야기를 봤었다.

하지만 실제 객체들의 관계를 정의할때 모호해 질 위험이 아주 커 보인다....

3.  예외 try ~ endtry

exception class 는

zcx 로 시작하게 만들수 있다.

예외가 나도록 실행하면 error 화면에 exception class 가  표시 되므로 이를 이용해서 사용 하는 방법도 있다.

사실 OOP로 프로그램을 작성한다면 .. Error로 인한 Exception 이 발생하기 전에 미리 처리를 해 두는 것이

옳은 판단일 것 같다. ->아마도 Exception에 관련된 예제들을 따로 찾아봐야 할 것 같다.(잊지 말고 정리하기)

4. shared objects

우리가 이미 배웠던 내용이라고 한다.

프로그램에서 아주 빈번히 발생하는 공동사용 구간에 대한 접근 및 사용이다.

다수의 유저가 공유해야하고.. 다수의 유저는 변경된 사항에 대해서 알아챌 수 있어야 하므로...

한 메모리 영역을 모두가 참조하게 되면.. 그 다수의 유저중 누군가가 정보를 바꾸어도 다수의 유저들이 모두

공유 할 수 있을 것이다.

보통 System 의 properties 정보 등을 공통 영역의 Properties 파일로 만들어 WAS가 구동될 때 Singleton으로

올려놓았던 것이 생각난다.

다시 ABAP으로...

T-code

shma  -  memory 에 area를 만들수 있다.

shmm - memory 를 모니터링 할 수 있습니다.

shma 에서 만들어보자..


/nshma 로 접근.

1.'zcl08_kdn_area ' 라는 이름을 사용 description 도 채워준 후 create  버튼을 눌러준다.

2. Basic Properties에  Root Class 에 "ZCL08_KDN_ROOT  " 라고 적어준다.

3. Client-Specific Area를 클릭해준다.

4. SE24의 "ZCL08_KDN_ROOT" 로 이동이 되었다.

5.  Properties 에 General Data 에 "Shared Memory-Enabled" 를 클릭해준다.

6.  Attribute 에 r_cat 를 associated type :  ZCL08_KDN_CATALOGUE  인 instance 로 지정해준다.

7. ZCL08_KDN_CATALOGUE 를 DOUBLE CLICK 하여 SE24의 ZCL08_KDN_CATALOGUE 지정 화면으로 이동한다.

8. Properties 에 General Data 에 "Shared Memory-Enabled" 를 클릭해준다.

9. attribute 에 IT_SPFLI , instance ,  private , SPFLI_TAB 으로 지정해준다.

10.  methods 에 set_data 와 get_data를 지정해 준다.

11. set_data ~

METHOD set_data.
  SELECT * FROM spfli INTO TABLE it_spfli .
ENDMETHOD.


12. get_data

METHOD get_data.
  DATA: wa_spfli TYPE spfli.
  LOOP AT it_spfli INTO wa_spfli WHERE carrid = im_carrid.
    WRITE: / wa_spfli-carrid, wa_spfli-connid,
             wa_spfli-cityfrom, wa_spfli-cityto .
  ENDLOOP.
ENDMETHOD.


13. parameter 지정 :  IM_CARRID , importing , SPFLI-CARRID

14. zcl08_kdn_catalogue - 활성화 후 F3 -> zcl08_kdn_root - 활성화 후 F3 -> shma 화면에서 저장 버튼을 누른 후 F3 을 누른다.

15. ctrl+ F3  (genarate area class) 를 눌러준다.

16. SE38의 프로그램으로 접근...

*&---------------------------------------------------------------------*
*& Report  Z08_KDN_OOP15
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z08_kdn_oop15.

DATA: r_handle TYPE REF TO zcl08_kdn_area.
DATA: r_root   TYPE REF TO zcl08_kdn_root,
      r_catalogue TYPE REF TO zcl08_kdn_catalogue.

*TRY.
CALL METHOD zcl08_kdn_area=>attach_for_write
*  EXPORTING
*    CLIENT      =
*    INST_NAME   = CL_SHM_AREA=>DEFAULT_INSTANCE
*    ATTACH_MODE = CL_SHM_AREA=>ATTACH_MODE_DEFAULT
*    WAIT_TIME   = 0
  RECEIVING
    handle      = r_handle.

CREATE OBJECT r_root AREA HANDLE r_handle.
CREATE OBJECT r_catalogue AREA HANDLE r_handle.

r_root->r_cat = r_catalogue.
r_handle->set_root( r_root ).
r_handle->root->r_cat->set_data( ).
r_handle->detach_commit( ).

* CATCH CX_SHM_EXCLUSIVE_LOCK_ACTIVE .
* CATCH CX_SHM_VERSION_LIMIT_EXCEEDED .
* CATCH CX_SHM_CHANGE_LOCK_ACTIVE .
* CATCH CX_SHM_PARAMETER_ERROR .
* CATCH CX_SHM_PENDING_LOCK_REMOVED .
*ENDTRY.


이렇게 만들어 주고 활성화.

17. t-code "SHMM " 로 접근하여 자신이 작성한 Area 가 올라가 있는지 확인하기.



(오후) page 323

프로그램을 만들어 봅니다.


SE38 에 접속 후  'Z08_KDN_OOP_WRITE'  CREATE해줍니다.

오전에는  attach 를 해보았습니다.

이제 읽어볼텐데...

Z08_KDN_OOP_read


DATA : r_handle TYPE REF TO zcl08_kdn_area.
PARAMETERS: pa_carr TYPE spfli-carrid.

*TRY.
CALL METHOD zcl08_kdn_area=>attach_for_read
*  EXPORTING
*    CLIENT    =
*    INST_NAME = CL_SHM_AREA=>DEFAULT_INSTANCE
  RECEIVING
    handle    = r_handle.
r_handle->root->r_cat->get_data( pa_carr ).
r_handle->detach( ).
* CATCH CX_SHM_INCONSISTENT .
* CATCH CX_SHM_NO_ACTIVE_VERSION .
* CATCH CX_SHM_READ_LOCK_ACTIVE .
* CATCH CX_SHM_EXCLUSIVE_LOCK_ACTIVE .
* CATCH CX_SHM_PARAMETER_ERROR .
* CATCH CX_SHM_CHANGE_LOCK_ACTIVE .
*ENDTRY.


fiend Symbols. - 대리자 역할을 한다.


REPORT  z08_kdn_oop16.
DATA: int1 TYPE i VALUE 17.

FIELD-SYMBOLS: <int1> TYPE i.

ASSIGN int1 TO <int1>.

<int1> = <int1> + 1.

WRITE: / int1, <int1>.

CASTING SYMBOLS



예제 2

REPORT  z08_kdn_oop16.

TYPES: BEGIN OF st_date,
       year(4) TYPE n,
       month(2) TYPE n,
       day(2) TYPE n,
       END OF st_date.

FIELD-SYMBOLS : <fs> TYPE st_date.

<fs> = sy-datum.

WRITE : / <fs>.


sy-datum 은 field 이고 <fs> 는 구조체(Struture) 이기 때문에 ERROR 가 남...

REPORT  z08_kdn_oop16.

TYPES: BEGIN OF st_date,
       year(4) TYPE n,
       month(2) TYPE n,
       day(2) TYPE n,
       END OF st_date.

FIELD-SYMBOLS : <fs> TYPE st_date.

ASSIGN SY-DATUM TO <FS>.
"앞은 날짜 이고 뒤는 구조체이다. 이렇게 하면 에러가 나고
 ASSIGN SY-DATUM TO <FS> CASTING.
 "이렇게 하면 eRROR 이 나지 않는다.


WRITE : / <fs>.



예2 > 실제 코딩에선 이처럼 많이 쓰인다.

TYPES: BEGIN OF st_date,
       year(4) TYPE n,
       month(2) TYPE n,
       day(2) TYPE n,
       END OF st_date.

FIELD-SYMBOLS : <fs>, <fs_comp>.

ASSIGN sy-datum TO <fs> CASTING TYPE st_date.
"앞은 날짜 이고 뒤는 구조체이다ㅣ.

ASSIGN COMPONENT 1 OF STRUCTURE <fs> TO <fs_comp>.

WRITE : / <fs_comp>.



예3 번째  - 원래는 이렇게 사용 하면 안된다.

DATA: int1 TYPE i VALUE 17.
DATA: ref1 TYPE REF TO i.

GET REFERENCE OF int1 INTO ref1.
"             INT1=  DATAOBJECT    REF1 = REFRANCE

ref1->* = ref1->* + 1.

WRITE: / int1, ref1->*.


예4 원래는 ref 를 바로 사용 하시는게 아니라 Symbols 를 넘겨서 사용 해야한다.

DATA: int1 TYPE i VALUE 17.
DATA: ref1 TYPE REF TO i.

FIELD-SYMBOLS: <fs> TYPE i.
GET REFERENCE OF int1 INTO ref1.
"             INT1=  DATAOBJECT    REF1 = REFRANCE

GET REFERENCE OF int1 INTO ref1.
ASSIGN ref1->* TO <fs>.
<fs> = <fs> + 1.

WRITE: / int1, <fs>.


이건 예제이기 때문에 이렇게 사용 합니다.

Assigned 인지 Bound 인지...


IF <fs> IS ASSIGNED.
  WRITE: / 'Yes'.
ELSE.
  WRITE: / 'No...'.

ENDIF.

IF ref1 IS BOUND.
  WRITE: / 'Yes'.
ELSE.
  WRITE: / 'No...'.

ENDIF.


자기 자신을 참조할 수도 있다.

DATA: ref1 TYPE REF TO i.

CREATE DATA ref1.

ref1->* = 17.

WRITE: / ref1->*.



그럼 Symbol 은 안되느냐?
->이건 못 적었네요@_@;;


그럼 형 변환은 어찌 될가요?
DATA: ref1 TYPE REF TO data.

create DATA ref1 type spfli.
"이런 식으로 해볼수 있고~

create DATA ref1 type i.
"이런 식으로 요런식으로도 해볼 수 있습니다.

아마도 Abap에서의 data형은 Java에서의 Object 형 처럼 최상위 객체인가 봅니다.



이제는 조금 더 바꿔보자.

형변환을 하게 되는 예제.

DATA: ref1 TYPE REF TO data.
PARAMETERS : my_type(10).

CREATE DATA ref1 TYPE (my_type). " ( ) 안에 감싸면 value 를 넘겨주게 된다.

BREAK-POINT.


이렇게 상위 객체로 선언하고 하위의 객체로 적용하는 방식을 사용하면 추후 유지보수에 엄청나게 영향을 주겠죠...



직접 참조와 간접 참조...

동적 프로그래밍 예제

REPORT  z08_kdn_oop17.
DATA: ref_itab TYPE REF TO data,
           ref_wa  TYPE REF TO data.
" refrence 의 특징이  주소만 가지고 있기 때문에 하나하나 쪼개져 있는
"필드 에 대한  접근이 불가능 하다 그래서 필드 심볼을 써라.

FIELD-SYMBOLS: <fs_itab> TYPE ANY TABLE, "기억하세요  ANY TABLE
               <fs_wa>   TYPE ANY,
               <fs_comp> TYPE ANY.

PARAMETERS pa_tab TYPE dd02l-tabname DEFAULT 'SPFLI'.

START-OF-SELECTION.

  CREATE DATA ref_itab TYPE STANDARD TABLE OF (pa_tab)
        WITH NON-UNIQUE DEFAULT KEY.

  ASSIGN ref_itab->* TO <fs_itab>." field Symbol 은 Self-Instantiate X

  SELECT *
    FROM (pa_tab)
    INTO TABLE <fs_itab>
    UP TO 100 ROWS.

  CREATE DATA ref_wa LIKE LINE OF <fs_itab>.

  ASSIGN ref_wa->* TO <fs_wa>.

  LOOP AT <fs_itab> INTO <fs_wa>.
"assigning <fs_wa> 로 바꿔 주고 Create data ref_wa 를 삭제해도 됨
    DO .
      ASSIGN COMPONENT sy-index OF STRUCTURE <fs_wa> TO <fs_comp>.
      IF sy-subrc NE 0.
        NEW-LINE.
        EXIT.
      ENDIF.
      WRITE <fs_comp>.
    ENDDO.
  ENDLOOP.

 

  *SE16처럼 동적으로 프로그램을 만드는 예제입니다.
 
*&---------------------------------------------------------------------*
*& Report  Z08_KDN_OOP18
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z08_kdn_oop18.

DATA: int TYPE i VALUE 15,
      date TYPE d VALUE '20040101'.

DATA : ref_int TYPE REF TO i,
       ref_date TYPE REF TO d,
       ref_gen TYPE REF TO data.

GET REFERENCE OF int INTO ref_int.
ref_gen = ref_int.
WRITE: / ref_int->*.

ref_int ?= ref_gen.

WRITE: / ref_int->*.

GET REFERENCE OF date INTO ref_date.

ref_gen = ref_date.

TRY .
    ref_int ?= ref_gen.
  CATCH cx_sy_move_cast_error.
    MESSAGE i002(z08_kdn) WITH 'ref_gen' .
ENDTRY.
WRITE: / ref_int->*.




**
TRY 부분에서 EXCEPTION 이 발생하게 되는데...

ref_gen. 은 DATE 타입이 되어버려서 ref_int 의 INTEGER 형으로 변환이 안 되기 때문입니다.


*&---------------------------------------------------------------------*
*& Report  Z08_KDN_OOP18
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z08_kdn_oop18.

DATA: int TYPE i VALUE 15,
      date TYPE d VALUE '20040101'.

DATA : ref_int TYPE REF TO i,
       ref_date TYPE REF TO d,
       ref_gen TYPE REF TO data.

GET REFERENCE OF int INTO ref_int.
ref_gen = ref_int.
WRITE: / ref_int->*.

ref_int ?= ref_gen.

WRITE: / ref_int->*.

GET REFERENCE OF date INTO ref_date.

ref_gen = ref_date.

TRY .
    ref_int ?= ref_gen.
  CATCH cx_sy_move_cast_error.
    MESSAGE i002(z08_kdn) WITH 'ref_gen' .
ENDTRY.
WRITE: / ref_int->*.


Runtime type services

RTTS Inheritance

SE80 으로 가서

DATA: gs TYPE spfli,
      go_descr TYPE REF TO cl_abap_structdescr,
      gs_comp TYPE abap_compdescr.
go_descr ?= cl_abap_typedescr=>describe_by_data( gs ).
LOOP AT go_descr->components INTO gs_comp.
  WRITE: / gs_comp-name, gs_comp-type_kind,
        gs_comp-length.
ENDLOOP.




RUNTIME 중에 CLASS 의 NAME 을 알아 내어 보아요.

REPORT  z08_kdn_oop20.
DATA: go_vehicle TYPE REF TO zcl08_kdn_vehicle,
          go_truck   TYPE REF TO zcl08_kdn_truck,
          go_descr   TYPE REF TO cl_abap_classdescr.
DATA: find_name TYPE string.
CREATE OBJECT go_vehicle.
CREATE OBJECT go_truck.

go_descr ?= cl_abap_typedescr=>describe_by_object_ref( go_vehicle ).
find_name = go_descr->get_relative_name( ).
WRITE: / find_name.


* GENERATING AN INTERNAL TABLE WITH A DYNAMICALLY CREATE TYPE.
정말 쓰지 않는 방식이다.

4주차 2강..

적용 방식중에

MODIFICATION 은 사용하지 말기~!

enhancement =  추천 추천의  ( ADD ON ) 방식이다.

enhancement [inhǽnsmənt, en-] [-hɑ́ːns-]
1. U,C (가격·매력·가치 등의) 상승, 등귀;향상, 증대



8문제정도 나올듯 ㅋㅋㅋ

2PAGE

*enhancement

1. ABAP Dictionary    ┌     TABLE ENHANSMENT    ┌  APPEND STRUCTURE
                               |                                             CI(CUSTOMER INCLUDE)
                               └     DATA ELEMENT
                                       

2. program exit    ┌  1.  FUNCTION MODULE EXIT ~ 1 , 2, 3은 모두 FUNCTION MOEULE 이 BASE가 된다.
   (customer exit) |   2.  MENU EXIT
                         └   3.  SCREEN EXIT


3. Business Transaction Events  (BTE)

4. Business Add-Ins




 
 
        
<<이전 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ··· | 41 | 다음>>

별책부록's Blog is powered by Daum