รัน C# ไร้ข้อจำกัด Dataverse ด้วย Custom Plugin บน Power Platform

รัน C# ไร้ข้อจำกัด Dataverse ด้วย Custom Plugin บน Power Platform

เจาะลึกการใช้ C# Custom Plugin บน Dataverse เพื่อให้ Power Platform ทำงานได้ยืดหยุ่นขึ้น ไม่ต้องพึ่ง API ภายนอก ใช้กับ Power Apps และ Power Automate ได้ทันที มือใหม่ก็เริ่มได้
how to run any c code

เมื่อ Power Platform ต้องการความยืดหยุ่นระดับ Enterprise — C# Plugin คือกุญแจสำคัญ

Microsoft Power Platform เป็นเครื่องมือที่องค์กรทั่วโลกใช้ในการสร้างแอปพลิเคชันและระบบอัตโนมัติได้อย่างรวดเร็วผ่านแนวคิด Low-code/No-code อย่างไรก็ตาม เมื่อระบบต้องการตอบสนองตรรกะเชิงลึก การประมวลผลเฉพาะทาง หรือต้องจัดการข้อมูลที่ซับซ้อน โซลูชัน Low-code เพียงอย่างเดียวอาจไม่เพียงพอ

นี่จึงเป็นเหตุผลว่าทำไมการพัฒนา Custom Plugin ด้วยภาษา C# บน Microsoft Dataverse จึงเป็นแนวทางที่องค์กรควรให้ความสำคัญ

ข้อจำกัดของ Power Platform ที่คุณอาจเคยพบ

ถ้าคุณเคยสร้างแอป หรือสร้าง Workflow บน Power Platform มาก่อน คุณน่าจะเคยเจอข้อจำกัดที่น่าหงุดหงิดมาบ้าง งานบางอย่างที่ควรจะทำได้ง่ายๆ เช่น การสร้างบาร์โค้ดหรือ QR code, การแยกหรือรวมไฟล์ PDF, การแฮชหรือถอดรหัสสตริง, หรือการแปลงตัวเลขเป็นข้อความ กลับไม่สามารถทำได้โดยตรงในระบบ

ในสถานการณ์แบบนี้ หลายคนรวมถึงผมเอง มักจะต้องหันไปพึ่ง API หรือคอนเนกเตอร์จากภายนอก ซึ่งนั่นหมายถึงต้องจ่ายเพิ่มทั้งค่าบริการ Power Apps หรือ Power Automate Premium และค่าบริการจากผู้ให้บริการภายนอกอีกต่างหาก ซึ่งรวมๆ แล้วค่าใช้จ่ายก็สูงขึ้นอย่างรวดเร็ว ฟังดูไม่ยุติธรรมนักใช่ไหมครับ?

แต่ถ้าผมบอกคุณว่ามีวิธีจัดการทุกอย่างได้ภายใน Power Platform โดยไม่ต้องพึ่งพาโซลูชันจากภายนอกล่ะ? ใช่ครับ มันเป็นไปได้จริง!

แนวทางระดับมืออาชีพ: พัฒนา Custom Plugin ด้วย C# ภายใน Microsoft Dataverse

ขอแนะนำ Custom Plugins ฟีเจอร์ทรงพลังของ Microsoft Dataverse ที่เปิดโอกาสให้คุณขยายขีดความสามารถของแพลตฟอร์มด้วยโค้ด C# ที่เขียนเองได้อย่างอิสระ และเมื่อ deploy เสร็จแล้ว Plugin เหล่านี้สามารถถูกเรียกใช้งานได้ทั้งจาก Power Apps และ Power Automate ได้อย่างราบรื่น

มันคล้ายกับการใช้ API จากภายนอก แต่มีข้อได้เปรียบสำคัญมาก ทุกอย่างทำงานอยู่ภายในสภาพแวดล้อมของ Dataverse ของคุณเอง ซึ่งได้รับการรักษาความปลอดภัยภายใต้ Microsoft 365 tenant อย่างเต็มรูปแบบ

