ขั้นตอนการสร้าง .NET DLL (Library Class) ไว้ใช้งานเอง บน Dynamics 365 Business Central

Spread the love

มาเขียน .NET dll (class library) ไว้ใช้งานเองให้กับโปรแกรม Microsoft Dynamics 365 Business Central กันดีกว่า

สวัสดีครับ ในบทความนี้ก็จะเป็นวิธีการสร้างไฟล์ dll ที่เป็น library ไว้เรียกใช้งานในกรณีที่เราไม่สามารถแก้ปัญหา (solution) ผ่าน AL Language นะครับ ซึ่งสามารถใช้ความรู้การเขียนโปรแกรมภาษา .NET มาประยุกต์ใช้งานกับ AL Language ของ Dynamics 365 Business Central ได้นั่นเอง

โดยทั่วไปแล้ว คำสั่งพื่นฐานของ .NET จะมีให้เรียกใช้เป็น object บน AL Language แต่ก็อาจจะมีบางคำสั่งที่ไม่มีให้เรียกใช้งาน ซึ่งเราจำเป็นต้องสร้าง dll library ขึ้นมาแล้วเรียกฟังก์ชั่นผ่าน AL Extension ครับ วิธีการเป็นยังไง ไปดูกันเลยครับ

หมายเหตุ: การเขียน dll เพื่อมาเรียกใช้งานสามารถทำได้แค่บน Dynamics 365 Business Central แบบ On-Premise เท่านั้นนะครับ หากเป็น On-Cloud จำเป็นจะต้องใช้ Azure Function หรืออาจต้องเขียน Web Service มาเรียกใช้แทน

ในบทความนี้จะประกอบไปด้วย

Create Your DLL

สิ่งแรกที่คุณจำเป็นต้องมีคือโปรแกรม Visual Studio ซึ่งสามารถดาวน์โหลดได้ที่

https://visualstudio.microsoft.com/vs/community/

ซึ่งจะเป็นเวอร์ชั่น Community ซึ่งสามารถใช้งานได้ฟรี หากต้องการดูวิธีการติดตั้งโปรแกรมสามารถดูได้จากบทความนี้

Visual Studio Community สำหรับแก้ไข Report Layout บน Business Central

เมื่อติดตั้งโปรแกรมเสร็จแล้ว เราก็ไปเริ่มสร้าง DLL (Class Library) กันเลยครับ โดยการเปิดโปรแกรม Visual Studio 2019 Community ขึ้นมา

ให้เลือก Create a new project ครับ

how-to-own-dll-library-for-dynamics-365-business-central-1

จากนั้นให้เลือก Class Library (.NET Framework) ที่เป็น ภาษา C# นะครับ แล้วก็กดปุ่ม Next ที่อยู่ด้านล่างได้เลย

how-to-own-dll-library-for-dynamics-365-business-central-2

ให้ตั้งชื่อ Project ครับ สำหรับผมจะขอตั้งว่า BusinessCentralDLL ครับ

how-to-own-dll-library-for-dynamics-365-business-central-3

เสร็จแล้วให้กดปุ่ม Create ที่มุมขวาล่างได้เลยครับ

how-to-own-dll-library-for-dynamics-365-business-central-4

เมื่อเสร็จแล้วก็ได้จะหน้าตา Project แบบนี้ออกมาครับ

how-to-own-dll-library-for-dynamics-365-business-central-5

ผมจะสร้าง Method ง่าย ๆ เพื่อ ทดสอบเรียกใช้งานผ่าน AL Extension ว่าสามารถทำงานได้จริงหรือเปล่า โดยจะสร้าง Method เพื่อ return ข้อความ กลับมายังโปรแกรม Dynamics 365 Business Central ครับ

how-to-own-dll-library-for-dynamics-365-business-central-6
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BusinessCentralDLL
{
    public class BusinessCentralClass
    {
        public string SayHello()
        {
            return "Hello from a .NET DLL";
        }
    }
}

