การแทนที่ Base Report ด้วย Report ที่ทำขึ้นเอง

Spread the love

หากคุณกำลัง Implement ให้กับโปรแกรม Dynamics 365 Business Central On-Prem ที่เป็น BC ใน version ที่ต่ำกว่า 18 (Business Central 2021 wave 1) และคุณได้รับ Requirement ให้ปรับแต่ง base report ของโปรแกรม ซึ่งแน่นอนว่า ใน BC ที่ version ต่ำกว่าไม่มียังไม่มี report extension ให้ใช้งาน

Solution อาจเป็นไปได้ 2 แบบ ประกอบด้วย

Photo by Eugen Str on Unsplash
  1. ใช้งาน Custom Report Layout ซึ่งเป็น feature ที่สามารถให้เราแก้ไข ปรับแต่งหน้าตา report layout ให้เป็นไปตามที่เราต้องการได้ แต่ก็มีข้อจำกัดคือไม่สามารถเพิ่ม field เข้าไปใหม่ หรือเขียน code เพิ่ม logic เข้าไปใน report object ได้
  2. คัดลอก 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 ทั้งหมดออกมาได้ดังรูปด้านล่างนี้

Substitute-base report-with-customized -report-1

เอาละ สมมติว่าเราต้องการแก้รายงาน Detail Trial Balance ซึ่งเป็น base report ก็แล้วกัน ขั้นแรกเราก็ต้องไป copy เอาส่วนที่เป็น object และ layout ของ รายงาน Detail Trial Balance มาก่อน โดยเข้าไปใน folder ของ app ที่เรา unzip ไว้

Substitute-base report-with-customized -report-2
report object
Substitute-base report-with-customized -report-3
layout object

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
Substitute-base report-with-customized -report-4

สมมติว่าได้ทำการ customize ให้กับ report ตัวนี้ตรงตามที่ต้องการแล้ว จากนั้นก็ publish และ install app ไปที่ระบบที่เตรียมไว้

เมื่อติดตั้งเสร็จแล้ว จะเห็นว่ามีรายงาน Detail Trial Balance อยู่สองตัวด้วยกัน นั่นคือตัวที่เป็น base report กับตัวที่เราเพิ่งติดตั้งเข้าไปเมื่อกี้

Substitute-base report-with-customized -report-5

3. Substitute base report with customized report

ขั้นตอนต่อมาเราทำให้ base report หายไป แล้วคงเหลือเพียงแค่ Detail Trial Balance ที่เราทำการ customization ไว้

สร้าง codeunit ขึ้นมาหนึ่งตัวแล้วเขียน event subscriber ตามรูปด้านล่างนี้ลงไป

Substitute-base report-with-customized -report-6

โดย 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 ให้ตรงกับของเดิมเพื่อไม่ให้เกิดความสับสนได้แล้ว

Substitute-base report-with-customized -report-7

4. Testing

เมื่อแก้โค้ดเรียบร้อยก็ให้ติดตั้ง app เข้าไปที่ระบบอีกครั้ง

บทความที่คุณอาจสนใจ

5 Tips ที่ช่วยให้การจัด Report Layout บน Business Central ทำง่ายขึ้น
Visual Studio Community สำหรับแก้ไข Report Layout บน Business Central

ทีนี้เราลองมาเรียกรายงาน Detail Trial Balance อีกครั้ง ซึ่งจะไม่มีคำว่า Custom นำหน้า เพราะเราได้แก้ caption ไปเรียบร้อยแล้ว

Substitute-base report-with-customized -report-8

และเมื่อกดดู page inspection ขณะเรียกรายงาน ก็จะเห็นว่าเป็นการเรียก report id 60000 ที่ชื่อ Custom Detail Trial Balance ที่เป็นตัวรายงาน customization ของเรานั่นเอง

Substitute-base report-with-customized -report-9

เพียงเท่านี้เราก็สามารถแทนที่ base report ด้วย report ที่เราปรับแต่งขึ้นมาเองได้แล้ว

ERP Consultant ที่อยากแชร์ความรู้เกี่ยวกับการพัฒนาโปรแกรม Microsoft Dynamics NAV / 365 Business Central ทั้งทางด้าน Business และ Technical ให้กับเหล่านักศึกษา, ผู้ที่เริ่มต้นอาชีพนี้ หรือต้องการที่จะเพิ่มเติมความรู้ด้าน ERP ในรูปแบบ blog ที่เป็นภาษาไทย Contact: amaddev90@gmail.com

Leave a Reply

Your email address will not be published. Required fields are marked *