SAP ABAP day4

gununoo·2024년 8월 8일
0

SAP ABAP 

목록 보기
4/5

unit 7

SELECT-OPTIONS FOR

TABLES: scarr. " DATA: scarr TYPE scarr와 같음.
SELECT-OPTIONS: so_carr FOR scarr-carrid. 
" data object: field급이 나와야 함. so_carr: header line을 가진 internal table

SELECT *
  FROM spfli
  INTO TABLE @DATA(it1)
  WHERE carrid IN @so_carr.

cl_demo_output=>display( it1 ).




  • sign
    • I: include
    • E: exclude
  • option
    • EQ: equal
    • BT: between
  • low
  • high

  • 예제 2: selection-option 추가
TABLES: spfli.  
SELECT-OPTIONS: so_carr FOR spfli-carrid,
                so_conn FOR spfli-connid.
" so_carr, so_conn: header line을 가진 internal table  

SELECT *
  FROM spfli
  INTO TABLE @DATA(it1)
  WHERE carrid IN @so_carr
    AND connid IN @so_conn.

cl_demo_output=>display( it1 ).


INITIALIZATION, START-OF-SELECTION

  • 예제 3: 오늘 날짜
TABLES: spfli. " DATA: scarr TYPE scarr와 같음.
PARAMETERS: pa_date type sy-datum.
SELECT-OPTIONS: so_carr FOR spfli-carrid,
  so_conn FOR spfli-connid.

INITIALIZATION.
  pa_date = sy-datum.

START-OF-SELECTION.
  SELECT *
    FROM spfli
    INTO TABLE @DATA(it1)
    WHERE carrid IN @so_carr
      AND connid IN @so_conn.

  cl_demo_output=>display( it1 ).

initialization이 있으면 반드시 START-OF-SELECTION이 있어야 함.
initialization의 범위가 정해짐

  • 예제 4: 금월 첫째날
INITIALIZATION.
  pa_date = sy-datum.
  pa_date+6(2) = '01'. 

  • 예제 5: 전월 마지막 날
INITIALIZATION.
  pa_date = sy-datum.
  pa_date+6(2) = '01'.
  pa_date = pa_date - 1.

AT SELECTION-SCREEN

  1. PBO -> 화면
  2. PAI -> PBO -> 화면
  • 예제
TABLES: spfli. " DATA: scarr TYPE scarr와 같음.
PARAMETERS: pa_date TYPE sy-datum.

SELECT-OPTIONS: so_carr FOR spfli-carrid,
  so_conn FOR spfli-connid.

INITIALIZATION.
  pa_date = sy-datum.
  pa_date+6(2) = '01'.
  pa_date = pa_date - 1.

AT SELECTION-SCREEN. " 실제 스크인의 PAI. Enter 누르면 호출됨 
  pa_date = sy-datum.

  IF sy-uname <> 'TRAIN-03'.
    MESSAGE e002(zt_msg_03) WITH sy-uname.
  ENDIF.

START-OF-SELECTION.
  SELECT *
    FROM spfli
    INTO TABLE @DATA(it1)
    WHERE carrid IN @so_carr
      AND connid IN @so_conn.

  cl_demo_output=>display( it1 ).
  • AT SELECTION-SCREEN: 사용자가 입력을 완료한 후 호출되어, 입력값에 대한 검증이나 추가 처리를 수행합니다.
  • PAI 이벤트와의 관계: AT SELECTION-SCREENPAI 이벤트의 일부로, PAI 처리 후에 입력 데이터의 검증을 추가로 처리하는 데 사용됩니다.

message types

  • 종류
    • A (Abap Message): 프로그램을 중지하고 오류를 강제합니다.
      • termination (Roll-back)
    • E (Error Message): 오류를 경고하지만 프로그램은 계속 실행됩니다.
    • W (Warning Message): 경고를 표시하고 사용자에게 주의를 환기시킵니다.
    • I (Information Message): 정보를 제공하고 프로그램 실행에는 영향이 없습니다.
    • S (Success Message): 작업의 성공을 알립니다.
    • X (Exit Message): 메시지와 함께 프로그램을 종료합니다.
      • short dump (Roll-back)

  • runtime error 내역 보는 법
    st22 > today
    message type A는 안 뜨지만, X는 뜬다


unit 8: screens

  • 모듈풀 동의어들
    • M type program
    • module pool prog
    • dialog prog
    • transaction prog
    • dialog trnsaction prog