เมื่อเขียน Code เสร็จเรียบร้อยแล้ว ขั้นตอนต่อไปเราก็จะทำการ Build เพื่อให้ได้ไฟล์ DLL ที่มี Class และ Method ที่เราเขียนอยู่ข้างใน โยให้เลือกที่ Build > Build Solution หรือจะกด Ctrl + Shift + B สำหรับคีย์ลัดก็ได้ครับ

how-to-own-dll-library-for-dynamics-365-business-central-7

หาก Build เสร็จแล้ว ไม่ติด Error อะไรก็จะได้ข้อความแบบรูปด้านล่างนี้ครับ

how-to-own-dll-library-for-dynamics-365-business-central-8

โดยในข้อความจะบอก Location ของไฟล์ DLL ที่ถูก Build ออกมาอยู่ ให้เปิด Folder ตาม Path นั้นได้เลย ก็จะเจอกับไฟล์ BusinessCentralDLL.dll

how-to-own-dll-library-for-dynamics-365-business-central-9

Locate the DLL to Dynamics 365 Business Central

ขั้นตอนต่อไป หลังจากที่ได้ไฟล์ DLL (Class Library) แล้ว เราก็จะนำไปวางใน Folder เพื่อให้ตัวโปรแกรม Dynamics 365 Business Central รู้จักกับไฟล์ DLL ของเราครับ

ให้ทำการ Copy ไฟล์ BusinessCentralDLL.dll แล้วนำไปวางที่ Folder ต่อไปนี้

C:\Windows\Microsoft.NET\assembly
how-to-own-dll-library-for-dynamics-365-business-central-10

และ

C:\Program Files\Microsoft Dynamics 365 Business Central\150\Service\Add-ins
how-to-own-dll-library-for-dynamics-365-business-central-11

หมายเหตุ: Directory นี้ขึ้นอยู่กับว่าคุณใช้งาน Business Central เวอร์ชั่นอะไรอยู่นะครับ ในที่นี้ผมใช้ BC15 ดังนั้น Directory ก็จะเป็น 150 แต่หากคุณใช้งานกับ BC14 Directory ก็จะเป็น 140

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

• ขั้นตอนการติดตั้ง AL Language บน Visual Studio Code สำหรับ Microsoft Dynamics 365 Business Central
เริ่มต้นสร้าง Extension แรกบน MS Dynamics 365 BC ตอนที่ 1 – New Table

AL Extension Setup

หลังจากที่คุณนำไฟล์ BusinessCentralDLL.dll ไปวางไว้ใน Directory ทั้งสองแล้ว จากนั้นให้เปิดตัวโปรแกรม Visual Studio Code ขึ้นมา จากนั้นกดปุ่ม Ctrl + Comma จะมีหน้าต่าง settings เปิดขั้นมา

how-to-own-dll-library-for-dynamics-365-business-central-12

ที่ช่อง Search settings พิมพ์ al.assemblyProbingPaths

how-to-own-dll-library-for-dynamics-365-business-central-13

จากนั้นคลิกที่ปุ่ม Add Item แล้วเพิ่มสอง Directory ที่คุณนำไฟล์ BusinessCentralDLL.dll ไปวาง

c:/Windows/assembly/

และ

C:/Program Files/Microsoft Dynamics 365 Business Central/150/Service/Add-ins

จะได้ตามรูปด้านล่าง

how-to-own-dll-library-for-dynamics-365-business-central-14

เสร็จแล้วให้ทำการ restart โปรแกรม Visual Studio Code หรือ ปิดโปรแกรม แล้ว เปิดใหม่ (จำเป็นทุกครั้งเมื่อมีการแก้ไข Configuration)

Call DLL Method from AL Extension

เมื่อขั้นตอนการเตรียมไฟล์เสร็จเรียบร้อยแล้ว ต่อไปก็จะเริ่มเขียน Code กันเลย

ทำการสร้าง AL Project ขึ้นมา โดยกด Ctrl + Shift + P แล้วเลือก AL: GO

how-to-own-dll-library-for-dynamics-365-business-central-15

โดยผมจะตั้งชื่อ Project ว่า CallMethodFromDLL

