SAP ABAP day2

gununoo·2024년 8월 6일
0

SAP ABAP 

목록 보기
2/5

unit 3

system field

  • syst: ABAP-Systemfielder

do.
  write:/ sy-index.
  if sy-index >= 10. exit. endif.
ENDDO.

결과

        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
  • debugging
    • f5: single step
    • f6: execute
    • f7: return
    • f8: continue

F5: Single Step
현재 실행 중인 명령어를 한 단계씩 실행합니다. 이 기능을 사용하면 코드의 흐름을 자세히 살펴보고, 각 단계에서 변수의 값이 어떻게 변하는지 확인할 수 있습니다. 함수 모듈 호출 시, 호출된 함수 모듈 내부로 진입할 수 있습니다.

F6: Execute
현재 라인을 실행하고 다음 라인으로 이동합니다. 함수 모듈이나 서브루틴 호출 시, 내부의 코드에 진입하지 않고 호출된 함수 모듈이나 서브루틴이 완료될 때까지 계속 실행됩니다.

F7: Return
현재 서브루틴이나 함수 모듈을 종료하고 호출된 위치로 돌아갑니다. 함수 모듈이나 서브루틴이 끝날 때까지 실행을 기다리며, 호출한 코드로 돌아가서 계속 디버깅을 진행할 수 있습니다.

F8: Continue
디버깅 세션을 계속 진행하여 중단점을 설정한 위치까지 또는 프로그램 실행이 종료될 때까지 계속 실행합니다. 현재 위치에서 디버깅을 중단하고 코드 실행을 계속할 수 있습니다.


SAP ABAP에서 SY-INDEX, SY-DBCNT, SY-TABIX는 프로그램 실행 중에 유용하게 사용되는 시스템 필드입니다. 각각의 용도는 다음과 같습니다:

  1. SY-INDEX:

    • 용도: 내부 테이블을 처리하는 루프에서 현재의 인덱스를 나타냅니다.
    • 예시: LOOP AT itab INTO wa., 이 루프 안에서 SY-INDEX는 현재 루프의 순번을 나타냅니다.
    LOOP AT itab INTO wa.
      WRITE: / SY-INDEX, wa-field.
    ENDLOOP.
  2. SY-DBCNT:

    • 용도: 데이터베이스 명령어(SELECT, INSERT, UPDATE, DELETE) 실행 후 영향을 받은 레코드의 수를 저장합니다.
    • 예시:
    DELETE FROM dbtab WHERE field = 'value'.
    WRITE: / 'Records deleted:', SY-DBCNT.
  3. SY-TABIX:

    • 용도: 내부 테이블을 처리하는 루프에서 현재 처리 중인 행의 인덱스를 나타냅니다. SY-TABIXLOOP AT 루프 내에서 사용됩니다.
    • 예시:
    LOOP AT itab INTO wa.
      WRITE: / SY-TABIX, wa-field.
    ENDLOOP.

이 시스템 필드는 ABAP 프로그램의 흐름을 제어하고, 데이터베이스 작업을 관리하는 데 유용하게 사용됩니다. 각 필드는 특정 작업에서 현재 상태를 추적하는 데 도움을 줍니다.


message

ex1

message i000(zt_msg_03) with sy-datum.

&1, &2, &3, &4: placeholder

결과

ex2

message i001(zt_msg_03) with sy-datum sy-uzeit sy-mandt sy-uname.

결과

se91

message class 생성/관리

Debugging (break/watch point)

data: carrid1 type s_carr_id,
      carrid2 like carrid1.

BREAK-POINT.
carrid1 = 'AA'.
write:/ carrid1.
carrid1 = 'LH'.
write:/ carrid1.
carrid1 = 'SQ'.
write:/ carrid1.
carrid1 = 'UA'.
write:/ carrid1.

carrid2 = carrid1.
write:/ carrid2.
  • watch point

f8키

확인

  • sm04: 세션 삭제
    디버깅 강제종료 하고 싶을 때

unit 4

modularization

se37: function builder
se24: class builder

  1. subroutine (local): se80

  2. function group / function module (global): se80 -> se37

  3. class / method (global): se24


  • 서브루틴 (Local): SE80에서 관리, 단일 프로그램 내에서 로컬로 사용.
  • Function Group / Function Module (Global): SE80에서 Function Group 관리, SE37에서 Function Module 정의 및 수정.
  • Class / Method (Global): SE24에서 클래스를 정의하고 관리, OOP 원칙에 따라 데이터와 메서드를 캡슐화.