นั่นหมายความว่า ไม่ต้องกังวลเรื่องการส่งข้อมูลสำคัญขององค์กรไปยังบริการภายนอกที่ไม่รู้จักอีกต่อไป และที่ดีที่สุดคือ ไม่มีค่าใช้จ่ายเพิ่มเติม คุณจ่ายแค่ Power Apps หรือ Power Automate Premium เท่านั้น โดยไม่ต้องเสียเงินเพิ่มให้กับโซลูชันจากบุคคลที่สามอีกต่อไปครับ

เตรียมความพร้อมก่อนเริ่มพัฒนา Plugin

ก่อนที่เราจะเริ่มสร้าง Custom Plugin ได้ ต้องมีสิ่งต่อไปนี้ก่อน:

  • สภาพแวดล้อม Power Platform ที่มี Dataverse
  • บัญชีผู้ใช้ต้องมีบทบาทเป็น System Administrator หรือ System Customizer ในสภาพแวดล้อมนั้น
  • ติดตั้ง Microsoft Power Platform CLI
  • มี Plug-in Registration Tool (รวมมากับ Power Platform CLI แล้ว)
  • ติดตั้ง Visual Studio (2019 ขึ้นไป)
  • และแน่นอนว่าต้องมีพื้นฐาน C# บ้าง

ขอสารภาพตามตรงครับ ผมเองก็ไม่เคยเรียน C# อย่างจริงจังมาก่อน ผมพอเขียนโค้ดได้ แต่ C# ไม่ใช่ภาษาที่ผมใช้บ่อย

แต่โชคดีที่ตอนนี้เรามี AI ช่วยเขียนโค้ดได้ ไม่ว่าจะเป็น ChatGPT, Copilot, Gemini, Claude หรือผู้ช่วย AI ตัวอื่นๆ ที่คุณถนัด ก็พร้อมช่วยให้คุณเขียน C# ได้อย่างมั่นใจ

สร้าง Plugin ตัวแรกของคุณ

เอาล่ะครับ มาลุยกันทีละขั้นตอน ผมจะพาคุณสร้าง Plugin ตั้งแต่เริ่มต้น

จริงๆ แล้วมันมีหลายวิธีให้เลือก แต่ผมจะพาไปในวิธีที่ง่ายที่สุด วิธีที่คนไม่มีพื้นฐาน C# อย่างผมก็ทำได้

หมายเหตุ: คู่มือนี้จะไม่เจาะลึกเรื่อง syntax ของภาษา C# มากนัก จุดประสงค์หลักคือการสอนให้คุณสร้าง Custom Plugin สำหรับ Microsoft Dataverse ให้ได้สำเร็จครับ

ขั้นตอนการสร้าง Custom Plugin แบบละเอียด

  • ขั้นตอนที่ 1: ติดตั้ง Visual Studio

ดาวน์โหลดและติดตั้ง Visual Studio (แนะนำ 2019 ขึ้นไป) โดยต้องเลือก workload ชื่อว่า .NET desktop development ระหว่างติดตั้ง เพื่อให้มีเครื่องมือสำหรับสร้าง Plugin ในภายหลัง

ขั้นตอนการสร้าง Custom Plugin แบบละเอียด
  • ขั้นตอนที่ 2: สร้าง Plugin Project ด้วย Power Platform CLI

ขั้นตอนที่ 2: สร้าง Plugin Project ด้วย Power Platform CLI

เปิด Command Prompt แล้วสร้างโฟลเดอร์ใหม่เพื่อเก็บโปรเจกต์ จากนั้นรันคำสั่ง:

				
					pac plugin init --skip-signing
				
			
เปิด Command Prompt แล้วสร้างโฟลเดอร์ใหม่เพื่อเก็บโปรเจกต์ จากนั้นรันคำสั่ง

คำสั่งนี้จะสร้างไฟล์พื้นฐานของ Plugin (เช่น .csproj, Plugin1.cs, assembly key ฯลฯ)

