ฟอร์มให้ License แบบหนึ่งลูกค้าต่อหนึ่งสินค้าทำงานได้ในช่วงเริ่มต้น แต่สร้างงานซ้ำทันทีเมื่อลูกค้าซื้อ Bundle หรือซื้อหลายเครื่องมือจาก Manager คนเดียว ผู้ดูแลต้องเลือกลูกค้าเดิม เปิดฟอร์มซ้ำ และมีโอกาสใส่ Key ผิดแถว เราจึงปรับ Workflow ให้เริ่มจากลูกค้าหนึ่งคนแล้วเลือกสินค้าที่ซื้อได้หลายรายการใน Overlay เดียว
โครงสร้างข้อมูลยังคงหนึ่ง License ต่อหนึ่งสินค้า
หน้าจอรวมหลายรายการไม่ได้หมายความว่าฐานข้อมูลควรรวม Key ทั้งหมดไว้ในช่องเดียว แต่ละสินค้าอาจมีสถานะ Version และวิธีออก Key ต่างกัน ระบบจึงยังบันทึก License แยกตาม Customer ID และ Project ID ส่วน Overlay ทำหน้าที่รวบรวมหลายคำสั่งให้ผู้ใช้บันทึกพร้อมกัน
Key ต้องอยู่ใกล้สินค้าที่เกี่ยวข้อง
ในฟอร์มแต่ละ Project มี Checkbox และช่อง License key ของตัวเอง ช่อง Key ถูกปิดไว้จนกว่าจะเลือกสินค้า เพื่อลดโอกาสกรอกข้อมูลในรายการที่ไม่ได้ซื้อ เมื่อยกเลิก Checkbox ระบบล้างค่าที่กรอกไว้ในรายการนั้น ไม่ส่งข้อมูลส่วนเกินไปยังเซิร์ฟเวอร์
ตรวจสิทธิ์เป็นชุดก่อนเขียนข้อมูล
เซิร์ฟเวอร์รับรายการ Project ID แล้วตรวจว่าลูกค้าเป็นของ Manager และทุก Project อยู่ในพอร์ต หากมีแม้แต่หนึ่งรายการอยู่นอกขอบเขต ระบบจะไม่เริ่มบันทึก วิธีนี้ป้องกันกรณี Request ถูกแก้ให้ส่งทั้งสินค้าที่อนุญาตและสินค้าที่ไม่ได้รับสิทธิ์เข้ามาพร้อมกัน
Transaction ป้องกันรายการค้างครึ่งชุด
หลังผ่านการตรวจ ระบบเริ่ม Transaction แล้วอัปเดตหรือสร้าง License ทีละสินค้า หากขั้นตอนใดเกิดข้อผิดพลาด ฐานข้อมูลหลักจะ Roll back ทั้งชุด ผู้ใช้จึงไม่ต้องเดาว่าสินค้าใดสำเร็จและสินค้าใดล้มเหลว ข้อความหลังบันทึกระบุจำนวนสินค้าที่สำเร็จแทนการตอบเพียงว่า “บันทึกแล้ว”
กรณีที่มี License เดิม
หากพบ License ของลูกค้าและโปรเจกต์เดิม ระบบอัปเดตรายการล่าสุดกลับเป็น Active พร้อม Key ใหม่ แทนการสร้างแถวซ้ำโดยไม่จำเป็น ประวัติการให้สิทธิ์และการถอนสิทธิ์ยังถูกบันทึกใน Audit log เพื่อช่วยตรวจสอบเหตุการณ์ภายหลัง
DataTable และ Overlay ช่วยงานคนละส่วน
DataTable เหมาะกับการค้นหา เรียง และแบ่งหน้ารายการที่มีอยู่ ส่วน Overlay เหมาะกับงานที่ต้องตัดสินใจโดยไม่เสียบริบทจากตาราง ผู้ใช้สามารถค้นหาลูกค้า ดูสถานะ License แล้วเปิดฟอร์มเพิ่มหลายสินค้าโดยยังรู้ว่าตนอยู่ในหน้าใด การถอน License ก็ใช้หน้าต่างยืนยันและบอกชื่อลูกค้ากับสินค้าเพื่อลดการกดผิด
สิ่งที่ควรพัฒนาต่อ
เมื่อจำนวนสินค้ามากขึ้น ควรเพิ่มการค้นหาภายในตัวเลือกสินค้า แสดง License ปัจจุบันก่อนเขียนทับ และรองรับ Template สำหรับ Bundle ที่ขายบ่อย แต่ทุกทางลัดยังต้องรักษาหลักเดิม: ตรวจลูกค้า ตรวจทุก Project และบันทึกเป็นชุดที่อธิบายผลได้