본문으로 바로가기


TAW10_1 Exercise 14: Working with Structures

스트럭처('구조체' 라고도 한다) 사용하기


이번 Exercise의 질문을 하나하나 풀어가다 보면 ABAP에 대해 전체적으로 감을 잡을 수 있다. 잠깐 후루룩 보고 지나가지 말고 1주일동안 이것만 봐도 될 정도로 중요한 내용이니 조바심을 갖지 말고 천천히 보도록 하자.


Execrise Objectives

이번 예제를 통해 배울 수 있는 것

·데이터 흐름과 프로세싱 영역간에 이해를 돕기 위해 ABAP 디버거 사용법을 배운다.


Business Example

특정 데이터가 데이터 객체들  사이에서 언제 어떻게 전송이 되는지 알아보기 위해 ABAP 프로그램을 테스트 해야 하는 업무를 받았다.


Task 1:

프로그램을 디버깅 모드로 실행 할 것

1.프로그램 'SAPBC400WBS_GETTING_STARTED'을 실행해보자. 선택 화면에서 'Airline' 필드에 LH(루프트한자 항공사임)를 입력하자. 명령어 입력 필드(좌측 상단 t-code입력란)에 '/h'라고 입력하고 엔터를 누른다. 단축키 'F8'키를 이용해 프로그램을 실행하자. 그러면 디버깅 모드로 들어간다.


2.모든 데이터 오브젝트가 초기값으로 되어있는지 확인하자. 프로그램에 선언되어있는 모든 데이터 오브젝트를 필드 뷰로 전송해보자. 할당된 타입과 스트럭처 컴포넌트의 내용을 출력해보자.


Hint: 프로그램에서, 'TABLES sbc400_carrier' 구분은 딕셔너리 스트럭쳐 'SBC400_CARRIER'와  같은 이름, 같은 구조의 스트럭처 변수를 선언한다. 이 방법은 자주 사용하지 않는 방법이다. 왜냐하면 알수없는 타입의 스트럭처 선언은 '스크린 프로그래밍'에서 만 사용하기 때문이다.

프로그램 내부에 선언된 스트럭쳐 프로그램과 화면 간에 데이터를 교환하는 인터페이스로 사용한다. 이에 관한 정보는 뒤에 나오는 'screen programming'에서 보도록 하고 다음으로 넘어가자.


3.싱글 스텝 펑션을 이용한 프로그램을 사용해 보자.


Task 2:

필드 컨텐츠를 분석해보자

1.'WA_SCARR' 스트럭쳐의 어떤 필드가 'SELECT' 구문에서 사용되었는가? 이 구문 뒤에 나오는 시스템 필드'SY-SUBRC'의 값은 무엇인가?


2.어떻게 'WA_SCARR' 스트럭쳐의 필드들이 'SBC400_CARRIER'스트럭쳐로 복사되는지 확인해보자, 어떤 필드 값이 복사 되는가?


3.ABAP 구문 'CALL SCREEN 100'은 100번 스크린을 처리한다. 스크린 필드의 '테크니컬 네임'은 무엇인가?


4.화면에서 사용자 이름, 날짜, 시간에 특정 값을 입력하고 실행 해보자.

프로그램 내부에 선언된 어떤 데이터 오브젝트가 리스트 화면에 출력되는가?

그 값은 무엇인가?



Task 3:

1.'WRITE'구문이 어떻게 LIST화면을 구성하는지 관찰해보자.

Hint: 첫번째 'WRITE'구문을 실행한 후 툴바에 버튼 하나가 추가된다. 이 버튼을 누르면 현재 생성된 리스트 버퍼를 볼 수 있다. 그러나, 리스트 버퍼 라인은 한번 출력되고 닫힌다, 그리고 다음 라인이 시작 할 때 다시 생성된다.


Task 4:

브레이크 포인트를 설정하고 필드 내용을 바꿔보자.

1.프로그램을 디버깅 모드로 다시 시작 한다. 각각 'WRITE'구문에 브레이크 포인트를 설정하자.

또한 'WA_SCARR'에 와치 포인트를 설정하자.

'Continue' 버튼을 눌러서 프로그램을 다시 시작하자, 그리고 왜 각각의 상황에서 프로그램이 정지 했는지 확인해보자.


2.프로그램을 디버깅모드로 다시 시작 하자. 'CALL SCREEN'구문에서 브레이크 포인트를 설정하고 해당 브레키크 포인트에 도달할 때까지 프로그램을 계속 실행하자. 스크린을 처리하기 전에 'SBC400_CARRIER'스트럭처의 'UNAME'필드에 무작위 이름을 적어주자.

Hint:  디버거에서 필드 네임의 필드 값을 바꾸려면 'Change Field Content'를 선택하면 된다.

이제 'CALL SCREEN'구문을 실행하자. 화면에 무엇이 보이는가?



이번 연습문제에서의 요청사항은 Task 1 ~ Task 4... 좀 많다. 쫄지 말고 하나씩 해보자.