Module Pool

  • t-code 생성

  • ok-code
  • module user_command_0100

  • screen 0100

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
 MODULE fill_scarr. " 데이터 처리는 PBO에 넣기

PROCESS AFTER INPUT.
 MODULE USER_COMMAND_0100.
  • screen 0200
PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
 MODULE fill_spfli. 

PROCESS AFTER INPUT.
 MODULE USER_COMMAND_0100.
  • master program
REPORT zt_03_screen.

TABLES: scarr, spfli.
DATA: ok_code TYPE sy-ucomm.

START-OF-SELECTION.
  CALL SCREEN 100.


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'GO'.
      CALL SCREEN 200.
  ENDCASE.
ENDMODULE.


*&---------------------------------------------------------------------*
*&      Module  FILL_SCARR  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE fill_scarr OUTPUT.
  select single *
    from scarr
   where carrid = scarr-carrid.
ENDMODULE.


*&---------------------------------------------------------------------*
*&      Module  FILL_SPFLI  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE fill_spfli OUTPUT.
  select single *
    from spfli
   where carrid = scarr-carrid.
ENDMODULE.
  • 결과

unit 9: SAP List Viewer

SALV

  • 예제
select *
  from spfli
  into table @DATA(it1).

cl_salv_table=>factory(
  IMPORTING
    r_salv_table   = DATA(GO_ALV)
  CHANGING
    t_table        = it1
).

go_alv->display( ).


ALV

  1. custom area
  2. custom container control <==> container instance (cl_gui_custom_container)
  3. sap grid control <==> grid instance (cl_gui_alv_grid)
  • custom area: 화면에서 ALV 그리드와 같은 컴포넌트를 배치할 수 있는 공간입니다.
  • cl_gui_custom_container: 화면에 사용자 정의 컨테이너를 생성합니다. 이 컨테이너는 ALV Grid와 같은 컴포넌트를 포함할 공간을 제공합니다.
  • cl_gui_alv_grid: ALV Grid를 생성하고, 데이터 표시 및 조작을 지원합니다. 데이터의 구조와 내용을 ALV Grid에 설정하고 표시합니다.

  • custom control > custom_area_1 생성
  • screen 100
PROCESS BEFORE OUTPUT.
  MODULE create_object.

PROCESS AFTER INPUT.
  MODULE user_command.
  • screen 200
PROCESS BEFORE OUTPUT.
  MODULE create_object.

PROCESS AFTER INPUT.
  MODULE user_command.
  • master program
REPORT zt_03_alv.

DATA: ok_code TYPE sy-ucomm.
DATA: go_container TYPE REF TO cl_gui_custom_container,
      go_alv_grid  TYPE REF TO cl_gui_alv_grid.

START-OF-SELECTION.
  CALL SCREEN 200.


*&---------------------------------------------------------------------*
*&      Module  CREATE_OBJECT  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE create_object OUTPUT.
  IF go_container IS INITIAL.
    CREATE OBJECT go_container
      EXPORTING
        container_name = 'CONTROL_AREA_1'.

    CREATE OBJECT go_alv_grid
      EXPORTING
        i_parent = go_container.

    CASE sy-dynnr.
      WHEN '0100'.
        SELECT * FROM scarr INTO TABLE @DATA(it_scarr).

        go_alv_grid->set_table_for_first_display(
          EXPORTING
            i_structure_name              = 'SCARR'
          CHANGING
            it_outtab                     = it_scarr
        ).
        
      WHEN '0200'.
        SELECT * FROM spfli INTO TABLE @DATA(it_spfli).

        go_alv_grid->set_table_for_first_display(
          EXPORTING
            i_structure_name              = 'SPFLI'
          CHANGING
            it_outtab                     = it_spfli
        ).
    ENDCASE.
  ELSE.
    go_alv_grid->refresh_table_display( ).
  ENDIF.
ENDMODULE.


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command INPUT.
  CASE ok_code.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.
  • 결과
    • call screen 100으로 할 때: scarr 출력
    • call screen 200으로 할 때: spfli 출력
  • go_container: ALV Grid를 표시할 컨테이너 객체를 참조하는 변수입니다.
  • go_alv_grid: ALV Grid 객체를 참조하는 변수입니다.

기타

  • alv display 해두면 좋은 설정

unit 10: web dynpro

  • sicf
profile
take a look

0개의 댓글