EventSubscriber เป็นเครื่องมือที่มีประสิทธิภาพใน AL programming ซึ่งช่วยให้นักพัฒนาสามารถเชื่อมต่อโค้ดของตัวเองเข้ากับ event ที่มีอยู่ใน Dynamics 365 Business Central โดยไม่ต้องแก้ไขโค้ดต้นฉบับ (base code) การใช้งาน EventSubscriber จะช่วยให้เราสามารถขยายฟังก์ชันการทำงานของระบบได้อย่างง่ายดาย ปลอดภัย และไม่มีผลกระทบต่อการอัปเดตของระบบ ทำให้เหมาะสำหรับการพัฒนาระบบที่ต้องการความยืดหยุ่นในการบำรุงรักษาในอนาคต
โครงสร้างพื้นฐานของ EventSubscriber
การใช้งาน EventSubscriber ใน AL ต้องเริ่มต้นด้วยการกำหนดฟังก์ชันที่เราต้องการให้ทำงานเมื่อเหตุการณ์ที่ต้องการเกิดขึ้น โดยใช้ Attribute [EventSubscriber] เพื่อกำหนดลักษณะของการทำงาน
[EventSubscriber(ObjectType::ObjectType, ObjectId: Integer, EventName: Text, ElementName: Text, SkipOnMissingLicense: Boolean, SkipOnMissingPermission: Boolean)]
procedure MyEventSubscriber(Rec: Record <TableName>)
begin
// การทำงานที่ต้องการเมื่อเกิด Event
end;
รายละเอียดพารามิเตอร์
- ObjectType: ระบุประเภทของ Object ที่สร้างเหตุการณ์ เช่น
Table,Codeunit,Page - ObjectId: ระบุ ID ของ Object หรือชื่อ Object ที่ต้องการติดตาม
- EventName: ระบุชื่อของเหตุการณ์ที่ต้องการติดตาม เช่น
OnAfterInsertEvent - ElementName: ใช้กับเหตุการณ์ที่เกี่ยวกับฟิลด์ในตาราง (เช่น
OnAfterValidateEvent) - SkipOnMissingLicense: ระบุว่าจะข้ามการเรียก EventSubscriber หาก License ไม่มีสิทธิ์การเข้าถึง
- SkipOnMissingPermission: ระบุว่าจะข้ามการเรียก EventSubscriber หากผู้ใช้ไม่มีสิทธิ์การเข้าถึง
ตัวอย่างการใช้งาน
ฟังก์ชัน CheckImportantFieldsAfterModify จะทำงานหลังจากการแก้ไขข้อมูลลูกค้า โดยจะตรวจสอบว่าชื่อลูกค้าถูกแก้ไขหรือไม่ หากมีการเปลี่ยนแปลงชื่อลูกค้า จะแสดงข้อความระบุว่าชื่อเดิมและชื่อใหม่คืออะไร
[EventSubscriber(ObjectType::Table, Database::Customer, 'OnAfterModifyEvent', '', false, false)]
local procedure CheckImportantFieldsAfterModify(Rec: Record Customer; xRec: Record Customer)
begin
if Rec.Name <> xRec.Name then
Message('Customer Name has been changed from %1 to %2', xRec.Name, Rec.Name);
end;
ในตัวอย่างนี้
- ObjectType คือ
Tableแสดงว่ากำลังติดตามเหตุการณ์ในระดับตาราง - ObjectId คือ
Database::Customerซึ่งเป็นตารางลูกค้าที่เราต้องการติดตาม - EventName คือ
OnAfterInsertEventเหตุการณ์ที่เกิดขึ้นหลังจากเพิ่มลูกค้าใหม่ - ElementName เป็นค่าว่าง เนื่องจากเราไม่ได้ติดตามการ Validate ฟิลด์เฉพาะเจาะจง
- SkipOnMissingLicense และ SkipOnMissingPermission กำหนดเป็น
falseเพื่อให้ฟังก์ชันทำงานในทุกสถานการณ์ที่ผู้ใช้มีสิทธิ์และ License เพียงพอ
การใช้งาน EventSubscriber ในสถานการณ์ต่าง ๆ
- การตรวจสอบข้อมูลก่อนการบันทึก: EventSubscriber สามารถใช้ตรวจสอบความถูกต้องของข้อมูลก่อนที่จะถูกบันทึกลงฐานข้อมูล เช่น การตรวจสอบว่าชื่อลูกค้าไม่ควรเป็นค่าว่าง
- การเพิ่มฟังก์ชันการทำงาน: สามารถเพิ่มฟังก์ชันใหม่ที่ทำงานเมื่อเกิดเหตุการณ์เฉพาะ เช่น การคำนวณหรืออัปเดตฟิลด์เมื่อมีการเปลี่ยนแปลงข้อมูล
- การจัดการการทำงานในระดับ Page: EventSubscriber สามารถใช้ในการติดตามเหตุการณ์ที่เกิดขึ้นในหน้าจอต่างๆ เช่น การกดปุ่ม หรือการเลือกค่าใน Drop-down
สรุป
การใช้งาน EventSubscriber ใน AL Programming ช่วยให้เราสามารถสร้างฟังก์ชันการทำงานเพิ่มเติมเพื่อให้ระบบมีความสามารถในการตอบสนองต่อเหตุการณ์ต่าง ๆ ได้อย่างยืดหยุ่นและปลอดภัย โดยไม่ต้องแก้ไขโค้ดของ object เดิม ช่วยเพิ่มความเสถียรและความยืดหยุ่นในการพัฒนาระบบได้มากยิ่งขึ้น