Task 1:

프로그램을 디버깅 모드로 실행 할 것

1.프로그램 'SAPBC400WBS_GETTING_STARTED'을 실행해보자. 선택 화면에서 'Airline' 필드에 LH(루프트한자 항공사임)를 입력하자. 명령어 입력 필드(좌측 상단 t-code입력란)에 '/h'라고 입력하고 엔터를 누른다. 단축키 'F8'키를 이용해 프로그램을 실행하자. 그러면 디버깅 모드로 들어간다.


위에 연습을 해보기 전에 일단 프로그램을 '실행'하는 것부터 해보자.


일단 프로그램을 실행하기 위해 se80 Object navigator로 이동하자. '/nse80'

좌측 'Repository Browser'에서 'Program'을 입력하고 우리가 실행하고 싶은 'SAPBC400WBS_GETTING_STARTED' 을 입력하고 엔터를 친다. 그러면 위와 같이 선택이 된다.



여기에서 좌측 Object Name아래 있는 'SAPBC400WBS_GETTING_STARTED'를 더블클릭 하면 아래 화면 우측과 같이 ABAP 소스코드가 나온다.


한번 실행해보자. 단축키 'F8'을 누른다.

항공사를 선택할 수 있는 화면이 나온다. 'LH'(Lufthansa)라고 입력 하자. 다른 항공사의 데이터를 보고 싶으면 'Airline' field에 커서를 올려놓고 'F4'번을 누르면 입력 가능한 필드값 리스트가 나온다. 한번 눌러보자.


이런 화면이 나온다.


우리에게 익숙한 대한항공, 아시아나 항공은... 안보인다.  'JL'(Japan Airlines)를 선택 해봐도 된다. 난 그냥 루프트한자 선택 할란다.

좌측 상단 실행 버튼이나 'F8'을 눌러서 실행 해보자.



그러면 루프트한자 항공에 대한 상세 데이터를 조회(엄밀히 말하면 조회하는건 아니다) 할 수 있는 화면이 나온다.

Airline필드가 LH로 되어있고 Airline Currency는 기존에 설정 되어 있던 EUR로 세팅이 된다.


'User Name', 'Time', 'Current Data' 세가지 값을 적절히 넣자.


스코드 대로 '기존에 조회한 값'이 첫번째 줄('LH~~~'로 시작하는 줄이다)에 나오고 방금 입력한 값이 두번째 줄('KYENOG~~~' 로 시작하는 줄)에 나온다.

정상적으로 실행한 화면이다.



이제 Exercise에서 요구하는 것을 해보자.

1.프로그램 'SAPBC400WBS_GETTING_STARTED'을 실행해보자. 선택 화면에서 'Airline' 필드에 LH(루프트한자 항공사임)를 입력하자. 명령어 입력 필드(좌측 상단 t-code입력란)에 '/h'라고 입력하고 엔터를 누른다. 단축키 'F8'키를 이용해 프로그램을 실행하자. 그러면 디버깅 모드로 들어간다.


'프로그램 'SAPBC400WBS_GETTING_STARTED'을 실행해보자.'는 위에서 해보았으니 '디버깅 모드' 들어가는 것을 해보자.

처음 화면으로 와서 'F8'을 눌러 실행 해보자.




Airline을 'LH'로 입력 하고 '디버깅 모드'로 들어가기 위해 좌측 상단 명령입력란에 '/h'를 입력하고 엔터 쳐보자.


화면이 반짝 하면서 아래 상태 표시줄에 'Debugging switched on'이라고 나온다.



실행 하면 디버깅 하는 화면이 하나 더 나오면서 한줄씩 실행해볼 수 있다.

화면에 빨간 동그라미 친 부분 화살표를 유심히 보자. 소스코드 맨 위에 회색부분으로 나오는 부분

*&---------------------------------------------------------------------*
*& Report         SAPBC400WBS_GETTING_STARTED                                  *
*&---------------------------------------------------------------------*

이 부분은 주석이니 그냥 지나가고 'REPORT  sapbc400wbs_getting_started .'부터 실행 된다.

F5, F6, F7, F8 키를 이용해 한줄씩 넘어갈건지, 한 문단씩 넘어갈건지 등을 조절 할 수 있다.


화살표의 위치상 프로그램이 초기화 되었고 아직 실행 되기 직전이다.

100미터 달리기로 따지면 선수들이 주욱 서있고 심판이 '준비!'라고 외친 상태이다.

여기에서 F5, F6, F7, F8 키를 누르면 심판이 총을 '땅' 하고 쏘면서 주자들이 출발하는 것이다.



이어서 다음 문제를 해결해보자.

2.모든 데이터 오브젝트가 초기값으로 되어있는지 확인하자. 프로그램에 선언되어있는 모든 데이터 오브젝트를 필드 뷰로 전송해보자. 할당된 타입과 스트럭처 컴포넌트의 내용을 출력해보자.


