เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ
ลูป (Loop) เปรียบเสมือนโครงสร้างทางไวยากรณ์ เช่น for/while/forEach ในภาษาโปรแกรมครับ/ค่ะ คุณสามารถใช้โหนดลูปได้เมื่อต้องการทำซ้ำการทำงานบางอย่างตามจำนวนครั้งที่กำหนด หรือกับชุดข้อมูล (อาร์เรย์) ครับ/ค่ะ
ปลั๊กอินนี้เป็นปลั๊กอินในตัว ไม่จำเป็นต้องติดตั้งครับ/ค่ะ
ในหน้าจอตั้งค่าเวิร์กโฟลว์ ให้คลิกปุ่มเครื่องหมายบวก ("+") ในโฟลว์ เพื่อเพิ่มโหนด "ลูป" ครับ/ค่ะ

หลังจากสร้างโหนดลูปแล้ว จะมีการสร้างสาขา (branch) ภายในลูปขึ้นมาครับ/ค่ะ คุณสามารถเพิ่มโหนดได้หลายโหนดในสาขานี้ โหนดเหล่านี้ไม่เพียงแต่สามารถใช้ตัวแปรจากบริบทของเวิร์กโฟลว์ได้เท่านั้น แต่ยังสามารถใช้ตัวแปรโลคัล (local variables) จากบริบทของลูปได้ด้วยครับ/ค่ะ เช่น ออบเจกต์ข้อมูลที่ถูกวนซ้ำในแต่ละรอบของคอลเลกชันลูป หรือดัชนี (index) ของจำนวนรอบการวนซ้ำ (ดัชนีเริ่มต้นนับจาก 0) ขอบเขตของตัวแปรโลคัลจะจำกัดอยู่ภายในลูปเท่านั้นครับ/ค่ะ หากมีการวนซ้ำแบบซ้อนกันหลายชั้น (nested loops) คุณสามารถใช้ตัวแปรโลคัลของลูปเฉพาะในแต่ละชั้นได้เลยครับ/ค่ะ