คำสั่งนี้จะสร้างไฟล์พื้นฐานของ Plugin (เช่น .csproj, Plugin1.cs, assembly key ฯลฯ)
  • ขั้นตอนที่ 3: เปิดโปรเจกต์ใน Visual Studio

เปิด Visual Studio แล้วเลือก “Open a project or solution”

ขั้นตอนที่ 3: เปิดโปรเจกต์ใน Visual Studio

แล้วเปิดไฟล์ .csproj ที่ CLI สร้างขึ้นมา

แล้วเปิดไฟล์ .csproj ที่ CLI สร้างขึ้นมา
เปิด Visual Studio
  • ขั้นตอนที่ 4: สร้างคลาสใหม่สำหรับ Plugin

สมมติว่าไฟล์ .cs หนึ่งไฟล์เท่ากับ Plugin หนึ่งตัว ดังนั้นเราจะสร้างคลาสใหม่ขึ้นมาหนึ่งคลาสเพื่อรองรับ Plugin ตัวนี้

ขั้นตอนที่ 4: สร้างคลาสใหม่สำหรับ Plugin
  1. คลิกขวาที่ชื่อโปรเจกต์ → เลือก Add → เลือก New Item
  2. หน้าต่างจะปรากฏให้เลือกชนิดไฟล์ ให้เลือก “Class”
  3. ตั้งชื่อไฟล์เป็น GenerateBarcode.cs (หรือชื่อใดก็ได้ตามวัตถุประสงค์ของ Plugin)

เมื่อกด “Add” ระบบจะสร้างคลาสใหม่ขึ้นมาให้ พร้อมสำหรับเริ่มเขียนโค้ดในขั้นตอนต่อไป

				
					public class GenerateBarcode : IPlugin 

{ 

public void Execute(IServiceProvider serviceProvider) 

{ 

// Logic ในการสร้าง Barcode หรือ QR Code 

} 

} 
				
			
หน้าต่างจะปรากฏให้เลือกชนิดไฟล์ ให้เลือก “Class”
ตั้งชื่อไฟล์เป็น GenerateBarcode.cs (หรือชื่อใดก็ได้ตามวัตถุประสงค์ของ Plugin)

คุณสามารถสร้างได้หลายคลาสในหนึ่งโปรเจกต์ หากมีหลาย Plugin ที่ต้องการลงทะเบียนแยกกัน

  • ขั้นตอนที่ 5: เขียนโค้ด C# สำหรับ Plugin

ต้องยอมรับตามตรงว่านี่คือขั้นตอนที่ยากที่สุดสำหรับผม เพราะอย่างที่บอกไปก่อนหน้านี้ ผมไม่มีพื้นฐาน C# มาก่อน และยังไม่รู้ด้วยซ้ำว่าควรเริ่มยังไงดี

โชคดีที่เรามีผู้ช่วย AI แบบ Generative AI อยู่ในมือ อย่างในกรณีนี้ ผมเลือกใช้ ChatGPT

สิ่งที่ต้องทำก็แค่ อธิบายให้ชัดเจนว่าเราต้องการให้ปลั๊กอินทำหน้าที่อะไร และอย่าลืมบอกไปด้วยว่า “โค้ดนี้เขียนเพื่อใช้ใน Dynamics 365 Custom Plugin” — บริบทตรงนี้สำคัญมาก เพราะจะช่วยให้ AI เข้าใจกรอบการทำงานที่เหมาะสม

เคล็ดลับ: คุณสามารถก๊อปโค้ดจากไฟล์ Plugin1.cs (ที่ถูกสร้างอัตโนมัติจาก CLI) ไปใส่ใน ChatGPT เพื่อให้ AI ใช้เป็นจุดเริ่มต้นในการเขียนโค้ดให้คุณก็ได้

ขั้นตอนที่ 5: เขียนโค้ด C# สำหรับ Plugin
อธิบายให้ชัดเจนว่าเราต้องการให้ปลั๊กอินทำหน้าที่อะไร

