Dynamics 365 Business Central: การใช้งาน EventSubscriber ใน AL Programming

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 ในสถานการณ์ต่าง ๆ

  1. การตรวจสอบข้อมูลก่อนการบันทึก: EventSubscriber สามารถใช้ตรวจสอบความถูกต้องของข้อมูลก่อนที่จะถูกบันทึกลงฐานข้อมูล เช่น การตรวจสอบว่าชื่อลูกค้าไม่ควรเป็นค่าว่าง
  2. การเพิ่มฟังก์ชันการทำงาน: สามารถเพิ่มฟังก์ชันใหม่ที่ทำงานเมื่อเกิดเหตุการณ์เฉพาะ เช่น การคำนวณหรืออัปเดตฟิลด์เมื่อมีการเปลี่ยนแปลงข้อมูล
  3. การจัดการการทำงานในระดับ Page: EventSubscriber สามารถใช้ในการติดตามเหตุการณ์ที่เกิดขึ้นในหน้าจอต่างๆ เช่น การกดปุ่ม หรือการเลือกค่าใน Drop-down

สรุป

การใช้งาน EventSubscriber ใน AL Programming ช่วยให้เราสามารถสร้างฟังก์ชันการทำงานเพิ่มเติมเพื่อให้ระบบมีความสามารถในการตอบสนองต่อเหตุการณ์ต่าง ๆ ได้อย่างยืดหยุ่นและปลอดภัย โดยไม่ต้องแก้ไขโค้ดของ object เดิม ช่วยเพิ่มความเสถียรและความยืดหยุ่นในการพัฒนาระบบได้มากยิ่งขึ้น

Leave a comment