Function Module
เราสามารถที่จะเขียนคำสั่ง ABAP เก็บไว้เป็นฟังก์ชันเพื่อให้โปรแกรม ABAP สามารถเรียกใช้ฟังก์ชันจาก Function Library ได้ เราลองมาดูตัวอย่างของการสร้างและเรียกใช้ฟังก์ชันที่ใช้ในการคำนวณค่าของ ตัวเลขยกกำลังสองจำนวนดังต่อไปนี้เราจะใช้ Transaction SE37 ในการสร้างฟังก์ชันในระบบ SAP ดังรูปที่ 1
รูปที่ 1 |
รูปที่ 2 |
สำหรับฟังก์ชันกรุ๊ปนั้น จะเป็นที่ที่เก็บรวบรวมฟังก์ชันต่างๆ หรือกล่าวอีกนัยหนึ่งก็คือ ฟังก์ชันต่างๆ จะต้องอยู่ในฟังก์ชันกรุ๊ปนั่นเอง โดยที่ในหนึ่งฟังก์ชันกรุ๊ปสามารถมีได้หลายฟังก์ชัน
จากนั้นเราจะสร้างฟังก์ชันที่ชื่อ Z_CAL ที่ Transaction SE37 โดยคลิ้กปุ่ม Create ดังรูปที่ 3
จากนั้นเราจะสร้างฟังก์ชันที่ชื่อ Z_CAL ที่ Transaction SE37 โดยคลิ้กปุ่ม Create ดังรูปที่ 3
รูปที่ 3 |
รูปที่ 4 |
จากนั้นเราจะเข้ามาที่ส่วนของการสร้างตัวแปร Import ในที่นี้คือ number1 และ number2 ซึ่งเป็นตัวแปรชนิด I ซึ่งในส่วน Import นี้ คือตัวแปรที่ฟังก์ชันรอรับค่ามาจากโปรแกรมที่มีการเรียกใช้ฟังก์ชัน ดังรูปที่ 5
รูปที่ 5 |
รูปที่ 6 |
จากนั้นเราก็จะเข้าไปเขียนคำสั่ง ABAP ของฟังก์ชันนี้ โดยคลิ้กปุ่ม Source Code จากนั้นที่ Editor ก็ให้เขียนคำสั่ง ABAP ดังนี้
FUNCTION Z_CAL.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(NUMBER1) TYPE I
*" VALUE(NUMBER2) TYPE I
*" EXPORTING
*" VALUE(RESULT) TYPE I
*"----------------------------------------------------------------------
RESULT = NUMBER1 ** NUMBER2.
ENDFUNCTION.
ก็คือ เป็นการคำนวณค่าของตัวเลขยกกำลังที่รับมาจากโปรแกรมที่เรียกใช้ฟังก์ชันนี้ ให้กับตัวแปร result ซึ่งเป็นตัวแปรแบบ Export จากนั้นให้คลิ้ก Activate เพื่อ Activate ในส่วนของฟังก์ชันดังนี้
Report ztest.
Data resultcal type I.
Parameters: no1 type I,
no2 type I.
รูปที่ 7 |
โดยที่ตัวแปร resultcal เป็นตัวแปรที่เราสร้างไว้เพื่อรอรับค่าจากฟังก์ชัน Z_CAL นั่นเอง จากนั้นให้ใช้คำสั่ง CALL FUNCTION 'Z_CAL' เพื่อเรียกใช้ฟังก์ชัน Z_CAL แต่ถ้าเราเขียนคำสั่ง CALL FUNCTION เอง เราก็จำเป็นที่จะต้องรู้ว่าฟังก์ชัน Z_CAL มีการรอรับค่าตัวแปรอะไร แล้วจะส่งค่าของตัวแปรอะไรกลับมา วิธีที่ง่ายและสะดวกที่สุดในการใช้ฟังก์ชันในโปรแกรมก็คือ ให้คลิ้กปุ่ม Pattern ที่ ABAP Editor หรือเลือกเมนู Edit -> Insert statement... จากนั้นให้ใส่ชื่อฟังก์ชันแล้วกด Enter ดังรูปที่ 7
เราก็จะได้คำสั่ง CALL FUNCTION ดังรูปที่ 8
CALL FUNCTION 'Z_CAL' EXPORTING number1 = number2 = IMPORTING Resultcal = รูปที่ 8 . |
ให้เราใส่ชื่อตัวแปรในโปรแกรมทางฝั่งขวา (Actual Parameter หรือตัวแปรที่อยู่ในโปรแกรม) ของฟังก์ชันดังรูปที่ 9
CALL FUNCTION 'Z_CAL' EXPORTING number1 = no1 number2 = no2 IMPORTING Resultcal = result . รูปที่ 9 |
ที่ส่วนของ Exporting ก็คือ เมื่อมีการเรียกใช้ฟังก์ชัน Z_CAL ระบบจะส่งค่าตัวแปร Actual Parameter ในที่นี้คือ no1 และ no2 ไปให้กับตัวแปร Import (Formal Parameter หรือตัวแปรที่ฝั่งฟังก์ชัน)ที่ชื่อ number1 และ number2 ของฟังก์ชัน Z_CAL ตามลำดับ จากนั้นเมื่อฟังก์ชัน Z_CAL ประมวลผลคำสั่ง ABAP ในฟังก์ชันเสร็จสิ้นเรียบร้อยแล้ว ระบบก็จะส่งค่าข้อมูลตัวแปร Export ที่ชื่อ result ของฟังก์ชัน Z_CAL กลับมาให้กับตัวแปร resultcal ในส่วน IMPORTING ของโปรแกรม ztest ดังรูปที่ 10
* เมื่อมีการเรียกใช้ฟังก์ชัน Z_CAL
Number1 < - - - no1
Number 2 < - - - no2
* เมื่อฟังก์ชัน Z_CAL ทำงานเสร็จสิ้น
result - - -> resultcal
รูปที่ 10
สำหรับโปแกรม ztest ที่สมบูรณ์จะเป็นดังนี้
Report ztest.
Data resultcal type I.
Parameters: no1 type I,
no2 type I.
CALL FUNCTION 'Z_CAL'
EXPORTING
number1 = no1
number2 = no2
IMPORTING
resultcal = result .
Write: / result.
เมื่อ Execute โปรแกรม ztest เราจะได้หน้าจอ Selection Screen ดังรูปที่ 11
รูปที่ 11 |
รูปที่ 12 |
ตัวแปร Exception
ถ้าเราลองส่งค่า no1 และ no2 เป็นค่าที่มากกว่า 9 ดังรูปที่ 13รูปที่ 13 |
รูปที่ 14 |
โดยที่ตัวแปร Exception นั้น เราจะใช้สำหรับเหตุการณ์ที่เราต้องการเช็กเงื่อนไขที่อาจเกิดข้อผิดพลาดใน ฟังก์ชัน จากนั้นที่ Source Code ของฟังก์ชัน Z_CAL ให้แก้ไขใหม่ดังรูปที่ 15
FUNCTION Z_CAL. *"---------------------------------------------------------------------- *"*"Local interface: *" IMPORTING *" VALUE(NUMBER1) TYPE I *" VALUE(NUMBER2) TYPE I *" EXPORTING *" VALUE(RESULT) TYPE I *" EXCEPTIONS *" INVALID *"---------------------------------------------------------------------- IF NUMBER1 > 9 AND NUMBER2 > 9. RAISE INVALID. ELSE. RESULT = NUMBER1 ** NUMBER2. ENDIF. ENDFUNCTION. รูปที่ 15 |
เมื่อแก้ไขซอร์สโค้ดในฟังก์ชัน เราก็จำเป็นที่จะต้อง Activate ฟังก์ชันใหม่ทุกครั้ง และเราจะใช้ตัวแปร Exception ในคำสั่ง raise ก็คือ เมื่อใดที่มีการทำงานของคำสั่ง raise ระบบก็จะหยุดการทำงานคำสั่งในฟังก์ชันทันที โดยที่ไม่มีการส่งค่าตัวแปร Export กลับไปที่โปรแกรมแต่อย่างใด จากนั้นระบบก็จะไปดูที่ส่วนของ EXCEPTIONS ในโปรแกรม ว่ามีการให้ค่าตัวแปร Exception ไว้เป็นค่าตัวเลขอะไร จากนั้นจึงให้ค่าตัวเลขกับตัวแปรระบบที่ชื่อ sy-subrc ซึ่งเราจะต้องตรวจสอบเองในโปรแกรมหลังจากมีการเรียกใช้ฟังก์ชัน ดังตัวอย่างโปรแกรมดังรูปที่ 16
Report ztest. Data resultcal type I. Parameters: no1 type I, no2 type I. CALL FUNCTION 'Z_CAL' EXPORTING number1 = no1 number2 = no2 IMPORTING resultcal = result EXCEPTIONS invalid = 1 others = 2. If sy-subrc = 1. Write: / 'Please enter number < 10'. Else. Write: / result. Endif. รูปที่ 16 |
รูปที่ 17 |
ก็คือถ้าผู้ใช้ระบบใส่ค่า no1 และ no2 เป็นค่า 10 เมื่อมีการเรียกใช้ฟังก์ชัน และมีการเช็กด้วยคำสั่ง if number1 > 9 and number2 > 9. ในฟังก์ชัน Z_CAL ระบบจึงทำคำสั่ง raise invalid. แล้วระบบก็จะจบการทำงานของฟังก์ชัน Z_CAL โดยทันที และจะกลับไปเช็กที่ค่าตัวเลขของตัวแปร invalid ในส่วนของ EXCEPTIONS ในโปรแกรม ztest ปรากฏว่าเป็นค่า 1 ดังนั้นระบบจึงให้ค่า 1 กับตัวแปร sy-subrc และเมื่อเรานำมาเช็กค่าจากคำสั่ง if sy-subrc = 1. เราจึงได้หน้าจอดังรูปที่ 17
ไม่ยากเลยใช่ไหมครับสำหรับการสร้างและเรียกใช้ฟังก์ชันในระบบ SAP ซึ่งจริงๆ และฟังก์ชันของระบบ SAP ก็คือโปรแกรม ABAP เราดีๆ นั่นเอง เพียงแต่ว่าเราไปสร้างไว้เป็นฟังก์ชันเก็บไว้ใน Function Library เพื่อให้โปรแกรมเรียกใช้ร่วมกันได้นั่นเอง แล้วพบกันใหม่ครับ
ที่มา : http://www.arip.co.th/articles.php?id=406433
ไม่มีความคิดเห็น:
แสดงความคิดเห็น