현재 초기화된 상태이므로 프로그램내에 선언된 '데이터 객체'(변수로 볼 수 있다)의 값들을 확인해보자.

데이터 객체 'wa_scarr'의 초기 상태를 확인하기 위해 

'DATA        wa_scarr TYPE scarr.' 구문에 써있는 'wa_scarr'을 더블클릭 해보자.



그러면 아래 모니터 창에 'wa_scarr'데이터 객체의 상태를 볼 수 있다.

여기에서 관심을 갖고 보아야 할 필드는 'Val.'필드의 값이다. 'Structure: flat, charlike'라고 나오는데 아직 아무 값이 들어가 있지 않기 때문에 해당 '데이터 객체'가 어떤 타입인지만 나와있다.


오브젝트(객체) 이름 혹은 변수 명을 더블클릭 해서 해당 오브젝트 또는 변수에 어떤 값이 들어 있는지, 현재 상태는 어떤지 확인 할 수 있다.





3.싱글 스텝 펑션을 이용한 프로그램을 사용해 보자.

'싱글 스텝 펑션' 이게 뭐냐면 디버깅 화면에서 '한줄씩 실행'하는 기능을 말한다.

ABAP Debugger 화면 상단의 4개 버튼 중 맨 왼쪽에 있는 버튼이고 단축키는 'F5'이다.


위의 기능을 이용해 프로그램을 한줄씩 실행해보자.

'SAPBC400WBS_GETTING_STARTED'으로 가서 'F8'


실행 되면 'Airline'에 'LH'입력, 상단 명령 입력줄에 '/h'입력후 엔터.


하단 상대표시줄에 'Debugging switched on'메세지 확인 후 실행(F8).


실행 하면 디버깅 모드로 들어간다.

좌측 라인번호가 표시된 곳에 보면 노란 화살표가 있다. 이 화살표는 현재 프로그램의 어느 부분을 실행하고 있는지 알려준다.

상단 버튼   중에서 맨 좌측 버튼 'Single Step(F5)'버튼을 누른다.


그러면 다음 줄이 실행된다. 변수 선언 하는 부분은 실행은 되지만 화살표가 멈추진 않는다. 현재 Select Statement 실행중이다.


또 한번 'F5'를 눌러보자.

Select 구문 밑에 있는 IF문을 실행하고 있다.


이렇게 한줄씩 실행해보도록 하자.


'Task 1:' 은 모두 해보았고 'Task 2:'를 해보도록 하자.


Task 2:

필드 컨텐츠를 분석해보자

'필드 컨텐츠'를 분석한다는 것은 해당 필드(변수)에 어떤 값이 들어왔다 나갔다 하는지 살펴 보라는 뜻이다. 소스코드와 Debugger를 이용해 하나씩 살펴 보자.


1.'WA_SCARR' 스트럭쳐의 어떤 필드가 'SELECT' 구문에서 사용되었는가? 이 구문 뒤에 나오는 시스템 필드'SY-SUBRC'의 값은 무엇인가?

소스코드 13번째 줄을 보면 Select 구문이 있다. 


SELECT SINGLE FROM scarr INTO wa_scarr
                WHERE carrid pa_car.

위에 구문이다. 어떤 필드를 선택하는지 한번 살펴보자. 'SELECT SINGLE * ' 라고 되어있다. '*'이므로 모든 필드를 선택한다.

Select구문 뒤에 나오는 '시스템 필드' 'SY-SUBRC'값을 확인 해보자.

일단 '시스템 필드'가 뭐냐면 ABAP 프로그램 내에서 현재 프로그램의 상태나 시스템의 상태 등의 정보가 저장된 '변수'이다. '시스템 필드'는 SAP 시스템이 자동으로 처리해준다.

'시스템 필드'에 대해 알아보았으니 'SY-SUBRC'값을 확인하기 위해 ABAP Debugger로 들어가보자.


ABAP Debugger로 들어오는 방법은 앞에서 한번 언급 했으니 바로 ABAP Debugger화면을 보도록 하자.



2.어떻게 'WA_SCARR' 스트럭쳐의 필드들이 'SBC400_CARRIER'스트럭쳐로 복사되는지 확인해보자, 어떤 필드 값이 복사 되는가?


3.ABAP 구문 'CALL SCREEN 100'은 100번 스크린을 처리한다. 스크린 필드의 '테크니컬 네임'은 무엇인가?


4.화면에서 사용자 이름, 날짜, 시간에 특정 값을 입력하고 실행 해보자.

프로그램 내부에 선언된 어떤 데이터 오브젝트가 리스트 화면에 출력되는가?

그 값은 무엇인가?





나머지는 다음에 쓰도록 할게 그럼 이만 ~'''










댓글을 달아 주세요

  1. gy 2016.08.08 15:26 신고

    뒷 부분에 이어지는 내용에 대한 포스팅을 찾아봐도 없네요 ㅠ

    혹시 정리해놓으신게 있으시면 올려주시면 감사하겠습니다.