เข้าใจการจัดการ Dependencies, Layers, Patch และ Clone เพื่อระบบที่มั่นคงและขยายต่อได้
กลับมาพบกันอีกครั้งในซีรีส์บทความสำหรับผู้เริ่มต้นใช้งาน Power Platform โดยใน Part แรก เราได้พูดถึงแนวคิดเบื้องต้นของ Application Lifecycle Management (ALM) ไปแล้ว สำหรับ Part นี้ เราจะเจาะลึกในประเด็นสำคัญของการใช้งาน “Solution” ให้ถูกต้อง เป็นระบบ และเหมาะกับการพัฒนาระบบระดับองค์กร
Quick ERP ได้นำแนวทาง ALM นี้ไปใช้จริงในการวางโครงสร้างระบบ Power Platform ร่วมกับ Microsoft Dynamics 365 ให้กับลูกค้าองค์กรหลากหลายอุตสาหกรรม เพื่อให้การพัฒนาและดูแลระบบเป็นไปอย่างมีประสิทธิภาพต่อเนื่อง
หากคุณยังไม่ได้อ่านบทความตอนแรก แนะนำให้อ่านเพื่อปูพื้นฐานก่อน >> [อ่านบทความตอนแรก]
หัวข้อในบทความนี้
- Dependencies
- Solution Layers
- Managed Properties
- Patch Solution
- Clone Solution
Dependencies
Dependencies คือความสัมพันธ์ระหว่าง Object ใน Solution เช่น Power Apps, Dataverse table และ Power Automate Flow เมื่อ Object พึ่งพาอีกวัตถุหนึ่งอยู่ ระบบจะไม่อนุญาตให้ลบหรือแก้ไขสิ่งนั้นได้โดยตรงหากยังมีการเชื่อมโยงอยู่ เพื่อป้องกันความเสียหายของระบบโดยไม่ตั้งใจ
เช่น ถ้าคุณมี Power Apps ที่ใช้ Dataverse table เป็นฐานข้อมูล และยังเชื่อมต่อกับ Power Automate Flow เพื่อทำงานบางอย่างร่วมกัน แอปตัวนั้นจะมีความ “พึ่งพา” หรือมี Dependency กับทั้ง Table และ Flow ที่ใช้งานอยู่
สิ่งที่ตามมาคือ ถ้าคุณพยายามจะลบ Table หรือ Flow ที่ถูกใช้งานอยู่โดย Power Apps ตัวนั้น ระบบจะไม่อนุญาตให้ลบโดยตรง เพราะจะทำให้แอปที่เชื่อมโยงอยู่ทำงานไม่ได้ เป็นกลไกป้องกันความเสียหายที่เกิดจากการลบวัตถุโดยไม่ตั้งใจ
วิธีตรวจสอบ Dependencies
- คลิกปุ่ม … ของ object ที่ต้องการ
- เลือก Advanced
- เลือก Show dependencies
จะปรากฏหน้าต่างแสดงข้อมูล 3 ส่วน:
การเข้าใจ Dependencies จะช่วยให้คุณมองเห็นภาพรวมของโครงสร้าง Solution ได้ชัดเจนขึ้น โดยเฉพาะเวลาแก้ไข หรือล้าง object ออกจากระบบ จะได้ไม่เกิดปัญหาซ้อนซ้อนที่ยากจะตรวจสอบในภายหลัง
Solution Layers
Solution Layer คือ “ชั้น” ของการเปลี่ยนแปลงที่เกิดขึ้นกับวัตถุในระบบ โดยแต่ละ Layer แสดงถึงว่า object นั้นถูกสร้างหรือแก้ไขโดย Solution ไหน
ตัวอย่างเช่น แอปที่ถูก import ผ่าน Managed Solution จะมีเพียงหนึ่ง Layer แต่หากมีการแก้ไขเพิ่มเติมใน Environment ปลายทาง ระบบจะสร้าง Layer ใหม่ชื่อว่า Unmanaged Layer ทับไว้ ทำให้การแก้ไขจากต้นทางจะไม่แสดงผลจนกว่าจะลบ Layer นี้ออก
วิธีดู Layers
คลิก … บน object ที่ต้อการ
เลือก Advanced
เลือก See solution layers
ระบบจะแสดงเลเยอร์ของ object นั้นให้ดู ถ้า object นั้นอยู่ใน unmanaged solution จะมีแค่ unmanaged layer เลเยอร์เดียว
แต่ถ้าเราไปดู object ที่อยู่ใน managed solution ซึ่งเราได้ deploy ไปยัง environment ปลายทางแล้ว เราจะเริ่มเห็นความแตกต่าง
ยกตัวอย่างเช่น ด้านล่างนี้คือเลเยอร์ของ Power Apps ที่ environment ปลายทาง ซึ่งในตอนนี้ก็ยังมีอยู่แค่ เลเยอร์เดียว ซึ่งก็ถูกต้องแล้วครับ เพราะถ้า solution ถูก deploy มาตามปกติ และไม่ได้มีการเชื่อมกับ solution อื่น ตัว object ข้างในก็จะมีเลเยอร์เดียวตามนั้น
แล้วถ้าเราเข้าไปแก้ไข object ที่อยู่ใน managed solution ล่ะ?
ผมลองกดเข้าไปแก้ไขแอปตัวนี้ ซึ่งอยู่ใน managed solution โดยลองแก้อะไรซักอย่างนึง
หลังจากแก้และบันทึกเสร็จ กลับมาดู Solution Layer อีกครั้ง ตอนนี้จะเห็นว่ามีอีกเลเยอร์เพิ่มขึ้นมาซ้อนด้านบน เรียกว่า Unmanaged layer โดยเลเยอร์นี้จะเกิดขึ้นก็ต่อเมื่อมีการ แก้ไข object ที่อยู่ใน managed solution เท่านั้น
ซึ่งในตอนนี้ สิ่งที่ End User เห็นและเข้าใช้งาน ก็คือ แอปที่ถูกแก้ไขแล้ว ซึ่งแสดงผลตามเลเยอร์บนสุดนั่นเอง (Unmanaged layer)
ปัญหาที่ตามมา
พอเป็นแบบนี้ ต่อให้เรากลับไปแก้แอปที่ environment ต้นทาง แล้ว import solution กลับเข้ามาใหม่ที่ปลายทางอีกกี่ครั้ง End User ก็จะไม่เห็นการเปลี่ยนแปลงนั้นเลย เพราะถูก unmanaged layer ที่ปลายทาง ทับอยู่ นั่นเอง
วิธีลบ Unmanaged Layer
สามารถลบได้เพื่อคืน object กลับสู่สถานะ Managed ซึ่งจะทำให้การแก้ไขจากต้นทางสามารถแสดงผลได้ตามปกติ
ถ้าเผลอสร้าง unmanaged layer ขึ้นมาแล้ว ก็สามารถ ลบออกได้ เช่นกัน เมื่อเราลบ unmanaged layer ออก ตัว object นั้นก็จะกลับเข้าสู่สถานะ managed และเหลือเลเยอร์เดียวเหมือนเดิม
แต่ต้องระวังว่า:
หากลบ unmanaged layer การแก้ไขใดๆก็ตามที่ถูกทำใน unmanaged layer นั้น จะถูกนำออกทั้งหมด
ถ้าคุณไม่อยากให้เกิด unmanaged layer ขึ้นมาโดยไม่ตั้งใจ แนะนำให้อ่านหัวข้อถัดไปคือ Managed Properties เพื่อดูวิธีควบคุมการแก้ไข object ใน environment ปลายทางครับ
Managed Properties
Managed properties คือการตั้งค่าที่ใช้กำหนดว่า object หนึ่ง ๆ (เช่น App, Table, Column ฯลฯ) จะสามารถถูกแก้ไขอะไรได้บ้าง หลังจากที่ถูก import เข้ามาใน environment แบบ managed solution
พูดง่าย ๆ คือ เราใช้ Managed properties เพื่อ “ล็อกสิทธิ์” ว่า component นี้จะแก้ได้หรือไม่ได้ เมื่ออยู่ใน production หรือปลายทาง
วิธีตั้งค่า
หมายเหตุ: การตั้งค่า Managed properties สามารถทำได้เฉพาะตอนที่ object นั้นอยู่ใน unmanaged solution เท่านั้น
- คลิก … บน object ใน Unmanaged Solution
- เลือก Advanced
- เลือก Managed properties
ซึ่งถ้าเราปิดตรงนี้ (ไม่อนุญาตให้แก้ไข) เราจะมั่นใจได้เลยว่าแอปที่ถูก import ไปที่ environment ปลายทางด้วย managed solution จะไม่สามารถถูกแก้ไขได้แน่นอน หากจะแก้ไขต้องกลับมาแก้ที่ environment ต้นทาง และ import ไปใหม่เท่านั้น
จากภาพด้านล่างจะเห็นว่าเราไม่สามารถกด Edit แอปที่ environment ปลายทางได้เลย ไม่ว่าจะเป็น Owner หรือต่อให้เป็น Admin สูงสุดยังไง ก็ไม่สามารถแก้ไขได้
Patch Solution
มาถึงหัวข้อที่บอกเลยว่า มีประโยชน์มาก ๆ โดยเฉพาะเวลาที่เราต้องการ deploy การแก้ไข เพียงบางส่วน ของ solution โดย ยังไม่อยากยกทั้งหมดขึ้นไป
ถ้าอธิบายให้ง่ายที่สุด Patch Solution เป็นฟีเจอร์ที่ช่วยให้สามารถ deploy เฉพาะวัตถุที่มีการเปลี่ยนแปลง โดยไม่ต้องยกขึ้นไปทั้ง Solution เหมาะสำหรับการทดสอบ ฟีเจอร์ใหม่ หรือการแก้ไขเร่งด่วน
ใช้ในสถานการณ์แบบไหน?
- ใน solution เรามี object อยู่ทั้งหมด 20 ตัว แต่เราแก้ไขแค่ 2 object เท่านั้น
→ เราไม่อยาก import ทั้ง solution เพราะจะใช้เวลานาน - การแก้ไขที่เราจะ deploy ไปยังปลายทาง อาจจะยังไม่แน่ใจว่าจะใช้งานได้ราบรื่นหรือเปล่า
→ อยากสามารถ rollback กลับได้ง่าย ๆ ถ้ามีปัญหา
ในสถานการณ์แบบนี้ การใช้ Patch จะช่วยให้:
- เลือก object ที่จะแก้ไขได้เฉพาะส่วน
- Export และ import ได้เหมือน solution ปกติ
- Rollback ง่าย แค่ลบ patch ออก ระบบจะกลับไปใช้ของ solution หลักเหมือนเดิม
วิธีสร้าง Patch Solution
Step 1: เริ่มจาก Solution หลักของเรา
Step 2: Clone Patch
- ไปที่ solution หลักนั้น
- คลิกปุ่ม …
- เลือก Clone
- แล้วเลือก Clone a patch
จากนั้นตั้ง Version number ให้เหมาะสม โดยเวอร์ชันของ patch ต้องมากกว่าเวอร์ชันของ solution หลักเสมอ
Step 3: เพิ่ม object ที่จะแก้
Step 4: Export และ Deploy
เมื่อเตรียม patch เรียบร้อยแล้ว ก็สามารถ Export solution นี้ออกมา (ในรูปแบบ managed หรือ unmanaged ก็ได้ตามต้องการ) จากนั้นนำไป Import ที่ environment ปลายทาง เช่น UAT หรือ Production
Step 5: ตรวจสอบผลลัพธ์
หลังจาก import patch:
- object ที่อยู่ใน patch เช่น Canvas App จะถูกอัปเดตใน environment ปลายทาง
- แต่ component อื่น ๆ ที่ไม่ได้รวมอยู่ใน patch จะไม่ถูกรบกวนใด ๆ
เรียกได้ว่า Selective Deploy แบบแท้จริง
Rollback ง่าย ไม่ต้องกลัวพัง
หากพบว่า object ที่ deploy ไปมีปัญหา เช่น มี bug หรือยังไม่พร้อมใช้งาน เราสามารถ rollback ได้ง่ายมาก เพียงแค่:
- ลบ solution patch ตัวนั้นออก (Delete solution)
- ระบบจะ revert object เหล่านั้นกลับไปใช้เวอร์ชันจาก solution หลักโดยอัตโนมัติ
- ไม่ต้อง restore environment
- ไม่ต้อง import solution ใหม่ทั้งชุด
- ไม่ต้องเขียน script แก้ไขใด ๆ
ข้อสำคัญ:
การจะทำ patch solution ได้ ที่ environment ปลายทาง ต้องมี solution หลักนั้นอยู่ก่อนแล้ว เพราะ patch จะอ้างอิงและซ้อน layer อยู่บน solution หลักเสมอ
สรุปเข้าใจง่าย
Patch Solution คือเครื่องมือที่ตอบโจทย์ DevOps บน Power Platform อย่างแท้จริง
- แก้ไขบางส่วน
- Deploy บางจุด
- Rollback ได้ง่าย
- ไม่กระทบส่วนอื่น
เหมาะมากสำหรับกรณี hotfix, test deployment หรือ release แบบ incremental และยิ่งมีประโยชน์มากเมื่อคุณทำงานในหลาย environment หรือใช้ CI/CD pipeline ควบคุม release flow
Clone Solution
คำว่า “Clone” ดูเผิน ๆ อาจเข้าใจว่าเป็นการ Copy Solution แบบหนึ่งต่อหนึ่ง ซึ่งฟังแล้วก็เหมือนจะใช่ แต่…ขอให้ลืมความเข้าใจนั้นไปก่อน เพราะในบริบทของ Power Platform นั้น Clone Solution ไม่ได้แปลว่า Copy
Clone Solution ใช้สำหรับรวม Patch หลายเวอร์ชันกลับมาเป็น Solution หลักชุดเดียว เหมาะกับการเตรียมระบบสำหรับการ deploy ใหญ่หรือขึ้น production
ทำไมต้อง Clone Solution?
ตัวอย่างเช่น:
- ตอนนี้คุณมี patch อยู่หลายเวอร์ชัน แก้หลายรอบ
- ทุก patch ผ่านการทดสอบเรียบร้อยแล้ว ไม่มีปัญหา
- ถึงเวลาอยากรวมทั้งหมดกลับมาเป็นชุดเดียว เพื่อความเป็นระเบียบ หรือเตรียม deploy รอบใหญ่ในครั้งถัดไป
หรืออีกกรณีหนึ่ง:
- คุณต้องการ deploy ครั้งต่อไปแบบ full solution ไม่ใช่แค่ patch
- การ Clone จะช่วยรวบ patch ทั้งหมดเข้าไปใน solution หลัก เพื่อให้ง่ายต่อการจัดการ
วิธี Clone Solution
สามารถทำได้ง่าย ๆ ตามขั้นตอนนี้:
- คุณต้องการ deploy ครั้งต่อไปแบบ full solution ไม่ใช่แค่ patch
- การ Clone จะช่วยรวบ patch ทั้งหมดเข้าไปใน solution หลัก เพื่อให้ง่ายต่อการจัดการ
เมื่อกด Confirm ระบบจะทำการ:
รวบ patch ทุกตัวเข้ามาใน solution หลัก
สร้าง solution ใหม่ขึ้นมาแทนเวอร์ชันเดิมที่กระจายเป็น patch
หมายเหตุสำคัญ
หาก solution ใด ยังมี patch ค้างอยู่ คุณจะ ไม่สามารถแก้ไข object ใด ๆ ใน solution หลักได้เลย ต้องทำการ Clone solution เพื่อรวม patch เข้ามาก่อน ถึงจะแก้ไขได้ตามปกติ
สรุป
การบริหาร Solution อย่างมีระบบใน Power Platform ไม่เพียงช่วยให้การพัฒนาระบบเป็นไปอย่างมีประสิทธิภาพเท่านั้น แต่ยังเป็นหัวใจสำคัญของความยั่งยืนในกระบวนการ ALM ทั้งหมด โดยเฉพาะสำหรับองค์กรที่ใช้งานร่วมกับ Microsoft Dynamics 365
Quick ERP เชี่ยวชาญด้านการออกแบบและวางระบบที่ยืดหยุ่น ปลอดภัย และรองรับการเติบโตในอนาคต โดยยึดตามมาตรฐานที่ Microsoft แนะนำ และต่อยอดให้เข้ากับบริบทของธุรกิจไทยได้อย่างเหมาะสม
ในบทความถัดไป เราจะพูดถึงหัวข้อที่ลึกขึ้น เช่น Connection References, Environment Variables, และการจัดการ Solution Upgrade อย่างมั่นใจ
ก้าวเข้าสู่ Digital Business
ดูผลิตภัณฑ์ที่เกี่ยวข้องได้ที่นี่