ส่วนใหญ่แล้ว การเขียนโค้ดลักษณะนี้ เรามักต้องใช้ Library เพื่อไม่ต้องเขียนฟังก์ชันพื้นฐานซ้ำเอง เช่น ไลบรารีสำหรับสร้างบาร์โค้ด, ทำงานกับ PDF หรือจัดการรูปภาพ

หากโค้ดของคุณต้องพึ่งไลบรารีภายนอก ก็สามารถติดตั้งได้ง่าย ๆ ผ่าน NuGet Package Manager ที่มีให้ใน Visual Studio โดยไม่ต้องตั้งค่าซับซ้อนอะไรเพิ่มเติม

หากโค้ดของคุณต้องพึ่งไลบรารีภายนอก ก็สามารถติดตั้งได้ง่าย ๆ ผ่าน NuGet Package Manager ที่มีให้ใน Visual Studio โดยไม่ต้องตั้งค่าซับซ้อนอะไรเพิ่มเติม
หลังจากติดตั้งไลบรารีที่จำเป็นและแก้ไขข้อผิดพลาด (ถ้ามี) เรียบร้อยแล้ว ก็พร้อมไปต่อยังขั้นตอนถัดไปได้เลย

หลังจากติดตั้งไลบรารีที่จำเป็นและแก้ไขข้อผิดพลาด (ถ้ามี) เรียบร้อยแล้ว ก็พร้อมไปต่อยังขั้นตอนถัดไปได้เลย

หมายเหตุ: ขั้นตอนนี้อาจต้องอาศัยความรู้ด้านการเขียนโค้ดระดับหนึ่ง เพราะบางครั้งโค้ดจาก AI อาจใช้ไม่ได้จริงทันที ต้องมีการปรับแก้หรือ Debug เพิ่มเติมบ้างก่อนนำไปใช้จริง

  • ขั้นตอนที่ 6: ตรวจสอบ Input / Output Parameters

เหมือนกับการเรียกใช้งาน API ทั่วไป Custom Plugin ของคุณจะต้องมีทั้ง Input และ Output เพื่อรับค่าเข้าและส่งค่ากลับ

ถ้าคุณลองเปิดดูในโค้ด C# ที่เขียนไว้ จะเห็นว่า ตัวแปรสำหรับ Input และ Output ได้มีการกำหนดไว้เรียบร้อยแล้วในคลาสของ Plugin

สิ่งสำคัญคือ จดบันทึกให้ดีว่ามี Input และ Output อะไรบ้าง เพราะในขั้นตอนต่อไป คุณจะต้องใช้ข้อมูลนี้ตอนลงทะเบียน Custom API ใน Dataverse เพื่อให้ระบบรู้ว่าต้องรับอะไรเข้าไป และจะส่งค่ากลับมาแบบไหน

การกำหนด Input/Output อย่างถูกต้องตั้งแต่ตรงนี้ จะช่วยให้การเชื่อมต่อผ่าน Power Automate หรือ Power Apps ทำงานได้อย่างราบรื่นภายหลัง

การกำหนด Input/Output อย่างถูกต้องตั้งแต่ตรงนี้ จะช่วยให้การเชื่อมต่อผ่าน Power Automate หรือ Power Apps ทำงานได้อย่างราบรื่นภายหลัง
  • ขั้นตอนที่ 7: Build Project เพื่อสร้าง Plugin Package

เมื่อคุณเขียนโค้ดเสร็จเรียบร้อยทุกอย่างแล้ว ขั้นตอนต่อไปก็คือการ Build โปรเจกต์ ซึ่งก็คือการนำซอร์สโค้ดทั้งหมดที่คุณเขียน มาคอมไพล์และรวมกันเป็น ไฟล์แพ็กเกจเดียว (single package file)

ขั้นตอนที่ 7: Build Project เพื่อสร้าง Plugin Package

ผลลัพธ์ของการ Build จะได้ออกมาเป็นไฟล์นามสกุล .nupkg (NuGet Package)