ลูปจะจัดการกับออบเจกต์ลูปที่มีชนิดข้อมูลต่างกันด้วยวิธีที่แตกต่างกันครับ/ค่ะ
อาร์เรย์ (Array): เป็นกรณีที่พบบ่อยที่สุดครับ/ค่ะ โดยทั่วไปคุณสามารถเลือกตัวแปรจากบริบทของเวิร์กโฟลว์ได้ เช่น ผลลัพธ์ข้อมูลหลายรายการจากโหนด Query หรือข้อมูลความสัมพันธ์แบบหนึ่งต่อหลายรายการที่โหลดไว้ล่วงหน้า หากเลือกเป็นอาร์เรย์ โหนดลูปจะวนซ้ำผ่านแต่ละองค์ประกอบในอาร์เรย์ และในแต่ละรอบการวนซ้ำจะกำหนดค่าองค์ประกอบปัจจุบันให้กับตัวแปรโลคัลในบริบทของลูปครับ/ค่ะ
ตัวเลข (Number): เมื่อตัวแปรที่เลือกเป็นตัวเลข จะใช้ตัวเลขนั้นเป็นจำนวนรอบการวนซ้ำครับ/ค่ะ ค่าของตัวเลขรองรับเฉพาะจำนวนเต็มบวกเท่านั้น จำนวนลบจะไม่เข้าสู่ลูป และส่วนทศนิยมของตัวเลขจะถูกละเว้น ดัชนีของจำนวนรอบการวนซ้ำในตัวแปรโลคัลก็คือค่าของออบเจกต์ลูปนั่นเองครับ/ค่ะ ค่านี้เริ่มต้นจาก 0 ตัวอย่างเช่น หากออบเจกต์ลูปเป็นตัวเลข 5 ออบเจกต์และดัชนีในแต่ละรอบการวนซ้ำจะเป็น: 0, 1, 2, 3, 4 ตามลำดับครับ/ค่ะ
สตริง (String): เมื่อตัวแปรที่เลือกเป็นสตริง จะใช้ความยาวของสตริงนั้นเป็นจำนวนรอบการวนซ้ำ โดยจะประมวลผลแต่ละอักขระในสตริงตามดัชนีในแต่ละรอบครับ/ค่ะ
อื่น ๆ (Other): ค่าประเภทอื่น ๆ (รวมถึงชนิดออบเจกต์) จะถูกพิจารณาว่าเป็นออบเจกต์ลูปแบบรายการเดียวเท่านั้น และจะวนซ้ำเพียงครั้งเดียวครับ/ค่ะ โดยปกติแล้ว สถานการณ์เช่นนี้ไม่จำเป็นต้องใช้ลูปครับ/ค่ะ
นอกจากการเลือกตัวแปรแล้ว สำหรับชนิดตัวเลขและสตริง คุณยังสามารถป้อนค่าคงที่ (constants) ได้โดยตรงครับ/ค่ะ ตัวอย่างเช่น หากป้อน 5 (ชนิดตัวเลข) โหนดลูปจะวนซ้ำ 5 ครั้ง หรือหากป้อน abc (ชนิดสตริง) โหนดลูปจะวนซ้ำ 3 ครั้ง โดยจะประมวลผลอักขระ a, b, และ c ตามลำดับ ในเครื่องมือเลือกตัวแปร ให้เลือกชนิดที่คุณต้องการใช้สำหรับค่าคงที่ครับ/ค่ะ
ตั้งแต่เวอร์ชัน v1.4.0-beta เป็นต้นไป มีการเพิ่มตัวเลือกที่เกี่ยวข้องกับเงื่อนไขลูปเข้ามาครับ/ค่ะ คุณสามารถเปิดใช้งานเงื่อนไขลูปได้ในการตั้งค่าโหนดครับ/ค่ะ
เงื่อนไข (Condition)
คล้ายกับการตั้งค่าเงื่อนไขในโหนดเงื่อนไข (Condition node) คุณสามารถรวมการตั้งค่าได้ และสามารถใช้ตัวแปรจากลูปปัจจุบันได้ครับ/ค่ะ เช่น ออบเจกต์ลูป, ดัชนีลูป เป็นต้น
ช่วงเวลาที่ตรวจสอบ (Check Timing)
คล้ายกับโครงสร้าง while และ do/while ในภาษาโปรแกรม คุณสามารถเลือกที่จะประเมินเงื่อนไขที่ตั้งค่าไว้ก่อนเริ่มแต่ละรอบลูป หรือหลังจากสิ้นสุดแต่ละรอบลูปได้ครับ/ค่ะ การประเมินเงื่อนไขแบบหลัง (post-condition evaluation) จะช่วยให้โหนดอื่น ๆ ภายในลูปทำงานไปหนึ่งรอบก่อน แล้วจึงค่อยตรวจสอบเงื่อนไขครับ/ค่ะ
เมื่อเงื่อนไขไม่เป็นจริง (When Condition is Not Met)
คล้ายกับคำสั่ง break และ continue ในภาษาโปรแกรม คุณสามารถเลือกที่จะออกจากลูป หรือดำเนินการวนซ้ำในรอบถัดไปได้ครับ/ค่ะ
ตั้งแต่เวอร์ชัน v1.4.0-beta เป็นต้นไป เมื่อโหนดภายในลูปทำงานล้มเหลว (เช่น เงื่อนไขไม่เป็นไปตามที่กำหนด, เกิดข้อผิดพลาด ฯลฯ) คุณสามารถกำหนดทิศทางการทำงานต่อไปได้ผ่านการตั้งค่าครับ/ค่ะ รองรับวิธีการจัดการ 3 แบบดังนี้ครับ/ค่ะ
throw ในการเขียนโปรแกรม)break ในการเขียนโปรแกรม)continue ในการเขียนโปรแกรม)ค่าเริ่มต้นคือ "ออกจากเวิร์กโฟลว์" ซึ่งสามารถเลือกใช้ได้ตามความต้องการครับ/ค่ะ
ตัวอย่างเช่น เมื่อมีการสั่งซื้อสินค้า คุณจำเป็นต้องตรวจสอบสต็อกสินค้าแต่ละรายการในคำสั่งซื้อครับ/ค่ะ หากสต็อกเพียงพอ ให้หักสต็อกออก มิฉะนั้น ให้อัปเดตสินค้าในรายละเอียดคำสั่งซื้อเป็น "ไม่ถูกต้อง" (invalid) ครับ/ค่ะ
สร้าง 3 คอลเลกชัน ได้แก่ คอลเลกชันสินค้า <-(1:m)-- คอลเลกชันรายละเอียดคำสั่งซื้อ --(m:1)-> คอลเลกชันคำสั่งซื้อ โดยมีโมเดลข้อมูลดังนี้ครับ/ค่ะ
คอลเลกชันคำสั่งซื้อ (Orders Collection)
| ชื่อฟิลด์ | ชนิดฟิลด์ |
|---|---|
| รายละเอียดคำสั่งซื้อ | หนึ่งต่อหลาย (รายละเอียดคำสั่งซื้อ) |
| ราคารวมของคำสั่งซื้อ | ตัวเลข |
คอลเลกชันรายละเอียดคำสั่งซื้อ (Order Details Collection)
| ชื่อฟิลด์ | ชนิดฟิลด์ |
|---|---|
| สินค้า | หลายต่อหนึ่ง (สินค้า) |
| จำนวน | ตัวเลข |
คอลเลกชันสินค้า (Products Collection)
| ชื่อฟิลด์ | ชนิดฟิลด์ |
|---|---|
| ชื่อสินค้า | ข้อความบรรทัดเดียว |
| ราคา | ตัวเลข |
| สต็อก | จำนวนเต็ม |
สร้างเวิร์กโฟลว์ สำหรับทริกเกอร์ ให้เลือก "เหตุการณ์คอลเลกชัน" (Collection Event) และเลือกคอลเลกชัน "คำสั่งซื้อ" เพื่อให้ทริกเกอร์ "เมื่อมีการเพิ่มข้อมูลใหม่" ครับ/ค่ะ นอกจากนี้ คุณต้องตั้งค่าให้โหลดข้อมูลความสัมพันธ์ของคอลเลกชัน "รายละเอียดคำสั่งซื้อ" และคอลเลกชันสินค้าภายใต้รายละเอียดล่วงหน้าด้วยครับ/ค่ะ

