[SAP] ABAP Subscreen (1) ๊ตฌ์กฐ์ ๊ธฐ๋ณธ ๊ฐ๋ / ์ ์ Subscreen ํธ์ถ ๋ฐฉ์ (๊ณ ์ ๋ ์๋ธ์คํฌ๋ฆฐ) ๊ตฌํํ๊ธฐ
SAP GUI์์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ํ๊ณ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ค์ํ UI ๊ธฐ์ ์ด ํ์ฉ๋ฉ๋๋ค. ๊ทธ์ค Subscreen์ ๋ฉ์ธ ํ๋ฉด ๋ด์ ์์ ํ๋ฉด์ ์ฝ์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ฑฐ๋ ์ ๋ ฅ๋ฐ์ ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์ ์ Subscreen์ ํ์ฉํ์ฌ ํ๋์ ํ๋ฉด์ ์๋ธ์คํฌ๋ฆฐ์ ๋จ์ํ ์ฝ์ ํ๋ ์ผ์ด์ค๋ฅผ ์ค์ฌ์ผ๋ก ABAP ๋ค์ด์ผ๋ก๊ทธ ํ๋ก๊ทธ๋๋ฐ์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์ค๋ช ํ๊ฒ ์ต๋๋ค.
โ Subscreen์ด๋?
Subscreen(์๋ธ์คํฌ๋ฆฐ)์ SAP ABAP ๋ค์ด์ผ๋ก๊ทธ ํ๋ก๊ทธ๋๋ฐ์์ ๋ฉ์ธ ํ๋ฉด(Screen 100) ๋ด์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ํ ์ ์๋๋ก ์ค๊ณ๋ ์์ ํ๋ฉด์ ๋๋ค. ์๋ธ์คํฌ๋ฆฐ์ ๋จ๋ ์ผ๋ก ์คํ๋์ง ์๊ณ ๋ฐ๋์ ๋ฉ์ธ ์คํฌ๋ฆฐ ๋ด์์ ํธ์ถ๋์ด์ผ ํ๋ฉฐ, ๋ณ๋์ PBO/PAI(Process Before Output / Process After Input) ๋ก์ง์ ๊ฐ์ง ์ ์์ต๋๋ค.
โ Subscreen์ ํน์ง
- ๋ฉ์ธ ์คํฌ๋ฆฐ ๋ด์์ ๋ณ๋๋ก ๋์ํ์ง๋ง, ๋ถ๋ชจ ์คํฌ๋ฆฐ์ ์ข ์๋จ.
- ๋ ๋ฆฝ์ ์ธ PBO(Process Before Output) / PAI(Process After Input) ๋ก์ง์ ๊ฐ์ง.
- ๋ฐ์ดํฐ๋ฅผ ๋ค์ํ ํํ๋ก ํ์ํ ์ ์์ (์: ์ฌ์ฉ์ ์ ๋ ฅ, ์กฐํ ๊ฒฐ๊ณผ ํ์ ๋ฑ).
- ๋ฉ์ธ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ฉฐ, ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ Subscreen์ ๋์ ์ผ๋ก ํธ์ถ ๊ฐ๋ฅ.
- OK_CODE ๋ฐ Application Toolbar๋ ๋ถ๋ชจ ์คํฌ๋ฆฐ์์ ์ ์ด๋จ (โ๏ธ์๋ธ์คํฌ๋ฆฐ์์ ์ง์ ์ค์ ๋ถ๊ฐ).
๐ ๏ธ Subscreen์ด ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ์์
- SAP ํ์ค ํธ๋์ญ์ ์์ ํ๋จ์ ์์นํ ํญ(Tab) ์์ญ → ์: ME21N์ ํญ๋ชฉ ์ ๋ ฅ ์์ญ
- ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ํ์๋๋ ์ ๋ ฅ ํ๋ ๊ทธ๋ฃน → ์: ๊ณ ๊ฐ ์ ๋ณด ์ ๋ ฅ ์ ‘๊ธฐ์ ๊ณ ๊ฐ’๊ณผ ‘๊ฐ์ธ ๊ณ ๊ฐ’์ ๋ฐ๋ผ ๋ค๋ฅธ ์ ๋ ฅ ํ๋ ์ ๊ณต
- ๋์ UI ๊ตฌ์ฑ → ์: ํน์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ถ๊ฐ ์ ๋ณด ์์ญ์ด ๋ํ๋๋ ๊ฒฝ์ฐ
๐ฏ ์ ์ Subscreen ํธ์ถ ๋ฐฉ์ – ๊ณ ์ ๋ ์๋ธ์คํฌ๋ฆฐ ์ฐ๊ฒฐํ๊ธฐ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ Subscreen ์ฌ์ฉ ๋ฐฉ์์, ๋ถ๋ชจ ํ๋ฉด์์ ํญ์ ๋์ผํ ์๋ธ์คํฌ๋ฆฐ์ ๊ณ ์ ์ ์ผ๋ก ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ๋ฐฉ์์ ๊ตฌ์กฐ๊ฐ ๋จ์ํ๊ณ ์ดํดํ๊ธฐ ์ฌ์์ Subscreen ๊ฐ๋ ์ ์ฒ์ ๋ฐฐ์ฐ๋ ์ฌ๋์๊ฒ ์ ํฉํฉ๋๋ค.
ํญ์ฒ๋ผ ๋ณต์กํ ๊ตฌ์กฐ ์์ด, ํ๋์ ํ๋ฉด์ ์๋ธ์คํฌ๋ฆฐ์ ๋จ์ํ ์ฝ์
ํ๋ ํ์์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ํ๋ฉด ์ ํ์ด ํ์ํ์ง ์์ ์ํฉ์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
SAP GUI์์ ์์ฃผ ๋ณผ ์ ์๋ ๊ธฐ๋ณธ ์ ๋ณด ์น์
์ด๋ ์กฐํ ๊ฒฐ๊ณผ ์์ฝ ๊ฐ์ UI ์์์ ์ ํฉํฉ๋๋ค.
1. Subscreen ์ค๊ณํ๊ธฐ
- Screen 100: ์กฐํ ๋ฒํผ์ ๋๋ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์
- Screen 200: ๊ฒ์๋ ๋ฐ์ดํฐ ํ์
- Subscreen 0201: ํญ๊ณต์ฌ ์ ๋ณด ํ์
์ฌ์ฉ์๊ฐ ์กฐํ ๋ฒํผ์ ๋๋ฅด๋ฉด ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ์ธ ํ๋ฉด(Screen 200)์ ํ์๋๋ฉฐ, ๋์์ Subscreen์ ํตํด ํญ๊ณต์ฌ ์ ๋ณด๋ ํ์๋ฉ๋๋ค.
2. Subscreen ๊ตฌํํ๊ธฐ
๐ ๋ฐ์ดํฐ ์ค๋น - TABLES ์ฌ์ฉ
SCARR ํ ์ด๋ธ์์ ํญ๊ณต์ฌ ์ ๋ณด๋ฅผ ์กฐํํ๊ธฐ ์ํด TABLES์ ์ ์ธํฉ๋๋ค.
โถ ๋ฐ์ดํฐ ์กฐํ ๋ชจ๋ (Screen 100)
XXXXXTOP
TABLES SCARR.
โ TABLES SCARR๋ฅผ ์ ์ธํ๋ฉด SCARR ๋ณ์๋ฅผ ๋ณ๋๋ก ์ ์ธํ์ง ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, SELECT SINGLE * INTO SCARR ๊ตฌ๋ฌธ์์ SCARR ๊ตฌ์กฐ์ฒด๋ฅผ ์๋์ผ๋ก ๋งคํํ ์ ์์ต๋๋ค.
โ HEADER LINE ์๋ ์ธํฐ๋ ํ ์ด๋ธ์ ์ด๋ฆ์ด ๋์ผํ๋ฉด ๋ณ์ ์ด๋ฆ๊ณผ ๊ตฌ์กฐ = ํ ์ด๋ธ ์ด๋ฆ๊ณผ ๊ตฌ์กฐ๋ผ๋ ํน์ง์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์๋ต์ด ๊ฐ๋ฅํ๊ณ ๋ณ์๊ฐ TABLES๋ก ์ ์ธ๋๋์ง ํ์ธํด๋ด์ผํฉ๋๋ค.
XXXXXI01 (PAI)
MODULE user_command_0100 INPUT.
SELECT SINGLE *
FROM SCARR
INTO SCARR
WHERE CARRID = SDYN_CONN-CARRID.
ENDMODULE.
โถ ๋ฐ์ดํฐ ํ์ ๋ชจ๋ (Screen 200)
โ๏ธ Tables์ ์ ๋ด๊ธฐ๋์ง ํ์ธํฉ๋๋ค. (SCARR - Get from Dictonary)
3. Subscreen Area ์์ฑํ๊ธฐ
Screen 200์์ Subscreen Area๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ํฉ๋๋ค.
โ๏ธ ์ข์ธก ํด๋ฐ์ Subscreen Area๋ฅผ ํ์ฉํฉ๋๋ค.
โ๏ธ Subscreen ์ด๋ฆ์ ๋ณดํต SUB๋ก ์ค์ ํฉ๋๋ค.
โ๏ธ ์คํฌ๋ฆฐ 201 ์์ฑ (๋ถ๋ชจ ์คํฌ๋ฆฐ์ ์์ฑ์ ์์๋ฐ์)
โถ Screen 201
- Without Application Toolbar ์ค์
- OK_CODE ์ค์ ๋ถ๊ฐ (๋ถ๋ชจ์์ ์์๋ฐ์)
โ๏ธ Subscreen์ ์ผ์ชฝ ์๋จ์ ๋ฐฐ์น
๐ ์คํฌ๋ฆฐ ๋ฐฐ์น ์ฃผ์์ฌํญ
- ์๋ธ์คํฌ๋ฆฐ์ ์ผ์ชฝ ์๋จ์ ๋ฐฐ์นํ๋ ๊ฒ์ด SAP ๊ธฐ๋ณธ ๊ท์น.
- Subscreen Area๋ฅผ ์ด์ฉํ์ฌ ํน์ ๋ฐ์ดํฐ(ํญ๊ณต์ฌ ์ ๋ณด)๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ.
4. Subscreen ์ ์ธ ๋ฌธ๋ฒ
1๏ธโฃ ๋ช ํํ ํ๋ก๊ทธ๋จ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ
PROCESS BEFORE OUTPUT.
CALL SUBSCREEN 'SUBAREA'
INCLUDING 'PROGRAM_NAME' 'DYNPRO_NUMBERS'
PROCESS AFTER INPUT.
CALL SUBSCREEN 'SUBAREA'
- ํน์ ํ๋ก๊ทธ๋จ(PROGRAM_NAME)๊ณผ ํ๋ฉด ๋ฒํธ(DYNPRO_NUMBERS)๋ฅผ ๋ช ํํ๊ฒ ์ง์ ํ๋ ๋ฐฉ์์ ๋๋ค.
- ์ฅ์ : ๊ฐ์ฅ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ด๋ฉฐ, ํ๋ก๊ทธ๋จ๊ณผ ํ๋ฉด์ ๋ช ํํ๊ฒ ์ ์ํ ์ ์์ต๋๋ค.
- ์ฃผ์ํ ์ : ํ๋ก๊ทธ๋จ๋ช ์ด ํ๋์ฝ๋ฉ๋์ด ์์ด ์ ์ง๋ณด์ ์ ํ๋ก๊ทธ๋จ ๋ณ๊ฒฝ์ด ํ์ํ ์ ์์ต๋๋ค.
โ๏ธ PAI์์ CALL SUBSCREEN์ ์ฌ์ฉํ๋ ์ด์
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๋ ค๋ฉด PAI์์๋ ๋ช ์์ ์ผ๋ก ํธ์ถํด์ผ ํจ.
- Display ๋ชจ๋์์๋ ์๋ต ๊ฐ๋ฅํ์ง๋ง, ์ ๋ ฅ ๊ฐ์ ๋ฐ์ํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฐ๋์ ํ์.
- ์ต๊ด์ ์ผ๋ก PAI์ CALL SUBSCREEN์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด ์ข์ ์ฝ๋ ์คํ์ผ.
2๏ธโฃ ์์คํ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
CALL SUBSCREEN SUB INCLUDING SY-CPROG 'DYNPRO_NUMBERS'.
- SY-CPROG(ํ์ฌ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์ด๋ฆ)์ ํ์ฉํ์ฌ SUBSCREEN์ ํธ์ถํ๋ ๋ฐฉ์์ ๋๋ค.
- ์ฅ์ : ํ์ฌ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์ด๋ฆ์ ์๋์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ์์ ํ ํ์๊ฐ ์์ต๋๋ค.
- ์ฃผ์ํ ์ : ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ด ์๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ SUBSCREEN์ ํธ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ, ๋ช ํํ ํ๋ก๊ทธ๋จ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ(1๋ฒ)์ด ํ์ํ ์ ์์ต๋๋ค.
3๏ธโฃ ๊ธ๋ก๋ฒ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
CALL SUBSCREEN SUB INCLUDING SY-CPROG GV_DYNNR.
- ๊ธ๋ก๋ฒ ๋ณ์(GV_DYNNR)๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก SUBSCREEN์ ์ค์ ํ๋ ๋ฐฉ์์ ๋๋ค.
- ์ฃผ์ํ ์ :
- ๊ธ๋ก๋ฒ ๋ณ์๋ ์๋์ผ๋ก ์ด๊ธฐํ๋์ง ์์ผ๋ฏ๋ก ๊ฐ์ด ๋ฐ๋์ ์ฑ์์ ธ ์์ด์ผ ํฉ๋๋ค.
- ๋ง์ฝ GV_DYNNR์ ๊ฐ์ด ์ค์ ๋์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ธ '0000'์ด ์ค์ ๋๋ฉฐ, ์กด์ฌํ์ง ์๋ ํ๋ฉด ๋ฒํธ๋ก ์ธํด ๋คํ(DUMP)๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋ฐ๋ผ์ ๊ธ๋ก๋ฒ ๋ณ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ๋์ ์ด๊ธฐ๊ฐ์ ์ค์ ํด์ผ ํฉ๋๋ค.
๊ธ๋ก๋ฒ ๋ณ์ ์ฌ์ฉ ์์
DATA GV_DYNNR TYPE SY-DYNNR VALUE '0201'.
- GV_DYNNR ๋ณ์๋ SUBSCREEN ํธ์ถ์ ์ํ ํ๋ฉด ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ์ญํ ์ ํฉ๋๋ค.
- ์ด๊ธฐ๊ฐ ์ค์ (VALUE '0201'): ์ด๊ธฐ๊ฐ์ ์ค์ ํ์ง ์์ผ๋ฉด '0000'์ด ํ ๋น๋์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
5. Subscreen ์ฐ๊ฒฐํ๊ธฐ
Subscreen์ ๋ฉ์ธ ์คํฌ๋ฆฐ์ ์ฐ๊ฒฐํ๋ ค๋ฉด CALL SUBSCREEN ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
โถ Screen 200
PROCESS BEFORE OUTPUT.
MODULE STATUS_0200.
MODULE MODIFY_SCREEN.
MODULE SET_ICON.
CALL SUBSCREEN SUB INCLUDING 'SAPMZCARRIER1_07' '201'. " CALL SUBSCREEN PBO "
PROCESS AFTER INPUT.
CALL SUBSCREEN SUB. " CALL SUBSCREEN PAI "
MODULE USER_COMMAND_0200.
โ CALL SUBSCREEN๋ ์ผ๋ฐ์ ์ผ๋ก PBO๋ ์๋์ชฝ์ PAI๋ ์์ชฝ์ ์ ์ธํฉ๋๋ค.
๐ PBO & PAI ์คํ ํ๋ฆ
- PBO์์ CALL SUBSCREEN์ ํธ์ถํ๋ฉด ํด๋น Subscreen์ PBO๊ฐ ์คํ๋จ → ๋ถ๋ชจ ์คํฌ๋ฆฐ์ผ๋ก ๋์๊ฐ.
- PAI์์ CALL SUBSCREEN์ ํธ์ถํ๋ฉด ์๋ธ์คํฌ๋ฆฐ์ PAI๊ฐ ์คํ๋จ → ๋ถ๋ชจ ์คํฌ๋ฆฐ์ PAI๋ก ๋์๊ฐ.
6. T์ฝ๋๋ฅผ ํตํด ์๋ ํ์ธํ๊ธฐ