870 likes | 1.05k Views
SELECT-OPTIONS. SELECT-OPTIONS Syntax. T ABLES customers . S ELECT-OPTIONS id FOR customers -id . START-OF-SELECTION. SELECT-OPTIONS.
E N D
SELECT-OPTIONS Syntax TABLEScustomers. SELECT-OPTIONSidFORcustomers-id. START-OF-SELECTION.
SELECT-OPTIONS “ต้องการให้แสดงข้อมูล customers ของลูกค้าที่มีชื่อ(คอลัมน์ name) ขึ้นต้นด้วยตัว ‘M’ และลูกค้าที่ชื่อ ‘Smith’ และลูกค้าที่ชื่ออยู่ระหว่าง ‘A’ กับ ‘John’ โดยใช้คำสั่ง SELECT” SELECT * FROM customers WHERE (name LIKE ‘M%’) OR (name = ‘Smith’) OR (name BETWEEN ‘A’ AND ‘John’).
SELECT-OPTIONS TABLES customers. SELECT-OPTIONS sname FOR customers-name. START-OF-SELECTION. SELECT * FROM customers WHERE name IN sname.
Internal Structure of Select-options sname Internal Table Header Line
Internal Structure of SELECT-OPTIONS Field Value . Sign I = Include E = Exclude Option BT = Between CP = Contains Pattern EQ = Equal GT = Greater Than LT = Less Than GE = Grater Than or Equal LE = Less Than or Equal NE = Not Equal NB = Not Between
SELECT-OPTIONS sname SELECT * FROM customers WHERE (name LIKE ‘M%’) OR (name = ‘Smith’) OR (name BETWEEN ‘A’ AND ‘John’). Transform SELECT * FROM customers WHERE name IN sname.
SELECT-OPTIONS Options SELECT-OPTIONS sname FOR customers-name OBLIGATORY.
INITIALIZATION Event PARAMETERS: nextday LIKE sy-datum. INITIALIZATION. nextday = sy-datum + 1. START-OF-SELECTION. WRITE nextday.
Checking User Input TABLES customers. DATApcode_len TYPEi. PARAMETERS pcode LIKE customers-postcode. AT SELECTION-SCREEN. pcode_len = STRLEN(pcode). IF pcode_len <> 5. “ IF STRLEN( pcode ) <> 5. MESSAGE e000(38)WITH ‘Please enter postcode 5 characters’. ENDIF. START-OF-SELECTION. SELECT * FROM customers WHERE postcode = pcode. …
ABAP Program Processing Steps TABLES sflight. PARAMETERSnextdayLIKEsy-datum. INITIALIZATION. nextday = sy-datum + 1. ATSELECTION-SCREEN. IFnextday<sy-datum. MESSAGE e000(38)WITH ‘Please enter date >= today’. ENDIF. START-OF-SELECTION. SELECT * FROM sflight WHERE ... fldate = nextday… … 1 2 4 3 5
Modularization • Subroutine • Function Module
Subroutine START-OF-SELECTION. PERFORM routine1. PERFORM routine2. PERFORM routine2. FORM routine1. SELECT * FROM customers INTO TABLE tab. ENDFORM. FORM routine2. LOOP AT tab. WRITE: / tab-id,tab-name. ENDLOOP. ENDFORM. START-OF-SELECTION. SELECT * FROM customers INTO TABLE tab. LOOP AT tab. WRITE: / tab-id,tab-name. ENDLOOP. LOOP AT tab. WRITE: / tab-id,tab-name. ENDLOOP.
Modularization • Avoid redundancy • Make your program easy to read & improve their structure • Re-use Program components
Subrountine (Program Structure) REPORT ZSR2. *Data declaration TYPES: BEGIN OF strucbkpf, belnr TYPE bkpf-belnr, gjahr TYPE bkpf-gjahr , END OF strucbkpf. DATA tab TYPE TABLE OF strucbkpf with header line. *Processing block START-OF-SELECTION. PERFORM read_data. PERFORM display_data. PERFORM display_data. *&---------------------------------------------------------------------* FORM read_data. SELECT belnr gjahr INTO TABLE tab FROM bkpf WHERE blart = 'SA'. ENDFORM. *&---------------------------------------------------------------------* FORM display_data. LOOP AT tab. WRITE: / tab-belnr,tab-gjahr. ENDLOOP. ENDFORM. REPORT ZSR1. *Data declaration TYPES: BEGIN OF strucbkpf, belnr TYPE bkpf-belnr, gjahr TYPE bkpf-gjahr , END OF strucbkpf. DATA tab TYPE TABLE OF strucbkpf with header line. *Processing block START-OF-SELECTION. SELECT belnr gjahr INTO TABLE tab FROM bkpf WHERE blart = 'SA'. LOOP AT tab. WRITE: / tab-belnr,tab-gjahr. ENDLOOP. LOOP AT tab. WRITE: / tab-belnr,tab-gjahr. ENDLOOP.
Calling and Defining Subroutines REPORT ztest. * Global Data TABLES customers. DATA tmp TYPE i. * Subroutine Calls PERFORM routine1. PERFORM routine2. * Subroutine FORM routine1. DATA tmp1 TYPE p.“Local data WRITE tmp. ENDFORM. FORM routine2. DATA tmp2(10).“Local data ….. ENDFORM.
Call by Value a1 Copy f1 Memory Space(Subroutine)
Call by Value DATA: a1,a2. a1 = ‘A’. a2 = ‘A’. PERFORM routine1 USING a1 a2. .…... FORM routine1 USING VALUE(f1) VALUE(f2). f1 = ‘X’. f2 = ‘X’. ENDFORM.
Call by Reference a3 Address Passing f3 Memory Space(Subroutine)
Call by Reference DATA: a3. a3 = ‘A’. PERFORM routine2 USING a3. .…... FORM routine2 USING f3. f3 = ‘X’. ENDFORM.
Call by Value and Result a4 Copy Copy f4 Memory Space(Subroutine)
Call by Value and Result DATA: a4,a5. a4 = ‘A’. a5 = ‘A’. PERFORM routine3 USING a4 a5. .…... FORM routine3 CHANGING VALUE(f4) VALUE(f5). f4 = ‘X’. f5 = ‘X’. ENDFORM.
Passing Structure as Parameters TABLES sflight. SELECT * FROM sflight. PERFORM subproc USING sflight. ENDSELECT. FORM subproc USING rec LIKE sflight. WRITE: / rec-carrid. ENDFORM.
Passing Internal Table as Parameters DATA: tab LIKE sflight OCCURS 0 WITH HEADER LINE. … PERFORM sub TABLES tab.
Passing Internal Table as Parameters FORM sub TABLES tab1 STRUCTURE tab. LOOP AT tab1. WRITE: / tab1-carrid. ENDLOOP. ENDFORM.
Function Module : SE37 • Function Group • Function Library - Admin - Import/Export Parameter - Source Code - Main Program - Documentation
Function Group • When you create a function module, you must assign it to function group • The function group is the main program in which a function module is embedded • The function group is a program type F,and not executable • The entire function group is loaded in a program the first time that you call a function module that belongs to it
Function Group • is a container for function modules • When a function module is called,the entire function group is loaded into the session of the program • Function group is used to define global data for function modules • A DATA statement in the global memory of a function group is shared by all the function modules that belong to that function group
Function Module • is a code that can be called from any ABAP program,therefore making it a globally accessible object • ABAP program pass data to function module from import parameters or internal tables • Function module receives data from a program,process the information in its own code, and then sends back information in the export parameters or internal tables
Function Module : Source Code (Logic) FUNCTION z_fmtest. result = number1 ** number2. ENDFUNCTION.
Program Example I REPORT ztest. PARAMETERS: no1 TYPE i, no2 TYPE i. DATA result TYPE i. START-OF-SELECTION. CALL FUNCTION ‘Z_FMTEST’ EXPORTING number1 = no1 number2= no2 IMPORTING result = result. WRITE: / result.
Exercise : Function Module ABAP Program Function Module ?
Function Module FUNCTION z_fmtest. IF number1 > 9 AND number2 > 9. RAISE invalidnumber. ELSE. result = number1 ** number2. ENDIF. ENDFUNCTION.
Example II : Exceptions Handler REPORT ztest. PARAMETERS: no1 TYPE i, no2 TYPE i. DATA result TYPE i. START-OF-SELECTION. CALL FUNCTION ‘Z_FMTEST’ EXPORTING number1 = no1 number2= no2 IMPORTING result = result EXCEPTIONS invalidnumber = 1. IF sy-subrc = 1. write: / ‘Please enter number < 10’. ELSEIF sy-subrc = 0. write: / result. ENDIF.
Exercise : Exceptions ABAP Program Function Module ?
EXCEPTIONS VS AT SELECTION-SCREEN REPORT ztest. PARAMETERS: no1 TYPE i, no2 TYPE i. AT SELECTION-SCREEN. IF no1 > 9 AND no2 > 9. MESSAGE e000(38) WITH ‘Please enter no < 10’. ENDIF. START-OF-SELECTION. CALL FUNCTION ‘Z_FMTEST’. ….. FUNCTION Z_FMTEST. IF number1 > 9 AND number2 > 9. RAISE invalidnumber. ELSE. result = number1 ** number2. ENDIF. ENDFUNCTION. VS
Optional Function Module ABAP Program