-
[SAP OOP] Interface // Event // 송금 관리SAP 2022. 5. 19. 18:31
안녕하세요! 건양대학교 기업소프트웨어학부 학생입니다. 이번에 진행할 과정은 송금 관리입니다. 지난번에 진행했던 Interface // 잔고관리 에서 Log 저장 과정을 Event로 바꿔준 후 송금 관리에 대한 과정을 추가하였습니다.
2022.05.10 - [SAP OOP] - [SAP OOP] Interface // 잔고 관리
[SAP OOP] Interface // 잔고 관리
안녕하세요. 건양대학교 기업소프트웨어학부에 재학 중인 학생입니다! 이번에 작성할 내용은 Interface와 잔고관리 프로그램입니다. 이 Interface에 관한 내용은 김성준 선배님의 Easy ABAP 2.0 본문을
minmin98.tistory.com
이전 글일 경우 위의 링크를 참고하시면 됩니다.
하다보니 이것저것 추가해버렸습니다. OOP의 대한 이해도와 Event에 대한 성취도가 그리 높지 않으니 관대한 마음으로 봐주셨으면 감사하겠습니다.
1. Event // 잔고 관리 수정
잔고 관리에서 Log를 저장하는 부분을 이벤트로 바꿔줬습니다. Event save_log를 추가한 후 Method save에서 For Event save_log of account를 정의해주었습니다. Event가 실행될 시 Interface accout의 save method를 바라보게 됩니다.
Mofity가 성공했을 경우 Event가 실행됩니다.
save의 내용은 modify 이후 Log에 저장하는 과정을 그대로 넣어줬습니다.
Event 실행을 위해 Set Handler에 대한 부분을 추가로 작성해주었습니다. Set Handler를 통해 연결된 이벤트가 실행되게 해줍니다.
2. 송금 관리 추가
송금 관리에 대한 부분을 추가해보겠습니다. 먼저 두가지 작업을 진행해주었습니다.
ZTSAVE_03 ZTSAVE_03에 BID 부분을 한글 이름으로 바꿔주었습니다. BID를 수정해주었으므로 ZTBLOG_03의 데이터도 삭제 혹은 수정해줍니다. 또 BID 부분에 해당하는 Number Range 부분을 다시 정의해줍니다(SNRO).
ZTWIRE_03 송금 내역을 위해 ZTWIRE_03 테이블을 만들어주었습니다. 해당 테이블은 다음과 같이 이루어져있습니다.
Field Discription WDATE 송금날짜 WTIME 송금시간 TOBID 보내는 사람 FRBID 받는 사람 BALANCE 금액 ZTWIRE_03 데이터 저장을 하면 다음과 같이 저장이 됩니다. 이제 어떤식으로 코드를 작성하였는지 확인해보도록 하겠습니다.
데이터 선언 먼저 GT_WIRE과 GS_WIRE을 정의해줍니다.
이전 과정인 잔고 관리도 포함되어있는 프로그램을 작성하기 위해 Tabstrip을 사용해봅시다.
잔고 관리에서 진행했던 부분은 Subscreen 101로 정의해줍니다. 송금 관리에서 진행할 부분은 Subscreen 102로 정의해줍니다.
TAB에 해당하는 부분을 정의해줍니다. 101은 tab1에 해당하는 이름을, 102는 tab2에 해당하는 이름을 가지게 됩니다.
Initialization을 통해 각각의 탭에 대한 이름을 정의해주었습니다.
다음과 같이 탭 이름이 정의되게 됩니다.
새로운 클래스 lcl_c3를 정의해줍니다. 앞서 사용했던 것과 같이 Interface를 이용해봅시다!
이제 설정 부분입니다. Interface에 있는 Method calc를 작성해보도록 합시다. 먼저 조건 없이 SELECT 구문을 통해 Table ZTSAVE_03의 데이터들을 GT_LIST에 넣어주도록 합니다. 인터널 테이블인 GT_LIST는 ZTSAVE_03의 데이터와 같은 값을 가지고 있게 됩니다.
Read Table을 통해 gt_list에서 필드 bid가 pa_to(보내는 사람)에 해당하는 부분을 찾은 후 gs_list에 넣어줍니다.
만약 보내는 사람의 잔고가 송금 금액보다 낮을 경우 메세지를 띄어주도록 합니다.
또 보내는 사람, 받는 사람의 정보와 보내는 사람의 현재 잔고 금액이 얼마인지 알려줍니다.
보내는 사람의 잔고가 보낼 금액보다 높을 경우의 코드를 작성해줍니다.
현재 gs_list에는 보내는 사람의 잔고 정보가 들어가 있습니다. iv_bal(송금 금액) 을 차감한 값으로 gs_list-balance의 값을 변경해줍니다.
Modify ztsave_03 from gs_list를 통해 ztsave_03의 데이터를 Modify 해줍니다.
보내는 사람의 Log를 먼저 저장해줍니다. 보내는 사람일 경우 잔고에서 돈이 빠져나가는 것이므로 bout에 iv_bal 값을 넣어주도록 합니다. 입력된 값을 ZTBLOG_03에 MODIFY 해줍니다.
Clear 작업을 시켜줍니다. 보내는 사람의 정보가 저장되어있는 gs_list, 보내는 사람의 정보가 들어가있는 gt_blog, gs_blog를 클리어해줍니다.
GT_LIST는 사용자들의 잔고에 대한 정보가 조회되어 있습니다. READ TABLE을 통해 키가 pa_fr인 데이터를 GS_LIST에 넣어줍니다. GS_LIST-BALANCE의 정보는 금액의 정보를 더해진 값으로 다시 넣어줍니다.
MODIFY를 통해 ZTSAVE_03의 데이터를 바꿔줍니다.
받는 사람의 LOG를 GS_BLOG에 입력해줍니다. 이 경우 돈이 추가로 입급되는 것이기 때문에 BGET에 IV_BAL 값을 넣어줍니다. 또 글로벌 변수인 GV_BAL에 IV_BAL 값을 넣어줍니다.
테이블 ZTBLOG_03을 GS_BLOG의 값에 따라 MODIFY시켜줍니다.
만약 MODIFY가 성공적으로 진행됐다면 ACCOUNT의 SAVE_LOG 이벤트를 발생합니다.
SAVE_LOG 이벤트일 경우 SAVE METHOD를 실행시킵니다.
GS_WIRE에 데이터를 넣어준 후 ZTWIRE_03을 MODIFY 해줍니다.
모든 결과가 진행됐다면, 먼저 누가 누구에게 얼마를 송금하였는지에 대한 메세지를 출력해줍니다.
이번에는 간단하게 WRITE와 LOOP를 통해 값을 출력해줍시다.
먼저 SELECT 구문을 통해 ZTWIRE_03에 데이터를 GT_WIRE에 담아줍니다. 보내는 사람의 거래 이체 내역을 모두 출력하기 위해 WHERE 조건을 TOBID와 FRBID를 다 보내는 사람인 PA_TO로 설정해줍니다. 겹치는 조건이 아닌 모든 조건을 가져오기 위해 OR 조건으로 설정해줍니다.
한 줄을 보내는 사람의 거래 내역이라는 메세지라 설정하고 출력합니다.
GT_WIRE를 루프를 돌려줍니다. 각 데이터들은 루프마다 GS_WIRE에 담기게 됩니다.
해당 거래 내역을 출력해줍니다.
TABSTRIP을 이용했으므로 CASE를 설정해줘야 합니다.
COMM1일 경우 TABSTRIP의 첫번째 탭입니다. 오류검증 과정을 추가해줬습니다.
각각의 PARAMETER가 빈값인 경우 거기에 맞는 메세지를 출력하고 RETURN을 통해 이후 구문들이 작동하지 않도록 해줍니다.
COMM2일 경우를 설정해줍니다. 위에 과정과 마찬가지로 오류 검증 과정을 작성해주었습니다.
만약 보내는 사람과 받는 사람이 같은 경우도 설정해줬습니다.
실행화면은 다음과 같습니다.
감사합니다.
김성준, 「Easy ABAP 2.0」, 프리렉(2012)
책정보, http://www.yes24.com/Product/Goods/7334929.
SAP Joy, http://sapjoy.co.kr/
'SAP' 카테고리의 다른 글
[SAP OOP] Global Class // Event (0) 2022.05.30 [SAP Report] ALV Event(2) // SALV (0) 2022.05.26 [SAP Report] For All Entries (0) 2022.05.18 [SAP OOP] Interface // 잔고 관리 (0) 2022.05.10 [SAP Report] ALV Event (1) (0) 2022.05.10