BADI คืออะไรใน SAP เอบัพ?
⚡ สรุปอย่างชาญฉลาด
บาดีใน SAP ABAP ย่อมาจาก Business Add-In ซึ่งเป็นส่วนเสริมเชิงวัตถุที่เชื่อมต่อตรรกะที่กำหนดเองเข้ากับมาตรฐาน SAP ฟังก์ชันการทำงาน หน้านี้อธิบายว่า BADI คืออะไร คุณสมบัติ ประเภทคลาสสิกและประเภทใหม่ เวิร์กโฟลว์ SE18 และ SE19 และวิธีการเปรียบเทียบกับ Exit

BADI คืออะไร?
BADI ย่อมาจาก Business Add Iเช่นเดียวกับ Customer Exits, BADI ช่วยเชื่อมต่อการปรับปรุงแบบกำหนดเองเข้ากับระบบ SAP ฟังก์ชั่น ตัวอย่างของ BADI: ในการทำธุรกรรม CAT2 – การลงรายการเวลา ฝ่ายทรัพยากรบุคคลต้องการรวมการรับทราบแบบโต้ตอบว่าการส่งข้อมูลที่ไม่ถูกต้องโดยเจตนาถือเป็นเหตุให้เลิกจ้าง ซึ่งสามารถทำได้โดยใช้ BADI
ความแตกต่างจาก Exit แบบคลาสสิกนั้นอยู่ที่ด้านเทคนิค BADI สร้างขึ้นจาก ABAP Objects ดังนั้นโปรแกรมมาตรฐานจะเรียกใช้เมธอดของอินเทอร์เฟซ และโค้ดที่กำหนดเองจะอยู่ในคลาสที่ใช้งานเมธอดนั้น นี่คือเหตุผลที่ BADI มักถูกอธิบายว่าเป็น Exit เวอร์ชันเชิงวัตถุที่มาแทนที่ Exit แบบคลาสสิก ลูกค้าทางออก.
คุณสมบัติ
- BADI เป็น Object Oriented
- สามารถนำไปใช้ได้หลายครั้ง
- ไม่จำเป็นต้องใช้ SAP ซอฟต์แวร์ เปลี่ยนแปลงการลงทะเบียน
- ไม่มีผลต่อการเปิดตัวอัพเกรดการทำงานของ BADI
คุณลักษณะทั้งสี่ประการนี้อธิบายว่าทำไม SAP แนะนำให้ใช้ BADI แทนการใช้ทางออกแบบดั้งเดิม เนื่องจากส่วนปรับปรุงนี้อยู่ในคลาสแยกต่างหาก จึงยังคงใช้งานได้โดยไม่เปลี่ยนแปลงแม้จะมีการอัปเกรด และเนื่องจาก BADI สามารถกำหนดให้ใช้งานได้หลายครั้ง ทีมหลายทีมจึงสามารถปรับปรุงจุดเดียวกันได้โดยไม่เขียนทับกัน
ประเภทของ BADI
SAP นำเสนอ Business Add-Ins สองรุ่น รุ่นคลาสสิก BADI คือเวอร์ชันที่ใช้การปรับปรุงตามที่อธิบายไว้ข้างต้น และรุ่น BADI ใหม่ ซึ่งเปิดตัวพร้อมกับ SAP NetWeaver เป็นส่วนหนึ่งของ Enhancement Framework และมีความเร็วและความยืดหยุ่นมากกว่า
| หลักเกณฑ์ | บาดีสุดคลาสสิก | BADI ใหม่ (เคอร์เนล) |
|---|---|---|
| บำรุงรักษาใน | SE18 และ SE19 | ตัวสร้างการปรับปรุงภายในจุดปรับปรุง |
| ไส้กรอง | ค่าตัวกรองแบบง่าย | กรองชุดค่าผสมด้วยนิพจน์ตรรกะ |
| รั้งท้าย | ไม่มีบริการ | คลาสสำรองเริ่มต้นจะทำงานเมื่อไม่มีการใช้งานใด ๆ ที่ใช้งานอยู่ |
| การสร้างอินสแตนซ์ | CL_EXITHANDLER=>GET_INSTANCE | ข้อความ GET BADI และ CALL BADI |
| ประสิทธิภาพ | ช้าลง มีการสร้างอ็อบเจ็กต์ทุกครั้งที่เรียกใช้ | เร็วขึ้น ควบคุมโดยเคอร์เนล |
ทั้งสองรุ่นมีวิธีการในการใช้งานที่คล้ายคลึงกัน ดังที่จะอธิบายต่อไปนี้
วิธีการกำหนดและใช้งาน BADI
สิ่งนี้เกี่ยวข้องกับสามขั้นตอน
ขั้นตอน 1) การสร้างคำจำกัดความ BADI และอินเทอร์เฟซ: ธุรกรรม SE18
ขั้นตอน 2) สร้างการใช้งาน BADI: ทำรายการธุรกรรม SE19
ขั้นตอน 3) กำหนดคลาสที่ใช้งานอินเทอร์เฟซ: ในระหว่างการสร้างการใช้งาน จะมีการสร้างคลาสสำหรับการใช้งานอินเทอร์เฟซของการปรับปรุงนั้นด้วย
ในเชิงโค้ด โปรแกรมมาตรฐานจะเข้าถึงการใช้งานผ่านทางตัวจัดการการออกจากโปรแกรม รูปแบบคลาสสิกจะสร้างอินสแตนซ์ของการอ้างอิง BADI จากนั้นจึงเรียกเมธอดของอินเทอร์เฟซ
* Reference typed with the BADI interface DATA: lo_badi TYPE REF TO zif_ex_badi_demo. * Get the active implementation(s) CALL METHOD cl_exithandler=>get_instance CHANGING instance = lo_badi. * Call the interface method that carries the custom logic CALL METHOD lo_badi->check_data EXPORTING is_input = ls_input.
💡 เคล็ดลับ: การเรียกใช้ BADI ใหม่ในเคอร์เนลนั้นง่ายกว่าด้วยคำสั่ง GET BADI และ CALL BADI ซึ่งจะจัดการค่าตัวกรองโดยอัตโนมัติด้วย ใช้ SE18 เพื่อตรวจสอบว่าจุดปรับปรุงนั้นเป็น BADI แบบคลาสสิกหรือแบบใหม่ก่อนที่จะเขียนคำสั่งเรียกใช้
⚠️คำเตือน: ธุรกรรม SE18 เก็บคำจำกัดความและอินเทอร์เฟซ ในขณะที่ SE19 เก็บการใช้งาน การสร้างการใช้งานใน SE18 หรือการสร้างคำจำกัดความใน SE19 เป็นข้อผิดพลาดที่พบบ่อยซึ่งทำให้ BADI ไม่ทำงาน
BADI เทียบกับ Customer Exit เทียบกับ User Exit
เทคนิคทั้งสามอย่างนี้ช่วยยกระดับมาตรฐาน SAPแต่ทั้งสองรุ่นแตกต่างกันในด้านเทคโนโลยีและความยืดหยุ่น ตารางด้านล่างแสดงตำแหน่งของ BADI เทียบกับสองรุ่นเก่ากว่า เทคนิคการออกจากระบบ.
| หลักเกณฑ์ | ทางออกผู้ใช้ | ทางออกลูกค้า | บาดี |
|---|---|---|---|
| เทคโนโลยี | ซับรูทีน (ฟอร์ม) | โมดูลฟังก์ชัน หน้าจอ หรือเมนู | อินเทอร์เฟซและคลาสเชิงวัตถุ |
| ขอบเขต | โมดูล SD เท่านั้น | โมดูลทั้งหมด | โมดูลทั้งหมด |
| จำนวนการนำไปใช้ | หนึ่ง | หนึ่ง | หลายอย่าง เมื่อนิยามว่าเป็นการใช้งานหลายครั้ง |
| บำรุงรักษาด้วย | แก้ไขโดยตรงของไฟล์ที่รวมอยู่ | SMOD และ CMOD | SE18 และ SE19 |
| Upgrade ปลอดภัย | ตรวจสอบกับ SPAU แล้ว | มี (ใบกำกับภาษีเต็มรูปแบบ) | มี (ใบกำกับภาษีเต็มรูปแบบ) |
หลักปฏิบัติคือการใช้ BADI ทุกครั้งที่มีอยู่ เพราะเป็นการเขียนโปรแกรมเชิงวัตถุ ปลอดภัยต่อการอัปเกรด และสามารถนำไปใช้งานได้มากกว่าหนึ่งครั้ง