คุณจะต้องใช้ไฟล์ .nupkg นี้ในขั้นตอนถัดไป เพื่อทำการนำ Plugin เข้าไปลงทะเบียนใช้งานใน Dataverse

ดังนั้นอย่าลืมตรวจสอบให้แน่ใจว่า Build ผ่านและไฟล์ .nupkg ถูกสร้างขึ้นในโฟลเดอร์ที่กำหนดไว้เรียบร้อยแล้ว

ดังนั้นอย่าลืมตรวจสอบให้แน่ใจว่า Build ผ่านและไฟล์ .nupkg ถูกสร้างขึ้นในโฟลเดอร์ที่กำหนดไว้เรียบร้อยแล้ว

  • ขั้นตอนที่ 8: ลงทะเบียน Plugin บน Dataverse

รันคำสั่งต่อไปนี้เพื่อเปิด Plugin Registration Tool (PRT):

				
					pac tool prt 
				
			
ขั้นตอนที่ 8: ลงทะเบียน Plugin บน Dataverse
หน้าต่าง PRT จะปรากฏขึ้น ให้คลิก Create new connection เพื่อเชื่อมต่อกับ Dataverse environment ของคุณ
จากนั้นหน้าต่าง PRT จะปรากฏขึ้น ให้คลิก Create new connection เพื่อเชื่อมต่อกับ Dataverse environment ของคุณ
หลังจากโหลดข้อมูลไม่กี่วินาที ให้คลิกเมนู View → Display by Package
หลังจากโหลดข้อมูลไม่กี่วินาที ให้คลิกเมนู View → Display by Package
หลังจากนั้นคลิกเมนู Register → Register New Package
หลังจากนั้นคลิกเมนู Register → Register New Package
เลือกไฟล์ .nupkg ที่ build ไว้ (จะเลือก Solution สำหรับจัดเก็บก็ได้ถ้าต้องการ) แล้วกด Import
เลือกไฟล์ .nupkg ที่ build ไว้ (จะเลือก Solution สำหรับจัดเก็บก็ได้ถ้าต้องการ) แล้วกด Import
เมื่อสำเร็จคุณจะเห็นชื่อ package ปรากฏในหน้าต่าง PRT ซึ่งแปลว่าโค้ด Plugin ของคุณได้ถูก deploy เรียบร้อยแล้วบน Dataverse
เมื่อสำเร็จคุณจะเห็นชื่อ package ปรากฏในหน้าต่าง PRT ซึ่งแปลว่าโค้ด Plugin ของคุณได้ถูก deploy เรียบร้อยแล้วบน Dataverse
  • ขั้นตอนที่ 9: สร้าง Custom API เพื่อเรียก Plugin

ขั้นตอนถัดไป เราจำเป็นต้องสร้างสิ่งที่เรียกว่า Custom API เพราะเราไม่สามารถเรียกใช้งานโค้ดในคลาส C# ได้โดยตรง

    • ก่อนอื่น เราต้องผูก (bind) โค้ด C# เข้ากับ Custom API นี้ก่อน
    • ให้คลิกที่เมนู ‘Register’ → ‘Register New Custom API’
ขั้นตอนที่ 9: สร้าง Custom API เพื่อเรียก Plugin
    • กรอกข้อมูลให้ครบถ้วน จากนั้นเลือก Assembly ที่เป็นแพ็กเกจของคุณ และเลือกชื่อคลาสสำหรับ Plugin
    • หลังจากนั้น คุณจะต้องกำหนด Request Parameters ซึ่งหมายถึง ค่าที่รับเข้า (Input) และ Response Parameters ซึ่งหมายถึง ค่าที่ส่งกลับ (Output) ซึ่งทั้งสองส่วนนี้ต้องตรงกับที่คุณกำหนดไว้ในโค้ด
สุดท้าย ให้คลิก ‘Register’ เพื่อดำเนินการลงทะเบียนให้เสร็จสมบูรณ์