subroutine

  • Call by Value (값에 의한 호출):
    정의: 실제 데이터의 값 복사본이 프로시저에 전달됩니다.
    특징: 프로시저 내에서의 변경이 원본 데이터에 영향을 미치지 않습니다.
    용도: 데이터가 변경되지 않도록 할 때 적합합니다.

  • Call by Value and Result (값과 결과에 의한 호출):
    정의: 값 복사본이 전달되며, 프로시저 내에서의 변경이 호출 후 원본 변수에 반영됩니다.
    특징: 프로시저 내에서의 변경이 원본 데이터에 영향을 미칩니다.
    용도: 프로시저에서 값을 수정하고 그 결과를 원본 변수에 반영하고자 할 때 사용됩니다.

  • Call by Reference (참조에 의한 호출):
    정의: 데이터의 참조가 프로시저에 전달됩니다.
    특징: 프로시저 내에서의 변경이 원본 데이터에 직접 영향을 미칩니다.
    용도: 프로시저에서 원본 데이터를 수정해야 할 때 사용됩니다.


DATA: c1(2), c2(2), c3(2).

c1 = c2 = c3 = 'AA'.
WRITE:/ c1, c2, c3.

PERFORM subroutine1 USING     c1
                    CHANGING  c2  
                              c3.  
WRITE:/ c1, c2, c3.
 
FORM subroutine1  USING     VALUE(p_c1) " call by value 
                  CHANGING  VALUE(p_c2) " call by value and result 
                            p_c3.       " call by reference 
  p_c1 = 'BB'.
  p_c2 = 'BB'.
  p_c3 = 'BB'.
ENDFORM.

결과

AA AA AA
AA BB BB

function group, function module

function module 불러오기

  • se37: function builder

f8 눌러서 실행


패턴 버튼 클릭

bc400_mos_power 입력

주석 해제하고 파라미터 입력

DATA: value1 TYPE bc400_compute_base VALUE 2,
      value2 TYPE bc400_compute_power VALUE 4,
      result TYPE bc400_compute_result.


CALL FUNCTION 'BC400_MOS_POWER'
  EXPORTING
    iv_base               = value1
    iv_power              = value2
  IMPORTING
    ev_result             = result
  exceptions
    power_value_too_high  = 1
    result_value_too_high = 2
    OTHERS                = 3.

IF sy-subrc <> 0. 
  write:/ 'Wrong data.'
ELSE. 
  write:/ result. 
ENDIF. 

function module 생성

  • function group
  • function group 안에 function module 생성




FUNCTION ZT_03_FM.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(IV_ACT) TYPE  BC400_ACT
*"     REFERENCE(IV_MAX) TYPE  BC400_MAX
*"  EXPORTING
*"     REFERENCE(EV_PERCENTAGE) TYPE  BC400_PERC
*"  EXCEPTIONS
*"      DIVISION_BY_ZERO
*"----------------------------------------------------------------------

  if iv_max = 0.
    ev_percentage = 0.
    raise division_by_zero.
  else.
    ev_percentage = iv_act / iv_max * 100.
  endif.
ENDFUNCTION.
  • 결과

  • 프로그램 > 패턴 > function module 불러오기
  • 코드 입력
*&---------------------------------------------------------------------*
*& Report ZT_03_TEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zt_03_test.

DATA: value1 TYPE bc400_act VALUE 1,
      value2 TYPE bc400_max VALUE 3,
      result TYPE bc400_perc.

CALL FUNCTION 'ZT_00_FM'
  EXPORTING
    iv_act                 = value1
    iv_max                 = value2
 IMPORTING
   EV_PERCENTAGE          = result
 EXCEPTIONS
   DIVISION_BY_ZERO       = 1
   OTHERS                 = 2
          .
case sy-subrc.
  when 1.
    write:/ 'error in function module.'.
endcase.

write:/ result.
  • 결과

BAPIs(Bussiness APIs)

class, method

method 불러오기

se24: class builder

f8키

  • 패턴 -> abap objects patterns
  • class, method 각각 입력
  • 코드 입력
DATA: value1 TYPE bc400_compute_base value 2,
      value2 TYPE bc400_compute_power value 4,
      result TYPE bc400_compute_result.

 TRY.
 CALL METHOD cl_bc400_compute=>get_power
   EXPORTING
     iv_base   = value1
     iv_power  = value2
  IMPORTING
     ev_result = result.
  CATCH cx_bc400_power_too_high .
    write:/ 'power too high'.
  CATCH cx_bc400_result_too_high .
    write:/ 'power too high'.
 ENDTRY.

메소드 생성

  • se24 > create

  • method 생성
  • parameter 생성
  • sourcecode
  • 결과
  • 프로그램 > 패턴: 위 메소드를 프로그램에 적용
  • 코드
DATA: value1 TYPE bc400_act value 1,
      value2 TYPE bc400_max value 3,
      result TYPE bc400_perc.

CALL METHOD zcl_03_t_compute=>get_percentage
  EXPORTING
    iv_act        = value1
    iv_max        = value2
  IMPORTING
    ev_percentage = result
    .

write:/ result.
profile
take a look

0개의 댓글