โมเดลข้อมูลพาเรนท์-ไชลด์สำหรับฟอร์มรายการ
เรียนรู้โมเดลข้อมูลพาเรนท์-ไชลด์สำหรับใบเสนอราคา คำสั่งซื้อ ค่าชดเชย และเช็คลิสต์ พร้อมแนวทางง่ายๆ สำหรับฟอร์มรายการที่แก้ไขได้

ทำไมระเบียนเดียวจึงไม่พอ
ใบเสนอราคา คำสั่งซื้อ คำขอค่าชดเชย หรือเช็คลิสต์ แทบจะไม่อธิบายแค่สิ่งเดียว ฟอร์มพวกนี้มักมีระเบียนหลักหนึ่งรายการด้านบน แล้วมีรายการย่อยจำนวนมากอยู่ด้านล่าง หากพยายามยัดทุกอย่างลงในระเบียนเดียว ฟอร์มจะอ่านยาก แก้ไขยาก และเสี่ยงจะแตกเสียหายได้ง่าย
ฟิลด์ข้อความยาวอาจดูง่ายในตอนแรก แต่จะก่อปัญหาเกือบทันที ผู้ใช้ไม่สามารถเพิ่มไอเท็มแยกได้อย่างสะอาด แก้ไขแถวเดียวโดยไม่แตะต้องส่วนที่เหลือ หรือลบข้อมูลที่ล้าสมัยด้วยความมั่นใจ การตรวจสอบความถูกต้องก็อ่อนลง เพราะระบบเห็นเป็นก้อนข้อความเดียวแทนที่จะเป็นรายการที่แยกชัดเจน
ลองคิดถึงใบเสนอราคา คำขอของลูกค้าอาจมีสินค้าห้ารายการ และแต่ละรายการต้องมีจำนวน ราคาต่อหน่วย ส่วนลด และหมายเหตุของตัวเอง คำขอค่าชดเชยก็เหมือนกัน การส่งหนึ่งครั้งเป็นของพนักงานหนึ่งคน แต่แต่ละรายการมีวันที่ หมวดหมู่ จำนวนเงิน และสถานะใบเสร็จของตัวเอง
นี่คือที่มาของโมเดลพาเรนท์-ไชลด์ ระเบียนพาเรนท์เก็บรายละเอียดที่ใช้ร่วมกันสำหรับทั้งฟอร์ม เช่น ผู้ขอ วันที่ แผนก หรือสถานะการอนุมัติ ส่วนระเบียนไชลด์เก็บรายการย่อย แต่ละแถวสามารถเพิ่ม แก้ไข หรือลบได้โดยไม่กระทบระเบียนหลัก
การแยกสองส่วนนี้ทำให้ฟอร์มใช้ง่ายขึ้นและทีมเชื่อถือได้มากขึ้น หากแถวใดจำนวนเงินผิดหรือขาดฟิลด์ใด ผู้ใช้แก้แถวนั้นได้เพียงอย่างเดียว ส่วนที่เหลือของระเบียนยังคงอยู่เหมือนเดิม
รูปแบบเดียวกันใช้ได้กับเช็คลิสต์ที่แก้ไขได้ เช็คลิสต์อาจมีเจ้าของเดียวและกำหนดส่งเดียว ในขณะที่แต่ละงานมีป้ายชื่อ ผู้รับผิดชอบ หมายเหตุ หรือสถานะเสร็จงาน รายละเอียดที่ใช้ร่วมกันเก็บไว้ที่เดียว รายละเอียดของไอเท็มเก็บไว้ที่ที่ควรอยู่
พาเรนท์และไชลด์ทำงานอย่างไร
ฟอร์มแบบมีรายการจะจัดการได้ง่ายที่สุดเมื่อแยกเป็นสองส่วน: ระเบียนหลักหนึ่งรายการและระเบียนไอเท็มที่เกี่ยวข้องหลายรายการ
ระเบียนพาเรนท์เก็บข้อมูลที่ควรปรากฏเพียงครั้งเดียว เช่น ในใบเสนอราคาอาจเป็นลูกค้า วันที่เสนอ ราคาเจ้าของการขาย และสถานะปัจจุบัน ในคำขอค่าชดเชยอาจเป็นชื่อพนักงาน แผนก วันที่ส่ง และขั้นตอนการอนุมัติ
แต่ละระเบียนไชลด์เก็บไอเท็มที่แก้ไขได้หนึ่งรายการที่เชื่อมโยงกลับไปยังพาเรนท์ ในใบเสนอราคา ไชลด์หนึ่งรายการอาจแทนสินค้าหรือบริการ ในเช็คลิสต์ ไชลด์หนึ่งรายการอาจเป็นงาน ในฟอร์มค่าชดเชยแต่ละไชลด์มักเป็นค่าใช้จ่ายหนึ่งรายการพร้อมฟิลด์เช่น หมวดหมู่ จำนวน วันที่ใช้จ่าย และหมายเหตุใบเสร็จ
คิดง่ายๆ ได้ว่า:
- พาเรนท์: รายละเอียดที่ใช้ร่วมกันสำหรับทั้งฟอร์ม
- ไชลด์: หนึ่งแถว หนึ่งรายการ หนึ่งการกระทำ
- ลิงก์: ฟิลด์บนไชลด์ที่ชี้กลับไปยังพาเรนท์
โครงสร้างนี้สำคัญเพราะยอดรวมและสรุปควรมาจากแถวไชลด์ ไม่ใช่การพิมพ์แบบแมนนวลในพาเรนท์ เมื่อมีการเพิ่ม ลบ หรือแก้ไขไอเท็ม ยอดรวมควรอัปเดตจากข้อมูลจริง นั่นช่วยลดข้อผิดพลาดและทำให้การอนุมัติไว้ใจได้มากขึ้น
นอกจากนี้ยังทำให้การตรวจสอบความถูกต้องแม่นยำขึ้น คุณสามารถบังคับให้มีจำนวน ปฏิเสธจำนวนเงินติดลบ หรือแจ้งเตือนวันที่ที่ขาดหายบนแถวเดียวโดยไม่ทำให้ทั้งฟอร์มหยุดนิ่ง
การใช้งานทั่วไปในงานประจำวัน
คุณจะเห็นรูปแบบนี้ทุกที่ที่ระเบียนหนึ่งต้องมีหลายแถวที่แก้ไขได้
ใบเสนอราคาเป็นตัวอย่างชัดเจน เซลส์สร้างใบเสนอราคาเดียว แล้วเพิ่มแถวสำหรับสินค้าหรือบริการแต่ละรายการ แต่ละแถวอาจต้องมีชื่อรายการ จำนวน ราคาต่อหน่วย ส่วนลด ภาษี หรือหมายเหตุ ในขณะที่พาเรนท์เก็บลูกค้า วันที่ และสถานะการอนุมัติ
คำสั่งซื้อใช้แนวคิดเดียวกัน แต่แถวมักจะมีรายละเอียดเชิงปฏิบัติการมากขึ้น หนึ่งคำสั่งซื้ออาจรวมสินค้าหลายรายการ และแต่ละแถวอาจต้องมีสถานะสต็อก หมายเหตุคลังสินค้ารายการจัดส่ง หรือวันที่การจัดส่ง สินค้าในแถวขับเคลื่อนงานหลังสั่งซื้อ
เวิร์กโฟลว์ค่าชดเชยเป็นกรณีทั่วไปอีกแบบ คำขอหนึ่งรายการเป็นของพนักงานหนึ่งคนและช่วงรายงานหนึ่งช่วง แต่มีค่าใช้จ่ายหลายรายการ แต่ละแถวมักต้องวันที่ จำนวน หมวดหมู่ ผู้ขาย และการอ้างอิงใบเสร็จ ผู้จัดการมักตรวจแถวทีละรายการมากกว่าตัดสินทั้งคำขอเป็นใช่หรือไม่
เช็คลิสต์เข้ากับโมเดลเดียวกัน แม้มันจะดูเรียบง่าย ระเบียนพาเรนท์อาจเป็นแผนการ Onboarding การตรวจไซต์ หรือการทบทวนประจำสัปดาห์ แต่ละแถวเป็นงานที่มีสถานะเสร็จ หมายเหตุ ผู้รับผิดชอบ หรือวันที่ครบกำหนด
การทดสอบง่ายๆ ถามได้ว่า: ฟอร์มมีหัวเรื่องหนึ่งและหลายแถวที่ผู้ใช้ต้องการเพิ่ม แก้ไข หรือลบหรือไม่ ถ้าใช่ โครงสร้างพาเรนท์-ไชลด์มักเป็นตัวเลือกที่สะอาดกว่า
วางแผนโครงสร้างก่อนสร้าง
ฟอร์มที่ดีมักเริ่มจากคำถามเดียว: อะไรที่เป็นของทั้งระเบียน และอะไรที่ซ้ำในแต่ละแถว?
ตอบคำถามนี้ก่อนและปัญหาในภายหลังก็จะลดลง คุณจะหลีกเลี่ยงฟิลด์ซ้ำ ยอดรวมที่ยุ่งเหยิง และแถวที่จัดการยาก
สำหรับระเบียนพาเรนท์ ให้เก็บเฉพาะฟิลด์ที่อธิบายเอกสารทั้งหมด เช่น ในใบเสนอราคาอาจเป็นชื่อลูกค้า วันที่สกุลเงิน เซลส์ และสถานะการอนุมัติโดยรวม ในคำขอค่าชดเชยอาจเป็นชื่อพนักงาน แผนก วันที่ส่ง และการตัดสินใจขั้นสุดท้าย
สำหรับระเบียนไชลด์ ให้เก็บฟิลด์ที่เป็นของแต่ละแถว เช่น ชื่อไอเท็ม จำนวน ราคาต่อหน่วย วันที่ใช้จ่าย หมวดหมู่ ชนิดใบเสร็จ ป้ายงาน หรือหมายเหตุแถว หากค่าหนึ่งสามารถต่างกันได้ในแต่ละแถว มันมักควรอยู่ที่ไชลด์
การทดสอบที่มีประโยชน์คือ: หากคุณลบแถวหนึ่ง ค่าควรหายไปกับแถวนั้นไหม ถ้าคำตอบคือใช่ ฟิลด์นั้นน่าจะอยู่ที่ไชลด์
แต่ละแถวควรมี ID เฉพาะของตัวเอง อย่าพึ่งตำแหน่งแถว เช่น แถวที่หนึ่ง สอง หรือสาม ID ของแถวช่วยให้แก้ไขค่าใช้จ่ายเฉพาะกาง่ายขึ้น กู้คืนรายการที่ลบ หรือเก็บบันทึกการเปลี่ยนแปลง
ก่อนสร้าง ให้ตัดสินใจว่าผู้ใช้จะทำงานกับแถวอย่างไร พวกเขาเพิ่มแถวใหม่ ทำซ้ำ ลบ ย้าย หรือตัวกรองรายการยาวได้หรือไม่ นอกจากนี้ตัดสินใจด้วยว่ายอดรวมและสถานะควรอัปเดตเมื่อใด บางทีมอยากให้ยอดรวมรีเฟรชทันทีที่แถวเปลี่ยน ขณะที่บางทีมอยากให้อัปเดตเมื่อบันทึกหรือส่งเท่านั้น ทั้งสองวิธีได้ผล แต่กฎควรสอดคล้อง
กฎสถานะก็สำคัญด้วย หากรายการหนึ่งถูกปฏิเสธ คำขอทั้งหมดจะกลับเป็นร่าง รอการตรวจ หรือกลายเป็นอนุมัติบางส่วน? คำถามพวกนี้ตอบได้ง่ายกว่าถ้าคิดไว้ตั้งแต่แรก แทนที่จะรอให้ผู้ใช้เริ่มพึ่งพาฟอร์ม
ทำให้การแก้ง่ายสำหรับผู้ใช้
ฟอร์มแบบไลน์ไอเท็มทำงานได้ดีที่สุดเมื่อผู้คนเห็นรายละเอียดพาเรนท์และแถวรายการพร้อมกัน วางระเบียนหลักด้านบน แล้วแสดงตารางที่แก้ไขได้ไว้ด้านล่าง หากใครสักคนกำลังสร้างใบเสนอราคา ควรยืนยันลูกค้า วันที่ และสถานะก่อนเริ่มเพิ่มสินค้า
เลย์เอาต์เรียบง่ายนี้ลดความผิดพลาดเพราะผู้ใช้ไม่ต้องสลับหน้าจอบ่อยๆ เพื่อเช็กสิ่งที่กำลังแก้ไข
เก็บงานทั้งหมดบนหน้าจอเดียว
การเพิ่มแถวใหม่ควรรู้สึกเร็ว ปุ่ม "เพิ่มรายการ" ชัดเจนเหนือหรือต่ำกว่าตารางมักเพียงพอ เมื่อคลิก ให้เปิดแถวว่างหรือฟอร์มย่อยแบบอินไลน์แทนการพาไปหน้าต่างใหม่
ตรงนี้สำคัญที่สุดบนฟอร์มยาว หากคนต้องกรอกค่าใช้จ่ายสิบรายการ ทุกคลิกที่เพิ่มขึ้นจะทำให้ช้าลงและเพิ่มโอกาสผิดพลาด
การกระทำที่มีประโยชน์ที่สุดมักเป็นแบบเรียบง่าย: เพิ่ม ทำซ้ำ ลบ และบางครั้งย้าย การทำซ้ำมีประโยชน์โดยเฉพาะเมื่อหลายแถวคล้ายกัน เช่น คืนที่พักหลายคืนหรืองานเช็คลิสต์ที่เปลี่ยนน้อย
แสดงข้อผิดพลาดตรงจุดเกิดปัญหา
ฟอร์มยาวควรบันทึกงานชั่วคราวอัตโนมัติหรืออย่างน้อยให้ผู้ใช้บันทึกเป็นร่าง การสูญเสียเวลายี่สิบนาทีเพราะแท็บปิดไปเป็นวิธีที่เร็วที่สุดในการทำให้ผู้ใช้รู้สึกไม่ไว้วางใจฟอร์ม
การตรวจสอบความถูกต้องควรชัดเจนเช่นกัน หากแถวหนึ่งขาดจำนวนหรือมีค่าที่ไม่ถูกต้อง ให้แสดงข้อผิดพลาดที่แถวและฟิลด์นั้นโดยตรง อย่าบังคับให้ผู้ใช้ค้นหาทั่วทั้งฟอร์มเพราะมีคำเตือนคลุมเครือ
ถ้าเจ็ดแถวถูกต้องและหนึ่งแถวขาดหมายเลขใบเสร็จ ให้ทำเครื่องหมายเฉพาะแถวนั้น เก็บส่วนที่เหลือของคำขอไว้และให้ผู้ใช้แก้ไขในที่เดิม
ตัวอย่าง: คำขอค่าชดเชยมีหลายรายการ
คำขอค่าชดเชยแสดงให้เห็นว่าทำไมโมเดลนี้จึงได้ผลดี คำขอหนึ่งรายการเป็นระเบียนพาเรนท์ ในขณะที่ค่าใช้จ่ายแต่ละรายการเป็นระเบียนไชลด์
พาเรนท์เก็บรายละเอียดที่ใช้กับคำขอทั้งหมด: ชื่อพนักงาน ช่วงเคลม ผู้จัดการ และสถานะโดยรวม สถานะอาจเปลี่ยนจาก ร่าง ไปเป็น ส่งแล้ว แล้วเป็น อนุมัติบางส่วน หรือ อนุมัติ
แต่ละแถวค่าใช้จ่ายเก็บรายละเอียดเฉพาะของไอเท็มนั้น แถวหนึ่งอาจเก็บผู้ขาย วันที่ซื้อ จำนวน หมวดหมู่ และใบเสร็จของรถแท็กซี่ อีกแถวหนึ่งเก็บข้อมูลเดียวกันสำหรับบิลโรงแรม
คำขออย่างง่ายอาจมีสามแถว:
- City Taxi, 3 พฤษภาคม, $28, การเดินทาง, มีใบเสร็จ
- Grand Hotel, 4 พฤษภาคม, $180, ที่พัก, มีใบเสร็จ
- Corner Cafe, 4 พฤษภาคม, $14, อาหาร, ไม่มีใบเสร็จ
โครงสร้างนี้สำคัญเพราะผู้จัดการมักตรวจแถวทีละรายการ รถแท็กซี่และโรงแรมอาจอนุมัติ ในขณะที่มื้ออาหารอาจถูกปฏิเสธพร้อมเหตุผลสั้นๆ เช่น "ไม่มีใบเสร็จ" หรือ "ค่าอาหารเกินขีดจำกัดต่อวัน"
การปฏิเสธแถวเดียวไม่ควรทำลายคำขอทั้งหมด พนักงานควรได้รับการชำระเงินสำหรับรายการที่อนุมัติ และแถวที่ถูกปฏิเสธควรยังคงมองเห็นได้พร้อมเหตุผลที่แนบไว้ นั่นทำให้กระบวนการเข้าใจง่ายและตรวจสอบย้อนหลังได้ง่ายขึ้น
ยอดรวมควรมาจากแถวไชลด์ ไม่ใช่ตัวเลขที่พิมพ์ด้วยมือในพาเรนท์ หลายทีมเก็บสองยอด: ยอดที่ส่งซึ่งคำนวณจากทุกรายการ และยอดที่อนุมัติซึ่งคำนวณจากรายการที่ได้รับการยอมรับเท่านั้น นั่นอธิบายได้ว่าทำไมยอดจ่ายจริงอาจน้อยกว่าคำขอเดิม
ยอดรวม การอนุมัติ และการเปลี่ยนสถานะ
ฟอร์มแบบไลน์ไอเท็มเริ่มดูน่าเชื่อถือเมื่อเลขและสถานะอัปเดตในเวลาที่เหมาะสม
ถ้าผู้ใช้เปลี่ยนจำนวน ราคาต่อหน่วย หรือจำนวนเงิน ยอดรวมควรคำนวณใหม่จากการเปลี่ยนแปลงนั้น การรอจนส่งสุดท้ายมักสร้างความสับสน โดยเฉพาะเมื่อต้องคำนึงส่วนลด ภาษี หรือขีดจำกัดการอนุมัติ ในกรณีส่วนใหญ่ายอดรวมของพาเรนท์ควรถูกคำนวณ ไม่ควรแก้ไขได้
กฎการอนุมัติต้องชัดเจนเช่นกัน เมื่อระเบียนได้รับการอนุมัติเต็มรูปแบบ ตัดสินใจด้วยว่าจะแขวนล็อกแถวหรือไม่ หากแถวที่อนุมัติยังแก้ไขได้ ข้อมูลอาจเบี่ยงเบนจากสิ่งที่ผู้จัดการเซ็นอนุมัติไว้
บางครั้งการอนุมัติเกิดทีละแถวแทนที่จะครั้งเดียว เช่น ค่าชดเชย การเดินทางอาจอนุมัติ อาหารอาจถูกปฏิเสธบางส่วน และรายการอื่นส่งกลับเพื่อขอชี้แจง ในกรณีนั้นแต่ละแถวต้องมีสถานะของตัวเอง ในขณะที่พาเรนท์เก็บสถานะโดยรวม
ชุดสถานะโดยรวมสั้นๆ มักพอเพียง:
- ร่าง
- รอการตรวจสอบ
- อนุมัติบางส่วน
- อนุมัติ
- ปฏิเสธ
การแยกแบบนี้ทำให้ฟอร์มโปร่งใส พาเรนท์บอกว่าสถานะโดยรวมเป็นอย่างไร ส่วนไชลด์อธิบายว่าแต่ละไอเท็มเกิดอะไรขึ้น
นอกจากนี้ควรเก็บประวัติการเปลี่ยนแปลงสั้นๆ สำหรับฟิลด์สำคัญ เช่น จำนวนเงิน สถานะ ผู้อนุมัติ หรือยอดรวม คุณอาจยังไม่ต้องมีระบบตรวจสอบเต็มรูปแบบตั้งแต่วันแรก แต่ควรมีประวัติพออธิบายการเปลี่ยนแปลงหลักได้
การลบแถวต้องมีกฎเช่นกัน ก่อนการตรวจทาน การลบถาวรอาจใช้ได้ แต่หลังจากเริ่มตรวจทาน การเก็บถาวรมักปลอดภัยกว่าเพื่อให้ยอดรวมในอดีตและการตัดสินใจการอนุมัติยังคงสมเหตุสมผล
ข้อผิดพลาดที่ทำให้ความเชื่อมั่นลดลง
ความเชื่อมั่นลดลงเร็วเมื่อฟอร์มดูสะอาดบนหน้าจอแต่เก็บข้อมูลรกๆ ไว้เบื้องหลัง
ข้อผิดพลาดที่พบบ่อยคือการผสมฟิลด์พาเรนท์และฟิลด์ไอเท็มในตารางแผ่นเดียว ใบเสนอราคา คำสั่งซื้อ หรือคำขอค่าชดเชยมีรายละเอียดที่เป็นของเอกสารทั้งหมด เช่น ผู้ขอ วันที่ หรือสถานะการอนุมัติ ในขณะที่แถวมีรายละเอียดของตัวเอง เช่น ชื่อไอเท็ม จำนวน จำนวนเงิน หรือวันที่ใบเสร็จ เมื่อผสมกัน การแก้ไขสับสน รายงานใช้งานยาก และข้อมูลซ้ำแพร่กระจายเร็ว
ปัญหาทั่วไปอีกอย่างคือให้ผู้ใช้พิมพ์ยอดรวมด้วยมือเมื่อระบบควรคำนวณ หากคนใส่สามแถวค่าใช้จ่ายแล้วพิมพ์ยอดรวมแยกต่างหาก ตัวเลขอาจไม่ตรงกัน เมื่อเป็นแบบนี้ซ้ำๆ ผู้ตรวจจะเลิกไว้วางใจฟอร์ม
กล่องข้อความอิสระขนาดใหญ่ก็สร้างปัญหาเช่นกัน ดูเหมือนเร็วกว่าที่จะให้ผู้ใช้คัดลอกแปะรายการทั้งหมดในช่องเดียว แต่วิธีนี้ทำให้ตรวจสอบความถูกต้อง จัดเรียง กรอง หรือนำมาอนุมัติได้ยาก แถวที่มีโครงสร้างต้องการการวางแผนมากกว่า แต่จัดการได้ง่ายกว่าในระยะยาว
การตรวจเช็คระดับแถวมักถูกมองข้าม เช่น แถวว่าง วันที่ไม่ถูกต้อง รายการซ้ำ จำนวนเงินติดลบ หรือรายการที่กรอกไม่ครบ ควรจับข้อผิดพลาดก่อนที่ฟอร์มจะผ่าน ขั้นตอนจริงๆ เกิดขึ้นภายในแถวลูก ไม่ใช่หัวเรื่อง
การลบแถวเป็นจุดอ่อนอีกจุด หากผู้ใช้ลบด้วยคลิกเดียวโดยไม่มีการยืนยัน ข้อมูลสำคัญอาจหายไปโดยไม่ตั้งใจ และยิ่งแย่เมื่อไม่มีบันทึกว่าใครเปลี่ยนแปลง
แนวทางที่ปลอดภัยคือ: ยืนยันการลบแถว ล็อกฟิลด์ที่คำนวณได้ และบันทึกการเปลี่ยนแปลงสำคัญที่ผู้คนทำ
ตรวจสอบก่อนเปิดใช้งาน
ก่อนเผยแพร่ฟอร์มที่มีแถวซ้ำ ให้ทดสอบด้วยวิธีที่ผู้ใช้จริงจะใช้
เริ่มจากพื้นฐาน ให้แน่ใจว่าผู้ใช้เพิ่ม แก้ไข ทำซ้ำ และลบแถวได้โดยไม่สูญเสียข้อมูลอื่น ตรวจสอบว่าฟอร์มทำงานได้ดีกับสิบแถว จากนั้นกับห้าสิบหรือร้อย แสดงข้อผิดพลาดบนแถวที่ต้องแก้จริงๆ ไม่ใช่แค่ที่บนสุดของหน้า
จากนั้นทดสอบสิ่งที่จะเกิดหลังการเปลี่ยนแปลง อัปเดตจำนวน ลบแถว ทำซ้ำรายการ และเปลี่ยนสถานะ หลังการกระทำแต่ละครั้ง ยืนยันว่าพาเรนท์ยังแสดงยอดรวม จำนวน และสถานะสรุปที่ถูกต้อง
ทดสอบกรณีขอบเขตที่มักเปิดจุดอ่อน: ลบแถวทั้งหมด แถวเดียวไม่ถูกต้องท่ามกลางหลายแถวที่ถูกต้อง รายการซ้ำ จำนวนเป็นศูนย์ หมายเหตุยาว และการแก้ไขหลังส่ง
ฟอร์มพร้อมเมื่อยังคงชัดเจนภายใต้การใช้งานปกติและยังคงทำงานอย่างคาดเดาได้ในสถานการณ์ยุ่งเหยิงประจำวัน
สร้างในแอปแบบ no-code
หากคุณสร้างในแอป no-code ให้เริ่มจากเวิร์กโฟลว์ที่คนคุ้นเคย เช่น คำขอค่าชดเชยหรือใบเสนอราคา สร้างโครงสร้างข้อมูลก่อน แล้วเพิ่มกฎที่เชื่อมระเบียนพาเรนท์กับแถวลูก และหลังจากนั้นค่อยปรับแต่งเลย์เอาต์
การใช้ข้อมูลตัวอย่างจริงมีประโยชน์กว่าข้อมูลทดสอบที่สมบูรณ์แบบ ป้อนข้อมูลที่ซ้ำ ขาดหมายเหตุ แก้จำนวนเงิน และแถวที่กรอกไม่ครบ กรณีพวกนี้จะบอกคุณว่าฟอร์มจุดไหนสับสนและจุดไหนเริ่มทำให้ความเชื่อมั่นลดลง
AppMaster เหมาะกับงานประเภทนี้เพราะโครงสร้างพาเรนท์-ไชลด์แมปได้อย่างเป็นธรรมชาติกับโมเดลข้อมูลแยกต่างหาก ฟอร์มที่เกี่ยวข้อง และตรรกะทางธุรกิจในที่เดียว หากกระบวนการเติบโตขึ้น AppMaster ยังรองรับการเปลี่ยนโมเดลหลักเดียวกันให้เป็น backend เว็บ และแอปมือถือโดยไม่ต้องสร้างเวิร์กโฟลว์ใหม่ตั้งแต่ต้น
เป้าหมายหลักคงเดิมไม่ว่าคุณจะใช้เครื่องมือใด: เก็บพาเรนท์ให้สะอาด ให้แต่ละแถวแก้ไขได้เอง และให้ยอดรวมกับสถานะมาจากข้อมูลจริง เมื่อทำส่วนนี้ถูกต้อง ฟอร์มแบบรายการจะใช้งานง่ายขึ้นและเชื่อถือได้มากขึ้น
คำถามที่พบบ่อย
เพราะการเก็บทุกอย่างไว้ในระเบียนเดียวมักจะผสมรายละเอียดที่ใช้ร่วมกันกับรายละเอียดที่เป็นรายการซ้ำๆ เข้าด้วยกัน โมเดลพาเรนท์-ไชลด์ช่วยเก็บหัวเรื่องให้เรียบร้อยและให้แต่ละแถวสามารถเพิ่ม แก้ไข ตรวจสอบความถูกต้อง หรือเอาออกได้โดยไม่ทำลายทั้งฟอร์ม
ใส่ค่าที่อธิบายเอกสารทั้งหมดไว้ที่พาเรนท์ เช่น ผู้ขอ ลูกค้า วันที่ แผนก หรือสถานะโดยรวม ใส่ค่าที่เปลี่ยนได้ในแต่ละแถวไว้ที่ไชลด์ เช่น จำนวน จำนวนเงิน หมวดหมู่ หมายเหตุ หรือวันที่ครบกำหนด หากค่าหนึ่งจะหายไปเมื่อแถวถูกลบ ก็แสดงว่าค่าควรอยู่ที่ไชลด์
เมื่อฟอร์มมีหัวเรื่องหนึ่งและมีหลายแถวที่ต้องแก้ไขได้ ให้ใช้โครงสร้างพาเรนท์-ไชลด์ ตัวอย่างที่พบบ่อยคือ ใบเสนอราคา คำสั่งซื้อ คำขอค่าชดเชย และเช็คลิสต์ เพราะแต่ละแถวต้องมีฟิลด์และการกระทำของตัวเอง
ใช่ ให้แต่ละแถวลูกมี ID ของตัวเองแทนที่จะพึ่งตำแหน่งของแถวอย่างเดียว การมี ID ช่วยให้การแก้ไข ติดตามการเปลี่ยนแปลง กู้คืนรายการที่ลบ และซิงก์ข้อมูลปลอดภัยขึ้น
โดยทั่วไปไม่ควรให้ผู้ใช้พิมพ์ยอดรวมเอง ค่าเริ่มต้นที่ปลอดภัยคือคำนวณยอดรวมจากแถวลูกและเก็บยอดรวมของพาเรนท์เป็นแบบอ่านอย่างเดียว วิธีนี้ลดความคลาดเคลื่อนและทำให้การอนุมัติไว้วางใจได้มากขึ้น
แสดงข้อผิดพลาดที่แถวและฟิลด์ที่เกี่ยวข้อง หากไอเท็มใดผิด ผู้ใช้ควรแก้แถวนั้นได้โดยตรงโดยไม่ทำให้ส่วนอื่นของฟอร์มเสียหาย การบอกตำแหน่งข้อผิดพลาดอย่างชัดเจนช่วยให้แก้ไขเร็วและมั่นใจขึ้น
ไม่เสมอไป หากผู้ตรวจอนุมัติทีละรายการ ให้แต่ละแถวมีสถานะของตัวเอง ในขณะที่พาเรนท์เก็บสถานะโดยรวม โมเดลนี้เหมาะกับการเบิกค่าชดเชยที่บางรายการอนุมัติ บางรายการถูกปฏิเสธ
ก่อนการตรวจทาน การลบถาวรอาจเป็นที่ยอมรับได้ แต่หลังจากกระบวนการตรวจเริ่มแล้ว การเก็บเป็นสถิติ (archive) มักปลอดภัยกว่า เพื่อให้ยอดรวมและการตัดสินใจในอดีตยังคงมีเหตุผล
วางรายละเอียดพาเรนท์และแถวแก้ไขไว้บนหน้าจอเดียวเมื่อเป็นไปได้ ปุ่มเพิ่มรายการ ทำซ้ำ หรือลบควรหาง่าย และการบันทึกแบบร่างหรือการบันทึกงานที่ยังไม่เสร็จช่วยลดความหงุดหงิดเมื่อฟอร์มยาว
เริ่มจากการสร้างโมเดลข้อมูลแยกพาเรนท์และไชลด์ แล้วเพิ่มกฎสำหรับลิงก์ ยอดรวม และสถานะ AppMaster เหมาะกับงานนี้เพราะช่วยให้คุณสร้างข้อมูลที่เกี่ยวข้อง กำหนดตรรกะทางธุรกิจ และเปลี่ยนเวิร์กโฟลว์เดียวกันให้เป็น backend เว็บ และแอปมือถือได้โดยไม่ต้องสร้างใหม่


