หากคุณกำลัง Implement ให้กับโปรแกรม Dynamics 365 Business Central On-Prem ที่เป็น BC ใน version ที่ต่ำกว่า 18 (Business Central 2021 wave 1) และคุณได้รับ Requirement ให้ปรับแต่ง base report ของโปรแกรม ซึ่งแน่นอนว่า ใน BC ที่ version ต่ำกว่าไม่มียังไม่มี report extension ให้ใช้งาน
Solution อาจเป็นไปได้ 2 แบบ ประกอบด้วย
- ใช้งาน Custom Report Layout ซึ่งเป็น feature ที่สามารถให้เราแก้ไข ปรับแต่งหน้าตา report layout ให้เป็นไปตามที่เราต้องการได้ แต่ก็มีข้อจำกัดคือไม่สามารถเพิ่ม field เข้าไปใหม่ หรือเขียน code เพิ่ม logic เข้าไปใน report object ได้
- คัดลอก source code ของ base report มาสามารถเป็น report object ตัวใหม่ แล้วแก้โค้ดให้ตรงตามต้องการ จากนั้นเอาไปแทนที่ base report ตัวเดิม
แน่นอนว่าในบทความนี้จะเขียนเกี่ยวกับข้อที่ 2 ถ้าคุณต้องการเรียนรู้เกี่ยวกับการทำ Custom Report Layout สามารถคลิกที่ได้ Link ด้านล่างนี้
How to replace base report with customized report
1. Get the source code
อันดับแรกคือการไป copy เอา source code มา ซึ่งหากคุณเคยอ่านบทความนี้
จะรู้ว่าเราสามารถ unzip ไฟล์ Base Application เพื่อเอา source code ทั้งหมดออกมาได้ดังรูปด้านล่างนี้
เอาละ สมมติว่าเราต้องการแก้รายงาน Detail Trial Balance ซึ่งเป็น base report ก็แล้วกัน ขั้นแรกเราก็ต้องไป copy เอาส่วนที่เป็น object และ layout ของ รายงาน Detail Trial Balance มาก่อน โดยเข้าไปใน folder ของ app ที่เรา unzip ไว้
2. Change object id and name
ต่อไปก็เอา object ทั้งสองตัวนี้ไปวางใน project (ในบทความนี้ขอข้ามขั้นตอนการสร้าง project นะครับ)
บทความที่คุณอาจสนใจ
• ขั้นตอนการติดตั้ง AL Language บน Visual Studio Code สำหรับ Microsoft Dynamics 365 Business Central
• เริ่มต้นสร้าง Extension แรกบน MS Dynamics 365 BC ตอนที่ 1 – New Table
สมมติว่าได้ทำการ customize ให้กับ report ตัวนี้ตรงตามที่ต้องการแล้ว จากนั้นก็ publish และ install app ไปที่ระบบที่เตรียมไว้
เมื่อติดตั้งเสร็จแล้ว จะเห็นว่ามีรายงาน Detail Trial Balance อยู่สองตัวด้วยกัน นั่นคือตัวที่เป็น base report กับตัวที่เราเพิ่งติดตั้งเข้าไปเมื่อกี้
3. Substitute base report with customized report
ขั้นตอนต่อมาเราทำให้ base report หายไป แล้วคงเหลือเพียงแค่ Detail Trial Balance ที่เราทำการ customization ไว้
สร้าง codeunit ขึ้นมาหนึ่งตัวแล้วเขียน event subscriber ตามรูปด้านล่างนี้ลงไป
โดย event subscriber นี้จะทำงานโดยตรวจสอบ report ที่ถูกเรียกใช้งาน แล้วแทนที่ด้วย report ตัวใหม่ที่เราต้องการ
ในกรณีนี้เราต้องการแทนที่รายงาน Detail Trial Balance ด้วย รายงาน Custom Detail Trial Balance
ซึ่งตัวแปร ReportId ก็ตือ Detail Trial Balance (base report) และ NewReportId ก็คือ Custom Detail Trial Balance นั่นเอง
หากมี report ที่ต้องการแทนที่มากกว่านี้ก็สามารถเพิ่ม case condition เข้าไปได้
ไหน ๆ ก็แทนที่ base report แล้ว ดังนั้นเราสามารถแก้ report caption ให้ตรงกับของเดิมเพื่อไม่ให้เกิดความสับสนได้แล้ว
4. Testing
เมื่อแก้โค้ดเรียบร้อยก็ให้ติดตั้ง app เข้าไปที่ระบบอีกครั้ง
บทความที่คุณอาจสนใจ
• 5 Tips ที่ช่วยให้การจัด Report Layout บน Business Central ทำง่ายขึ้น
• Visual Studio Community สำหรับแก้ไข Report Layout บน Business Central
ทีนี้เราลองมาเรียกรายงาน Detail Trial Balance อีกครั้ง ซึ่งจะไม่มีคำว่า Custom นำหน้า เพราะเราได้แก้ caption ไปเรียบร้อยแล้ว
และเมื่อกดดู page inspection ขณะเรียกรายงาน ก็จะเห็นว่าเป็นการเรียก report id 60000 ที่ชื่อ Custom Detail Trial Balance ที่เป็นตัวรายงาน customization ของเรานั่นเอง
เพียงเท่านี้เราก็สามารถแทนที่ base report ด้วย report ที่เราปรับแต่งขึ้นมาเองได้แล้ว