SAP บทช่วยสอน BAPI – วิธีการสร้าง BAPI ใน ABAP
⚡ สรุปอย่างชาญฉลาด
BAPI ใน SAP ABAP เป็นวิธีการสร้างอ็อบเจ็กต์ทางธุรกิจที่เป็นมาตรฐานและรองรับ RFC ซึ่งช่วยให้แอปพลิเคชันภายนอกสามารถเข้าถึงกระบวนการและข้อมูลในระบบ R/3 ได้ หน้านี้อธิบายเกี่ยวกับ BAPI ที่เป็นมาตรฐาน วิธีการสร้าง BAPI ใน SWO1 การทดสอบ การเผยแพร่ และวิธีการเรียกใช้ BAPI จาก ABAP

BAPI คืออะไร?
Business Application Programming Interface (BAPI) เป็นอินเทอร์เฟซการเขียนโปรแกรมมาตรฐาน (วิธีการ) ที่ช่วยให้แอปพลิเคชันภายนอกสามารถเข้าถึงกระบวนการทางธุรกิจและข้อมูลในระบบ R/3
พวกเขา จัดให้มีวิธีการที่มั่นคงและเป็นมาตรฐาน เพื่อให้เกิดการบูรณาการอย่างราบรื่นระหว่างระบบ R/3 และแอปพลิเคชันภายนอก ระบบเดิม และส่วนเสริม
BAPIs ถูกกำหนดไว้ใน BOR (ที่เก็บออบเจ็กต์ทางธุรกิจ) เป็นวิธีการของ SAP ประเภทของวัตถุทางธุรกิจที่ทำหน้าที่เฉพาะด้านธุรกิจ โดยจะถูกนำไปใช้ในรูปแบบต่างๆ ดังนี้ ฟังก์ชันที่เปิดใช้งาน RFC โมดูลต่างๆ และถูกสร้างขึ้นใน Function Builder ของ ABAP Workbench
BAPI และวิธีการบางอย่างมีฟังก์ชันพื้นฐานและสามารถใช้ได้ส่วนใหญ่ SAP วัตถุทางธุรกิจ สิ่งเหล่านี้เรียกว่า BAPI's มาตรฐาน
รายชื่อ BAPI ที่ได้มาตรฐาน:
- BAPI สำหรับการอ่านข้อมูล – GetList() , GetDetail() , GetStatus() , ExistenceCheck()
- BAPI สำหรับการสร้างหรือการเปลี่ยนแปลงข้อมูล - สร้าง() ,เปลี่ยน(),ลบ() และยกเลิกการลบ() ,
- BAPI สำหรับการประมวลผลจำนวนมาก -ChangeMultiple(), CreateMultiple(), DeleteMultiple()
ข้อดีของ BAPI
BAPI เป็นที่นิยมมากกว่าเทคนิคที่ใช้หน้าจอ เนื่องจากเป็นอินเทอร์เฟซที่มีเอกสารประกอบและเผยแพร่แล้ว SAP รักษาเสถียรภาพได้ดีในทุกเวอร์ชัน ซึ่งนำมาซึ่งประโยชน์ในทางปฏิบัติหลายประการ
- อินเทอร์เฟซที่เสถียร: ลายเซ็นของ BAPI ที่เผยแพร่แล้วจะไม่เปลี่ยนแปลงเมื่อมีการอัปเกรด ดังนั้นโปรแกรมที่เรียกใช้งานจึงยังคงทำงานได้ต่อไป
- การนำตรรกะทางธุรกิจกลับมาใช้ใหม่: BAPI จะทำการตรวจสอบความถูกต้องเช่นเดียวกับการทำธุรกรรม ดังนั้นข้อมูลที่เพิ่มเข้ามาผ่าน BAPI จึงมีความสอดคล้องกัน
- เปิดใช้งานการควบคุมระยะไกล: เนื่องจาก BAPI เป็นโมดูลฟังก์ชันที่รองรับ RFC จึงสามารถเรียกใช้จากโมดูลอื่นได้ SAP ระบบก Java หรือโปรแกรม .NET หรือบริการเว็บ
- ไม่ขึ้นอยู่กับหน้าจอ: ต่างจากการบันทึกข้อมูลแบบกลุ่ม (batch input recording) BAPI จะไม่หยุดทำงานเมื่อรูปแบบหน้าจอเปลี่ยนแปลง
เมื่อเข้าใจแนวคิดและประโยชน์ของมันอย่างชัดเจนแล้ว ในส่วนถัดไปจะเป็นการสร้าง BAPI ทีละขั้นตอน
วิธีสร้าง BAPI
ขั้นตอน 1) ไปที่ธุรกรรม swo1 (เครื่องมือ->กรอบงานธุรกิจ -> การพัฒนา BAPI ->ตัวสร้างออบเจ็กต์ธุรกิจ) เลือกออบเจ็กต์ธุรกิจ ตามความต้องการการทำงานที่ BAPI กำลังถูกสร้างขึ้น
ขั้นตอน 2) เปิดวัตถุธุรกิจในโหมดการเปลี่ยนแปลง จากนั้นเลือก Utilities -> API Methods -> Add method จากนั้นป้อนชื่อของโมดูลฟังก์ชันและเลือก Continue
ขั้นตอน 3) ในกล่องโต้ตอบถัดไปจำเป็นต้องระบุข้อมูลดังต่อไปนี้:
- วิธีการ : เสนอชื่อที่เหมาะสมสำหรับวิธีการ
- ข้อความ : ป้อนคำอธิบายสำหรับ BAPI
- ปุ่มตัวเลือก : กล่องโต้ตอบ, Synchronous, อิสระจากอินสแตนซ์ โดยทั่วไป BAPI จะถูกนำไปใช้อย่างซิงโครนัส
ขั้นตอน 4) ในการสร้างวิธีการ ให้เลือกใช่ในกล่องโต้ตอบถัดไป
ขั้นตอน 5) หลังจากที่โปรแกรมถูกสร้างขึ้นและดำเนินการแล้ว ให้ตรวจสอบโปรแกรมในวิธีที่เพิ่งสร้างขึ้น ดังนั้น BAPI จะถูกสร้างขึ้น
การทดสอบ BAPI
คุณสามารถทดสอบ BAPI ได้โดย การทดสอบ วิธีการเฉพาะของ Business Object ใน Business Object Builder (หรือสามารถใช้ธุรกรรม 'SWUD' เพื่อทดสอบวิธีการได้)
การปล่อยและแช่แข็ง BAPI
- หากต้องการปลด BAPI ให้ปล่อยโมดูลฟังก์ชันก่อน (โดยใช้ทรานแซคชัน se37)
- ตั้งค่าสถานะของวิธีการเป็น 'เผยแพร่แล้ว' ใน Business Object Builder (โดยใช้ธุรกรรม SWo1 – แก้ไข-> เปลี่ยนสถานะ-> นำออกใช้)
คุณยังสามารถใช้ BAPI Explorer (รหัสธุรกรรม BAPI) สำหรับมุมมอง 360′ บน BAPI
วิธีการเรียกใช้ BAPI ใน ABAP
BAPI ถูกเรียกใช้งานเหมือนกับฟังก์ชันโมดูลที่เปิดใช้งาน RFC ทั่วไป กฎสำคัญคือ BAPI จะไม่ทำการ COMMIT WORK ด้วยตัวเอง ดังนั้นผู้เรียกใช้งานจะต้องยืนยันการเปลี่ยนแปลงด้วย BAPI_TRANSACTION_COMMIT หรือยกเลิกด้วย BAPI_TRANSACTION_ROLLBACK ตัวอย่างด้านล่างสร้างใบสั่งขายโดยใช้ BAPI มาตรฐาน
DATA: ls_header TYPE bapisdhd1, lt_items TYPE STANDARD TABLE OF bapisditm, lt_return TYPE STANDARD TABLE OF bapiret2, lv_order TYPE vbeln. * Fill the header and item structures, then call the BAPI CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' EXPORTING order_header_in = ls_header IMPORTING salesdocument = lv_order TABLES order_items_in = lt_items return = lt_return. * A BAPI does not commit on its own - decide based on the return table READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF.
⚠️คำเตือน: ตรวจสอบตาราง RETURN เสมอเพื่อหาข้อความประเภท E หรือ A ก่อนทำการยืนยันธุรกรรม การเรียกใช้ BAPI_TRANSACTION_COMMIT หลังจากเกิดข้อผิดพลาดจะบันทึกเอกสารที่ไม่สมบูรณ์ ซึ่งเป็นหนึ่งในข้อผิดพลาด BAPI ที่พบบ่อยที่สุด
BAPI เทียบกับ BDC เทียบกับ RFC
BAPI, a BDCและ RFC ทั่วไปทั้งหมดจะย้ายข้อมูลเข้าไป SAPแต่มีความแตกต่างกันในด้านความเสถียรและการนำกลับมาใช้ใหม่ ตารางด้านล่างนี้เปรียบเทียบทั้งสองแบบ
| หลักเกณฑ์ | บาปิ | BDC | อาร์เอฟซี (แบบกำหนดเอง) |
|---|---|---|---|
| อินเตอร์เฟซ | เมธอดที่ปล่อยออกมาของวัตถุทางธุรกิจ | ลำดับหน้าจอของการทำธุรกรรม | โมดูลฟังก์ชันแบบกำหนดเองใดๆ |
| ความเสถียรในการอัปเกรด | รับประกันสำหรับ BAPI ที่เผยแพร่แล้ว | เกิดปัญหาหากหน้าจอมีการเปลี่ยนแปลง | ขึ้นอยู่กับผู้พัฒนา |
| เปิดใช้งานการควบคุมระยะไกล | มี (ใบกำกับภาษีเต็มรูปแบบ) | ไม่ | มี (ใบกำกับภาษีเต็มรูปแบบ) |
| การตรวจสอบธุรกิจ | ครบถ้วน เหมือนกับการทำธุรกรรม | เต็มรูปแบบ แสดงหน้าจอจริง | เฉพาะสิ่งที่นักพัฒนาเขียนโค้ดเท่านั้น |
| เหมาะสำหรับ | การผสานรวมและอินเทอร์เฟซที่เสถียร | โหลดข้อมูลในกรณีที่ไม่มี BAPI อยู่ | บริการแบบจุดต่อจุดที่กำหนดเอง |
หลักการโดยทั่วไปคือ ให้ใช้ BAPI ที่เผยแพร่แล้วทุกครั้งที่มีอยู่ ให้ใช้ BDC แทนหากไม่มี และสงวน RFC แบบกำหนดเองไว้สำหรับบริการเฉพาะทางเท่านั้น