สร้างโหนดลูป และเลือกออบเจกต์ลูปเป็น "ข้อมูลทริกเกอร์ / รายละเอียดคำสั่งซื้อ" ซึ่งหมายถึงการประมวลผลข้อมูลแต่ละรายการในคอลเลกชันรายละเอียดคำสั่งซื้อครับ/ค่ะ

ภายในโหนดลูป ให้สร้างโหนด "เงื่อนไข" (Condition) เพื่อตรวจสอบว่าสต็อกสินค้าเพียงพอหรือไม่ครับ/ค่ะ

หากสต็อกเพียงพอ ให้ในสาขา "ใช่" (Yes) สร้าง "โหนดคำนวณ" (Calculation node) และ "โหนดอัปเดตข้อมูล" (Update record node) เพื่ออัปเดตสต็อกที่ถูกหักลบแล้วไปยังบันทึกสินค้าที่เกี่ยวข้องครับ/ค่ะ


มิฉะนั้น ในสาขา "ไม่" (No) ให้สร้าง "โหนดอัปเดตข้อมูล" (Update record node) เพื่ออัปเดตสถานะของรายละเอียดคำสั่งซื้อเป็น "ไม่ถูกต้อง" (invalid) ครับ/ค่ะ

โครงสร้างเวิร์กโฟลว์โดยรวมเป็นดังภาพด้านล่างครับ/ค่ะ

หลังจากตั้งค่าและเปิดใช้งานเวิร์กโฟลว์นี้แล้ว เมื่อมีการสร้างคำสั่งซื้อใหม่ ระบบจะตรวจสอบสต็อกสินค้าในรายละเอียดคำสั่งซื้อโดยอัตโนมัติครับ/ค่ะ หากสต็อกเพียงพอ ก็จะหักสต็อกออก มิฉะนั้น สินค้าในรายละเอียดคำสั่งซื้อจะถูกอัปเดตเป็น "ไม่ถูกต้อง" (invalid) (เพื่อให้สามารถคำนวณราคารวมของคำสั่งซื้อที่ถูกต้องได้) ครับ/ค่ะ