หากคุณต้องการจำกัดการเข้าถึง Custom API นี้ให้เฉพาะผู้ใช้งานบางกลุ่ม คุณสามารถใช้สิทธิ์ (Privileges) เพื่อควบคุมว่าใครสามารถเรียกใช้งาน API นี้ได้ [คลิกดูข้อมูลเพิ่มเติม]

สุดท้าย ให้คลิก ‘Register’ เพื่อดำเนินการลงทะเบียนให้เสร็จสมบูรณ์

  • ขั้นตอนที่ 10: ทดสอบ Plugin

ถึงเวลาในการทดสอบ Plugin แล้ว โดยคุณสามารถใช้ Power Automate เพื่อทดสอบได้ผ่าน action ที่ชื่อว่า ‘Perform an unbound action’ ซึ่งมาจาก Dataverse connector

คุณจะเห็นชื่อ Custom API ของคุณแสดงอยู่ในช่อง Action Name
ให้กรอกค่าข้อมูลที่จำเป็นในส่วน Input ตามที่คุณต้องการ

ขั้นตอนที่ 10: ทดสอบ Plugin

ผ่าน Power Automate

ผ่าน Power Automate
  • ใช้ Action ชื่อ “Perform an unbound action”
  • เลือก Custom API ที่คุณเพิ่งสร้าง
  • กรอกค่าตาม Input Parameter

ในกรณีที่ใช้ Power Apps คุณสามารถเพิ่มตารางที่ชื่อว่า ‘Environment’ ลงในแอป แล้วใช้สูตร (formula) ตามภาพตัวอย่างด้านล่าง เพื่อเรียกใช้งาน Custom API ของคุณได้เช่นกัน

ผ่าน Power Apps

ผ่าน Power Apps
  • สร้าง table ‘Environment’ ชั่วคราวเพื่อเชื่อมกับ formula

  • เรียก API ผ่านฟังก์ชัน Power Fx เช่น:

				
					Environment.RunCustomAPIName({ Text: "Hello World" }) 
				
			

สรุป: พลิกเกมการพัฒนา Power Platform ด้วย C# Custom Plugin

Custom Plugin คือเครื่องมือทรงพลังที่ทำให้ Power Platform กลายเป็นแพลตฟอร์มแบบ Full-code ได้ในทันที คุณสามารถประมวลผลข้อมูลซับซ้อนในระดับ backend ได้โดยไม่ต้องพึ่ง REST API จากภายนอก ลดทั้งค่าใช้จ่ายและความเสี่ยงด้านความปลอดภัย

สำหรับองค์กรที่ใช้งาน Quick ERP ร่วมกับ Microsoft Dataverse การใช้ Custom Plugin สามารถต่อยอดสู่ระบบ ERP อัจฉริยะ เช่น:

  • การแปลง PO เป็น QR สำหรับคลังสินค้า
  • การประมวลผลเลขที่ใบแจ้งหนี้
  • การสร้างเอกสารแบบไดนามิกภายในระบบ

Quick ERP สนับสนุนการทำงานร่วมกับ Dataverse และสามารถใช้ Custom API เหล่านี้ร่วมกับโซลูชัน ERP ได้อย่างไร้รอยต่อ

แหล่งที่มา : PAWIT.PW

ก้าวเข้าสู่ Digital Business

ดูผลิตภัณฑ์ที่เกี่ยวข้องได้ที่นี่

powerapps
Power Apps
ลดต้นทุนการพัฒนาของคุณและทำสิ่งต่างๆ มากขึ้นด้วยทรัพยากรที่น้อยลง โดยช่วยให้ทุกคนสามารถสร้างและแชร์แอปได้อย่างรวดเร็วโดยใช้ Power Apps
Power Automate Screen 1
Power Automate
ทำงานน้อยลงแต่ได้ผลมากขึ้นด้วยการปรับให้งานและกระบวนการทางธุรกิจที่ซ้ำๆ ให้ง่ายขึ้น เพิ่มประสิทธิภาพ และลดต้นทุนด้วย Microsoft Power Automate
Table of Content