หลายคนคงทราบว่าตั้งแต่ Microsoft ปล่อยเจ้าตัว Dynamics 365 Business Central หรือก็คือ Dynamics NAV ที่มี version ที่สูงกว่า version 2018 ออกมา ทาง Microsoft ก็ประกาศว่าจะพยายามไม่ให้มีแก้ไขโค้ดผ่าน C/SIDE อีกต่อไป ดังนั้นการรู้วิธีการแปลงจาก C/AL ไปเป็น AL นั้นก็จะช่วยให้คุณสามารถทำการพัฒนาโปรแกรมของคุณได้รวดเร็วขึ้น
ซึ่งทาง Microsoft ก็ยังไม่ใจร้ายจนเกินไป ได้เตรียม Tool ที่มีชื่อว่า TXT2AL ซึ่งไว้ใช้สำหรับแปลงภาษา C/AL ที่อยู่บน C/SDIE ไปเป็นภาษา AL ที่ใช้สำหรับเขียน Extension งั้นเรามาลองใช้เจ้าเครื่องมือ TXT2AL ไปพร้อม ๆ กันเลยดีกว่าครับ
โดยปกติแล้วไฟล์ TXT2AL Tool จะถูกเก็บอยู่ที่ directory ตามรูปด้านล่าง
C:\Program Files (x86)\Microsoft Dynamics 365 Business Central\140\RoleTailored Client
เราสามารถใช้งาน TXT2AL ผ่านทาง cmd หรือ Power Shell ก็ได้ แต่ก่อนอื่นเรามาดูกันก่อนดีกว่าว่า process การแปลง code จาก C/AL ไปเป็น A/L นั้นมีขั้นตอนคร่าว ๆ อะไรบ้าง
หมายเหตุ: ขั้นตอนการ convert ไฟล์จาก C/AL ไปเป็น AL ภายในบทความนี้จะขอข้ามขั้นตอน Generate .delta file(s) หากต้องการอ่านเพิ่มเติมสามารถอ่านได้ที่นี่ <<https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-generating-delta-files>>
งั้นเรามาเริ่มกันเลยดีกว่า
โจทย์ก็คือ เราต้องการ Convert Report 4: Detail Trial Balance ที่เป็น C/AL ไปเป็น AL แล้วนำไปใส่ใน AL Project เพื่อแก้ไขแล้วทำเป็น Extension
Step 1: Prepare folder
ในขั้นตอนแรกผมจะสร้าง folder ขึ้นมา 2 อัน โดยอันนึงสำหรับเก็บ AL ไฟล์ และอีกอันสำหรับเก็บ C/AL ไฟล์
Step 2: Export Object (New Syntax)
สำหรับการ export object ให้ออกมาอยู่ในรูปแบบของ .txt ไฟล์นั้น เราจะไม่ใช้วิธี export ไฟล์แบบรูปด้านล่าง เนื่องจากว่า syntax ของบาง statement นั้นจะไม่ support ภาษา AL ซึ่งเดี๋ยวผมจะเปรียบเทียบให้ดูในภายหลัง
แล้วต้อง export ไฟล์แบบไหนล่ะ? คำตอบคือเราจะต้องใช้คำสั่ง ExportNewSyntax ผ่าน cmd หรือ Power Shell โดยวิธีการมีดังนี้
- Run cmd as Administrator
เราจะได้หน้าต่าง comand promt หน้าตาแบบนี้
2. จากนั้นให้พิมพ์คำสั่งย้ายไป folder ของ Dynamics 365 Business Central หาก Version ของ BC ที่คุณทำอยู่คือ BC14 ก็สามารถใช้ folder เดียวกันกับของผมได้เลย
cd C:\Program Files (x86)\Microsoft Dynamics 365 Business Central\140\RoleTailored Client
3. Run คำสั่ง ExportToNewSyntax เพื่อ export object ออกมาให้เป็น .txt ไฟล์ โดยโจทย์คือ Report 4: Detail Trial Balance สามารถเขียนคำสั่งตามนี้ได้เลย
finsql.exe Command=ExportToNewSyntax, File="D:\AMADDEV\ConvertCalToAl\CAL\R4.txt", Database="Demo Database BC (14-0)", ServerName=".\BCDEMO", filter=type=report;ID=4
- File คือ directory ที่คุณต้องการวางไฟล์ที่ export ออกมา
- Database คือ ชื่อของ database
- ServerName คือ ชื่อของ server ตามด้วย server instant name
- Filter คือตัวกรองว่าคุณต้องการ Export object อะไรบ้าง
เมื่อ run คำสั่งเสร็จแล้วจะได้ไฟล์ .txt อยู่ใน folder ที่เรากำหนด
หาก run คำสั่งแล้วไม่มีไฟล์ออกมา ให้ตรวจสอบว่าเขียนคำสั่งถูกต้องครบถ้วนหรือไม่ หรือให้ตรวจสอบ license ของ database
จากที่กล่าวไว้ข้างต้นว่า export file ออกมาเป็น .txt ผ่าน C/SIDE กับ run คำสั่ง ExportToNewSyntax นั้นจะได้ผลลัพธ์ที่ไม่เหมือนกัน ผมจะ compare code ผ่านเว็บ https://text-compare.com/ ให้ดูกันครับ
- ฝั่งซ้ายคือ run ExportToNewSyntax ผ่าน cmd
- ฝั่งขวาคือ Export File ผ่าน C/SIDE
จากรูปด้านบนผมจะขอยกประเด็น 2 จุดครับ
- การอ้างอิง object โดยฝั่งซ้าย (New Syntax) จะเป็น table “G/L Account” ส่วนฝั่งขวา (C/SIDE) จะเป็น Table15 ถ้าคุณเคยเขียน AL จะรู้ว่าการอ้างอิง object บน AL นั้นจะต้องเขียนชื่อเต็ม ๆ ของ object นั้นแทนการอ้างอิงจาก object ID ดังนั้นถ้าเอา code จากฝั่งขวา (C/SIDE) ไปใช้เลย จะเกิด error ทำให้ไม่สามารถ build app ได้อย่างแน่นอนครับ
- สไตล์การเขียนของ system function โดยส่วนนี้จะไม่ส่งผลให้เกิด error ใน project เพียงแต่ code ที่ออกมาจากฝั่งขวา (C/SIDE) นั้น system function จะเป็นตัวพิมพ์ใหญ่หมด เช่น SETRANGE -> SetRange
จากเหตุผลด้านบนแล้วก็แนะนำให้ export ไฟล์ด้วยคำสั่ง ExportToNewSyntax จะสะดวกกว่าในภายหลังที่จะไม่ต้องมาตามแก้ object ทั้งหมดครับ
Step 3: TXT2AL
หลังจากที่เราได้ .txt ไฟล์ของ Report 4 ที่เป็นแบบ New Syntax มาแล้ว ต่อไปก็คือขั้นตอนการใช้ tool TXT2AL ที่ทาง Microsoft เตรียมไว้ให้ในการแปลง (convert) C/AL ไปเป็น AL
กลับไปที่หน้าจอ cmd ใน Step 2 ให้คุณพิมพ์คำสั่งดังนี้
txt2al.exe –-Source="D:\AMADDEV\ConvertCalToAl\CAL" –-Target="D:\AMADDEV\ConvertCalToAl\AL" –-ExtensionStartId=4
โดย Source คือ directory ที่คุณเก็บไฟล์ C/AL ไว้ และ Target คือ directory ที่คุณต้องการให้ไฟล์ AL ที่ถูก convert มาแล้วจัดเก็บอยู่
เมื่อ run เสร็จแล้วจะได้ message ดังนี้
เมื่อเข้าไปที่ folder target ก็จะเจอไฟล์เหล่านี้
ใน Dynamics 365 Business Central นั้น object report จะแตกต่างจาก Dynamics NAV 2018 หรือ version ที่เก่ากว่านี้ ตรงที่ object report จะแยก source code ออกเป็น 2 ส่วน คือส่วนที่เป็น dataset ที่เราไว้เขียน code (ไฟล์ DetailTrailBalance.Report.al) และส่วนที่เป็นการสร้าง layout (DetailTrialBalance.rdlc)
งั้นผมขอสรุปขั้นตอนการ convert code จาก C/AL ไปเป็น AL สั้น ๆ ดังนี้
Conclusion
- Step 1: สร้าง folder เตรียมไว้แยกกันระหว่าง C/AL ไฟล์ และ A/L ไฟล์
- Step 2: เปิด cmd ด้วย administrator แล้วเปลี่ยน directory โดยใช้คำสั่ง cd C:\Program Files (x86)\Microsoft Dynamics 365 Business Central\140\RoleTailored Client จากนั้น run คำสั่ง finsql.exe Command=ExportToNewSyntax, File=”D:\AMADDEV\ConvertCalToAl\CAL\R4.txt”, Database=”Demo Database BC (14-0)”, ServerName=”.\BCDEMO”, filter=type=report;ID=4
- Step 3: ใช้ tool TXT2AL โดยใช้คำสั่ง txt2al.exe –Source=”D:\AMADDEV\ConvertCalToAl\CAL” –Target=”D:\AMADDEV\ConvertCalToAl\AL” –ExtensionStartId=4
ตอนนี้คุณก็ได้ solution ในการ convert code จาก C/AL ไปเป็น AL แล้ว หากคุณสนใจศึกษาเพิ่มเติมเกี่ยวกับการ developement โปรแกรม Microsoft Dynamics 365 Business Central แบบภาษาไทย ก็สามารถติดตามได้จากบทความภายใน blog นี้ได้เลยครับ แล้วเจอกันใหม่ในบทความหน้าครับ สวัสดีครับ