how-to-own-dll-library-for-dynamics-365-business-central-16

จากนั้นไปที่ไฟล์ app.json แล้วเพิ่ม “target”:”OnPrem” เพื่อเป็นการบอกว่า target ในการ deployement ของโปรเจคนี้คือ on-premise

how-to-own-dll-library-for-dynamics-365-business-central-17

สร้างไฟล์สำหรับประกาศ .NET package

how-to-own-dll-library-for-dynamics-365-business-central-18
dotnet
{
    assembly(BusinessCentralDLL)
    {
        type("BusinessCentralDLL.BusinessCentralClass"; BusinessCentralClass) { }
    }
}

ในส่วนนี้ถ้าไม่มี error ก็มาได้เกินครึ่งทางแล้วครับ

ต่อไปเราจะลองเรียก Method ที่เราสร้างไว้ในไฟล์ BusinessCentralDLL.dll กันครับ

ให้ไปที่ไฟล์ HelloWorld.al ที่อยู่ด้านซ้ายมือนะครับ

how-to-own-dll-library-for-dynamics-365-business-central-19

แล้วเขียน code ตามด้านล่างครับ

how-to-own-dll-library-for-dynamics-365-business-central-20
pageextension 50100 CustomerListExt extends "Customer List"
{
    trigger OnOpenPage();
    var
        BusinessCentralClass: DotNet BusinessCentralClass;
    begin
        BusinessCentralClass := BusinessCentralClass.BusinessCentralClass();
        Message(BusinessCentralClass.SayHello());
    end;
}

Testing

เมื่อเขียน Code เสร็จเรียบร้อยแล้วเราก็จะมาลองเทสดูนะครับ

อย่าลืม Download Symbol ก่อน Install และ Publish นะครับ หาก Download Symbol แล้วเกิด Error สามารถตรวจสอบจาก Check List ในบทความนี้ได้เลย

Check List เมื่อไม่สามารถ Download Symbols ให้กับ AL Extension ได้

เมื่อทำการ Download Symbol เรียบแล้วแล้วก็สามารถ Install และ Publish โดยการกดปุ่ม Crtl + F5 ได้เลย

หากขึ้นข้อความด้านล่างก็เป็นอันว่าไม่มี Syntax Error อะไร

how-to-own-dll-library-for-dynamics-365-business-central-21

หากมี Error ด้านล่างนี้

Error: Could not open the specified startup page. Please check that the server configuration key PublicWebBaseUrl has been properly set.

สามารถแก้ไขได้ผ่านบทความนี้

Publish และ Install Extension แล้ว Web Client ไม่ Start up

จาก Code ด้านบนเราเขียนไว้ว่า ถ้าเปิดหน้า Customers เมื่อ Page ถูก Open ขึ้นมา จะให้แสดง Message Box โดยเรียก Method ชื่อว่า SayHello จาก BusinessCentralClass ที่อยู่ใน BusinessCentralDLL

how-to-own-dll-library-for-dynamics-365-business-central-22

หากขึ้น Message Box ว่า “Hello from a .NET DLL” ก็เป็นอันเสร็จเรียบร้อยสมบูรณ์ครับ

การเขียน .NET DLL Class Library นั่นช่วยให้การทำงานบน Dynamics 365 Business Central สามารถทำงานได้ง่าย และหลากหลายขึ้น แต่ทางผู้เขียนแนะนำว่าให้ใช้เท่าที่จำเป็นก็พอครับ เช่น ในส่วนที่เกิดขีดจำกัดของ AL Language

หาก Code ส่วนไหนสามารถเขียนเป็น AL Language ได้ก็ควรเป็นเป็น AL Language เพื่อไม่ให้เกิดความ ซับซ้อนมากเกินไปหากคุณต้องทำงานกับหลาย ๆ คน

สุดท้ายก็ขอขอบคุณทุกท่านที่อ่านมาจนถึงจุดนี้ แล้วเจอกันใหม่ในบทความหน้าครับ สวัสดีครับ

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 *