처음에는 잘 정리해서 기록해 놔야지로 시작했는데 의미가 없는 거라 생각이 듭니다.ㅠㅠ
많은 분들이 이미 초보부터 중급까지 잘 정리된 곳이 많네요~
그래도 시작은 했으니 종료는 짓겠습니다.
PBO, PAI은 ABAP을 하시면 대략적으로 다 아실거라 생각합니다.
간단한 설명과 프로그램 흐름 도식화를 참고하시면 됩니다.
1. PBO (Process Before Output)
🔹 정의
화면이 출력되기 전에 실행되는 로직입니다.
즉, SAP가 화면을 그리기 전에 PBO 모듈에 정의된 로직을 먼저 실행합니다.
🔹 주요 목적
- 초기화 (변수 세팅)
- 화면 필드 값 설정 (screen-name, screen-input, screen-invisible 등)
- ALV/Grid 생성
- 컨트롤 설정
- 타이틀바, 메뉴 설정 (SET PF-STATUS, SET TITLEBAR)
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
DATA lt_excl TYPE TABLE OF sy-ucomm.
SET PF-STATUS 'S0100' EXCLUDING lt_excl.
SET TITLEBAR 'T0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_ALV OUTPUT
*&---------------------------------------------------------------------*
MODULE set_alv OUTPUT.
IF gv_alv100 IS INITIAL.
PERFORM create_obj_dcontainer USING gv_dct100.
PERFORM create_split_container USING gv_dct100 gv_split100 gv_top100 gv_bot100.
PERFORM create_sub_split_container USING gv_bot100 gv_subsplit gv_mid100 gv_tog100.
PERFORM create_obj_grid USING gv_alv100 gv_mid100.
PERFORM event_handler_register.
PERFORM set_layout USING gs_layo.
PERFORM exclude_of_toolbar_button USING 'GT_EXCLUDE'.
PERFORM set_dyn_lvc_fcat USING gt_fcat.
PERFORM set_sort CHANGING gt_sort.
PERFORM set_display_100.
ELSE.
CALL METHOD gv_alv100->refresh_table_display
EXPORTING
is_stable = gs_stb
i_soft_refresh = ''.
ENDIF.
ENDMODULE.
2. PAI (Process After Input)
🔹 정의
사용자가 화면에서 어떤 동작(버튼 클릭, 데이터 입력 등)을 한 후 실행되는 로직입니다.
SAP는 화면을 사용자가 조작하고 [Enter]나 버튼을 누르면 PAI 모듈을 수행합니다.
🔹 주요 목적
- 사용자 입력값 유효성 검증
- 버튼 이벤트 처리 (sy-ucomm)
- 사용자 입력값을 기반으로 내부 테이블 수정/조회
- 트랜잭션 처리 (ex. 저장, 삭제, 전송)
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
MODULE exit INPUT.
CASE ok_code.
WHEN 'BACK' OR 'CANC'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
ok_code = sy-ucomm.
CASE ok_code.
WHEN 'CREATE'.
PERFORM create_sto_check.
WHEN 'REFR'.
PERFORM refresh_init.
CALL METHOD gv_alv100->refresh_table_display
EXPORTING
is_stable = VALUE lvc_s_stbl( row = abap_true col = abap_true ).
ENDCASE.
ENDMODULE.
3. CLS : 클래스 정의 영역
🔹 주요 목적
- 로컬 클래스 정의 (CLASS ... DEFINITION)
- 클래스 구현부 (CLASS ... IMPLEMENTATION)
- 주로 ALV 컨트롤 관련 클래스, 이벤트 핸들러, 또는 도메인 로직 캡슐화용 클래스 등을 정의합니다.
*----------------------------------------------------------------------*
* CLASS LCL_ALV_GRID DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.
PUBLIC SECTION.
CLASS-DATA f_alv TYPE c.
METHODS : set_fixed_column,
set_optimizer.
ENDCLASS. "LCL_ALV_GRID DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_ALV_GRID IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_alv_grid IMPLEMENTATION.
METHOD set_fixed_column.
CALL METHOD me->set_fixed_cols
EXPORTING
cols = 5.
ENDMETHOD. "SET_FIXED_COLUMN
METHOD set_optimizer.
CALL METHOD me->optimize_all_cols
EXPORTING
include_header = 1.
ENDMETHOD. "SET_OPTIMIZER
ENDCLASS. "LCL_ALV_GRID IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_HANDLER DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS : handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
METHODS : handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
METHODS : handle_after_user_command
FOR EVENT after_user_command OF cl_gui_alv_grid
IMPORTING e_ucomm .
METHODS : handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed e_onf4 e_ucomm.
METHODS : handle_data_changed_finished
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified
et_good_cells.
METHODS : handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id
e_column_id.
METHODS : handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row
e_column.
METHODS : handle_button_click
FOR EVENT button_click OF cl_gui_alv_grid
IMPORTING es_col_id
es_row_no.
METHODS : handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING sender
e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
METHODS : handle_top_of_page
FOR EVENT top_of_page OF cl_gui_alv_grid
IMPORTING e_dyndoc_id.
ENDCLASS. "(LCL_EVENT_RECEIVER DEFINITION)
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_HANDLER IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
*-- ToolBar 버튼생성
METHOD handle_toolbar.
PERFORM toolbar_pros USING e_object e_interactive.
ENDMETHOD. "handle_toolbar
*-- ToolBar에 생성된 버튼(Function)들에 대해서 처리
METHOD handle_user_command.
PERFORM user_command_pros USING e_ucomm.
ENDMETHOD. "handle_user_command
*-- Event 처리후
METHOD handle_after_user_command.
PERFORM after_user_command USING e_ucomm.
ENDMETHOD. "HANDLE_AFTER_USER_COMMAND
*-- Data change할때
METHOD handle_data_changed.
PERFORM data_changed USING er_data_changed e_onf4 e_ucomm.
ENDMETHOD. "handle_data_changed
*-- Data change한 후
METHOD handle_data_changed_finished.
PERFORM data_changed_finished USING e_modified
et_good_cells.
ENDMETHOD. "HANDLE_DATA_CHANGED_FINISHED
*-- Hotspot click
METHOD handle_hotspot_click.
PERFORM hotspot_click USING e_row_id e_column_id.
ENDMETHOD. "handle_hotspot_click
*-- Double Click
METHOD handle_double_click.
PERFORM double_click USING e_row e_column.
ENDMETHOD. "handle_double_click
*-- Button Click
METHOD handle_button_click.
PERFORM button_click USING ES_COL_ID
ES_ROW_NO.
ENDMETHOD. "handle_button_click
*-- On help f4 - Search Help
METHOD handle_onf4.
PERFORM on_f4 USING sender
e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
ENDMETHOD. "HANDLE_ONF4
*-- top of page
METHOD handle_top_of_page.
PERFORM top_of_page USING gv_header100.
ENDMETHOD. "HANDLE_TOP_OF_PAGE
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
4. F01 : FORM 루틴 구현 영역
🔹 주요 역할
- 프로그램에서 사용하는 FORM 루틴(서브루틴) 을 정의하는 영역
- 실제 비즈니스 로직, 데이터 처리, ALV 출력 준비, BAPI 호출, 검증 로직 등이 포함됨
사용된는 FROM sampleFORM get_data. SELECT 쿼리 수행, 내부 테이블 채움 FORM build_fieldcatalog. ALV 필드카탈로그 설정 FORM set_layout. ALV 레이아웃 설정 (lvc_s_layo) FORM create_po. BAPI 호출 또는 커스텀 트랜잭션 처리 FORM validate_input. 사용자 입력 검증, 오류 메시지 출력 FORM refresh_alv. refresh_table_display 호출 등 화면 갱신 처리
'ABAP' 카테고리의 다른 글
[ABAP] BAPI_PO_CREATE1(엑셀 업로드) (0) | 2025.06.28 |
---|---|
[ABAP] BAPI_PO_CREATE1을 활용한 마이그레이션용 구매오더(PO) 생성 가이드 (0) | 2025.06.24 |
[step-2] executable program templete - TOP,SEL (0) | 2025.06.23 |
[step-1] executable program templete - 프로그램 구조 (0) | 2025.06.22 |
SAP ADT 설치 – Eclipse에서 ABAP 개발 환경 만들기 (0) | 2025.06.21 |