본문 바로가기
ABAP

Tabstrip

by clode 2023. 2. 14.
728x90
반응형
  • Tabstrip은 두 개 이상의 스크린 오브젝트로 구성되어 있고, 각각의 Tab 페이지는 하나의 Tab Title과 Page 영역으로 이루어진다.

  • 사용자가 Tab Title을 선택할 때마다 PAI 이벤트가 호출되므로 Application Sever 측면에서는 비효율적이지만 Input Check가 현재의 Tab Page에서만 수행되는 장점이 있어 데이터 수정이 필요한 온라인 프로그램에 적합하다.

  • 만드는법
    1) 스크린에 Tab Area 영역과 Tab Title 을 정의한다.
    2) 각 Tab Title 에 Sub screen 영역을 할당한다.
    3) 스크린 Flow Logic을 프로그래밍한다.
    4) ABAP Processing Logic을 프로그래밍한다.

실습

화면 100에 TAPSTRIP으로 두개의 탭을 만들어준다. 첫번째 탭에는 테이블 컨트롤으로 SFLIGHT 테이블의 필드들을 가져온다.

두번째 탭에는 SCARR 테이블의 항공사 필드를 가져온다. 탐색 도움말도 달아준다.

탐색도움말에서 값을 선택했을때 입력필드에도 반영되게 한다.

[프로그램 로직]

<TOP>

DATA: ok_code TYPE sy-ucomm.

DATA: gt_sflight TYPE TABLE OF sflight,
          gs_sflight TYPE sflight,
          gt_book TYPE TABLE OF sbook,
          gs_book TYPE sbook,
          number TYPE sy-dynnr. 
                  "시스템이 가지고 있는 화면번호, TABSTRIP의 탭 번호를 담을 변수 

CONTROLS ts1 TYPE TABSTRIP.

CONTROLS CONT1 TYPE TABLEVIEW USING SCREEN 0101.
            "서브스크린 101에 담아줄 테이블 컨트롤

<화면 100>

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
    CALL SUBSCREEN SUB1 INCLUDING SY-REPID number. "='MZS1D11_07''
    CALL SUBSCREEN SUB2 INCLUDING SY-REPID number. "=101, 102

PROCESS AFTER INPUT.
 MODULE EXIT AT EXIT-COMMAND.
   CALL SUBSCREEN SUB1. "SUBSCREEN 버튼 제어
   CALL SUBSCREEN SUB2.
 MODULE USER_COMMAND_0100.

<서브화면 101>

PROCESS BEFORE OUTPUT.
    MODULE select_0100.
 LOOP AT gt_sflight INTO sflight WITH CONTROL CONT1. "테이블컨트롤에 어떤거 담을건지
 ENDLOOP.

PROCESS AFTER INPUT.
   LOOP AT gt_sflight. "값 변경시 어떤값 변경했는지
   ENDLOOP.

<서브화면 102>

PROCESS BEFORE OUTPUT.

PROCESS AFTER INPUT.

PROCESS ON VALUE-REQUEST. " 값에 대한 요청이 왔을때 HELP
FIELD SCARR-CARRID MODULE CREATE_DROPDOWN_BOX. "코딩으로 드롭박스

<PBO>

MODULE status_0100 OUTPUT.
  SET PF-STATUS 'S200'.
  SET TITLEBAR 'S200'.

  CASE ts1-activetab. "현재 활성화된 탭이 어떤거냐
     WHEN 'TAB1'.
       number = '0101'. "관련 화면 번호
     WHEN 'TAB2'.
       number = '0102'.
      WHEN OTHERS.
       ts1-activetab = 'TAB1'.
       number = '0101'.
   ENDCASE.

ENDMODULE.


MODULE select_0100 OUTPUT.
  SELECT * FROM sflight
    INTO TABLE gt_sflight
    UP TO 10 ROWS.
ENDMODULE.

<PAI>

MODULE exit INPUT.
   CASE ok_code.
    WHEN 'EXIT' OR 'CANC'.
      LEAVE PROGRAM.
   ENDCASE.
ENDMODULE.


MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'TAB1'.
      ts1-activetab = 'TAB1'.
      number = '0101'.
    WHEN 'TAB2'.
      ts1-activetab = 'TAB2'.
      number = '0102'.
  ENDCASE.
ENDMODULE.



MODULE create_dropdown_box INPUT.

   DATA: BEGIN OF ls_vtab,
             carrid TYPE scarr-carrid,
             carrname TYPE scarr-carrname,
             END OF ls_vtab,
             lt_vtab LIKE TABLE OF ls_vtab, "
             ls_rtab TYPE ddshretval, "F4펑션, return_tab에 넣을 변수명
             lt_rtab TYPE TABLE OF ddshretval, "F4리스트 담아줄 인터널 테이블
             ls_dyn TYPE dynpread, "값 갱신펑션, dynpfields에 넣을 변수명
             lt_dyn TYPE TABLE OF dynpread.  "선택한 값 반환받을 인터널 테이블

*F4 도움말에 뿌려줄 내용 SELECT
   SELECT * FROM scarr
     INTO CORRESPONDING FIELDS OF TABLE lt_vtab.


*  탐색도움말, INT 참조한 필드에 F4로 POSSIBLE ENTRY 만들어주는 펑션 
*  F4에 인터널테이블(LT_VTAB)내용 출력, F4에서 선택한 값 반환(LT_RTAB)
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield               = 'CARRID' "참조필드명
     DYNPPROG               = sy-cprog
     DYNPNR                 = sy-dynnr
     DYNPROFIELD            = 'SCARR-CARRID ' "화면필드명
     STEPL                  = 0
     value_org              = 'S' "C:반환을cell로, S:반환을 구조로
    TABLES
      value_tab              = lt_vtab
     return_tab             = lt_rtab.

   READ TABLE lt_rtab INTO ls_rtab INDEX 1. "선택한 값이 있는 1번째 라인 읽음
   IF sy-subrc = 0.

  CLEAR lt_dyn.

    ls_dyn-fieldname = ls_rtab-retfield.  "화면에 갱신해 줄 필드명
    ls_dyn-fieldvalue = ls_rtab-fieldval.  "갱신할 필드의 값
    APPEND ls_dyn TO lt_dyn.
    CLEAR ls_dyn.

*  F4 도움말에서 클릭한 값 필드에 가져오는 펑션, 화면값 갱신하는 펑션
CALL FUNCTION 'DYNP_VALUES_UPDATE'
  EXPORTING
    dyname                     = sy-cprog "해당 프로그램 명
    dynumb                     = sy-dynnr "해당 화면번호 명
  TABLES
    dynpfields                 = lt_dYN."업데이트할 필드 INT형태로 넘겨준다

  ENDIF.

ENDMODULE.
728x90
반응형

'ABAP' 카테고리의 다른 글

RFC 2  (0) 2023.02.14
RFC 1  (0) 2023.02.14
Table control  (0) 2023.02.14
Module-pool 6 (Subscreen, table control)  (0) 2023.02.14
Module-pool 5 (변경/생성)  (0) 2023.02.14

댓글