เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ
NocoBase มีการดำเนินการข้อมูลพื้นฐาน (เช่น เพิ่ม, ลบ, แก้ไข, ดู) มาให้ในตัวอยู่แล้วครับ/ค่ะ แต่เมื่อการดำเนินการเหล่านี้ไม่สามารถตอบโจทย์ความต้องการทางธุรกิจที่ซับซ้อนได้ เราสามารถใช้เหตุการณ์การทำงานแบบกำหนดเองใน เวิร์กโฟลว์ ได้ครับ/ค่ะ โดยผูกเหตุการณ์นี้เข้ากับปุ่ม "Trigger Workflow" (เรียกใช้ เวิร์กโฟลว์) ในบล็อกของหน้าเพจ เมื่อผู้ใช้คลิกปุ่มดังกล่าว ก็จะเรียกใช้ เวิร์กโฟลว์ การทำงานแบบกำหนดเองขึ้นมาครับ/ค่ะ
เมื่อสร้าง เวิร์กโฟลว์ ให้เลือก "เหตุการณ์การทำงานแบบกำหนดเอง" ครับ/ค่ะ:

v.1.6.0+
ประเภทบริบทที่แตกต่างกันจะกำหนดว่า เวิร์กโฟลว์ นี้สามารถผูกกับปุ่มในบล็อกใดได้บ้างครับ/ค่ะ:

เมื่อประเภทบริบทเป็น "ข้อมูลแถวเดียว" หรือ "ข้อมูลหลายแถว" คุณจะต้องเลือก คอลเลกชัน ที่ต้องการผูกกับโมเดลข้อมูลครับ/ค่ะ:

หากคุณต้องการใช้ข้อมูลความสัมพันธ์ของแถวข้อมูลที่เรียกใช้ใน เวิร์กโฟลว์ คุณสามารถเลือกฟิลด์ความสัมพันธ์เชิงลึกได้ที่นี่ครับ/ค่ะ:

ฟิลด์เหล่านี้จะถูกโหลดล่วงหน้าเข้าสู่บริบทของ เวิร์กโฟลว์ โดยอัตโนมัติหลังจากเหตุการณ์ถูกเรียกใช้ เพื่อให้สามารถนำไปใช้งานใน เวิร์กโฟลว์ ได้ครับ/ค่ะ
การตั้งค่าปุ่มการทำงานในแต่ละบล็อกจะแตกต่างกันไป ขึ้นอยู่กับประเภทบริบทที่กำหนดไว้ใน เวิร์กโฟลว์ ครับ/ค่ะ
v.1.6.0+
ในแถบการทำงาน (Action Bar) และบล็อกข้อมูลอื่น ๆ คุณสามารถเพิ่มปุ่ม "Trigger Workflow" (เรียกใช้ เวิร์กโฟลว์) ได้ครับ/ค่ะ:



หลังจากเพิ่มปุ่มแล้ว ให้ผูกกับ เวิร์กโฟลว์ แบบไม่มีบริบทที่สร้างไว้ก่อนหน้านี้ครับ/ค่ะ ตัวอย่างเช่น ปุ่มในแถบการทำงาน:


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



หลังจากเพิ่มปุ่มแล้ว ให้ผูกกับ เวิร์กโฟลว์ ที่สร้างไว้ก่อนหน้านี้ครับ/ค่ะ:


หลังจากนั้น เมื่อคลิกปุ่มนี้ ก็จะเรียกใช้เหตุการณ์การทำงานแบบกำหนดเองได้ทันทีครับ/ค่ะ:

v.1.6.0+
ในแถบการทำงานของบล็อกตาราง เมื่อเพิ่มปุ่ม "Trigger Workflow" (เรียกใช้ เวิร์กโฟลว์) จะมีตัวเลือกเพิ่มเติมให้เลือกประเภทบริบทเป็น "ไม่มีบริบท" หรือ "ข้อมูลหลายแถว" ครับ/ค่ะ:

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

เมื่อคลิกปุ่มเพื่อเรียกใช้ จะต้องมีการเลือกแถวข้อมูลบางส่วนในตารางไว้แล้วครับ/ค่ะ มิฉะนั้น เวิร์กโฟลว์ จะไม่ถูกเรียกใช้:

ตัวอย่างเช่น เรามี คอลเลกชัน "ตัวอย่าง" (Samples) ครับ/ค่ะ สำหรับตัวอย่างที่มีสถานะ "เก็บรวบรวมแล้ว" (Collected) เราต้องการให้มีปุ่ม "ส่งตรวจ" (Submit for Inspection) ซึ่งการส่งตรวจนี้จะเริ่มต้นด้วยการตรวจสอบข้อมูลพื้นฐานของตัวอย่าง จากนั้นสร้างข้อมูล "บันทึกการส่งตรวจ" (Inspection Record) ขึ้นมา และสุดท้ายคือเปลี่ยนสถานะของตัวอย่างเป็น "ส่งตรวจแล้ว" (Submitted) กระบวนการทั้งหมดนี้ไม่สามารถทำได้ด้วยการคลิกปุ่ม "เพิ่ม, ลบ, แก้ไข, ดู" แบบธรรมดาครับ/ค่ะ ดังนั้น เราจึงสามารถใช้เหตุการณ์การทำงานแบบกำหนดเองมาช่วยจัดการได้ครับ/ค่ะ
อันดับแรก ให้สร้าง คอลเลกชัน "ตัวอย่าง" (Samples) และ คอลเลกชัน "บันทึกการส่งตรวจ" (Inspection Records) ขึ้นมาก่อนครับ/ค่ะ จากนั้นป้อนข้อมูลทดสอบพื้นฐานลงใน คอลเลกชัน ตัวอย่าง:

จากนั้น สร้าง เวิร์กโฟลว์ "เหตุการณ์การทำงานแบบกำหนดเอง" ขึ้นมาครับ/ค่ะ หากคุณต้องการให้กระบวนการทำงานมีการตอบสนองที่รวดเร็วทันใจ สามารถเลือกโหมด Synchronous (ซิงโครนัส) ได้ครับ/ค่ะ (ในโหมด Synchronous จะไม่สามารถใช้ Node ประเภท Asynchronous เช่น การประมวลผลด้วยคนได้):

ในการตั้งค่าทริกเกอร์ ให้เลือก คอลเลกชัน "ตัวอย่าง" (Samples) ครับ/ค่ะ:

จัดเรียงตรรกะในกระบวนการตามความต้องการทางธุรกิจครับ/ค่ะ เช่น อนุญาตให้ส่งตรวจได้เมื่อค่าพารามิเตอร์ตัวบ่งชี้มากกว่า 90 เท่านั้น มิฉะนั้นให้แสดงข้อความแจ้งปัญหาที่เกี่ยวข้อง:

Node "Response Message" (ข้อความตอบกลับ) สามารถใช้ในเหตุการณ์การทำงานแบบกำหนดเองในโหมด Synchronous เพื่อส่งข้อความแจ้งเตือนกลับไปยัง Client ได้ครับ/ค่ะ แต่ไม่สามารถใช้ในโหมด Asynchronous ได้
หลังจากตั้งค่ากระบวนการและเปิดใช้งานเรียบร้อยแล้ว ให้กลับไปที่หน้าจอแสดงตารางครับ/ค่ะ จากนั้นเพิ่มปุ่ม "Trigger Workflow" (เรียกใช้ เวิร์กโฟลว์) ในคอลัมน์การทำงานของตาราง:

จากนั้น ในเมนูการตั้งค่าของปุ่ม ให้เลือก "ผูก เวิร์กโฟลว์" (Bind Workflow) เพื่อเปิดหน้าต่างป๊อปอัปการตั้งค่าครับ/ค่ะ:

เพิ่ม เวิร์กโฟลว์ ที่เปิดใช้งานไว้ก่อนหน้านี้ครับ/ค่ะ:

หลังจากส่งค่าแล้ว ให้เปลี่ยนข้อความบนปุ่มเป็นชื่อการทำงาน เช่น "ส่งตรวจ" ครับ/ค่ะ เท่านี้กระบวนการตั้งค่าก็เสร็จสมบูรณ์แล้ว
เมื่อใช้งาน ให้เลือกข้อมูลตัวอย่างใดก็ได้ในตาราง แล้วคลิกปุ่ม "ส่งตรวจ" ครับ/ค่ะ เพื่อเรียกใช้เหตุการณ์การทำงานแบบกำหนดเอง ตามตรรกะที่เราจัดเรียงไว้ก่อนหน้านี้ หากค่าพารามิเตอร์ตัวบ่งชี้ของตัวอย่างน้อยกว่า 90 เมื่อคลิกแล้วจะแสดงข้อความแจ้งเตือนดังนี้ครับ/ค่ะ:

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

เพียงเท่านี้ เหตุการณ์การทำงานแบบกำหนดเองง่าย ๆ ก็เสร็จสมบูรณ์แล้วครับ/ค่ะ ในทำนองเดียวกัน สำหรับธุรกิจที่มีการดำเนินการที่ซับซ้อน เช่น การประมวลผลคำสั่งซื้อ หรือการส่งรายงาน ก็สามารถนำเหตุการณ์การทำงานแบบกำหนดเองไปปรับใช้ได้เช่นกันครับ/ค่ะ
การเรียกใช้เหตุการณ์การทำงานแบบกำหนดเองไม่ได้จำกัดอยู่แค่การดำเนินการผ่านส่วนติดต่อผู้ใช้เท่านั้นครับ/ค่ะ แต่ยังสามารถเรียกใช้ผ่านการเรียก HTTP API ได้อีกด้วย โดยเฉพาะอย่างยิ่ง เหตุการณ์การทำงานแบบกำหนดเองได้เพิ่มประเภทการทำงานใหม่สำหรับทุกการดำเนินการของ คอลเลกชัน เพื่อเรียกใช้ เวิร์กโฟลว์ นั่นคือ trigger ซึ่งสามารถเรียกใช้ได้โดยใช้ NocoBase Standard Action API ครับ/ค่ะ
เวิร์กโฟลว์ ที่ถูกเรียกใช้โดยปุ่มตามตัวอย่าง สามารถเรียกใช้ได้ดังนี้ครับ/ค่ะ:
เนื่องจากการดำเนินการนี้มีไว้สำหรับข้อมูลแถวเดียว ดังนั้นเมื่อเรียกใช้กับข้อมูลที่มีอยู่ คุณจะต้องระบุ ID ของแถวข้อมูล โดยแทนที่ส่วน <:id> ใน URL ครับ/ค่ะ
หากเป็นการเรียกใช้สำหรับฟอร์ม (เช่น การเพิ่มหรืออัปเดตข้อมูล) สำหรับฟอร์มที่สร้างข้อมูลใหม่ คุณสามารถละเว้นการส่ง ID ได้ครับ/ค่ะ แต่จำเป็นต้องส่งข้อมูลที่ส่งมาเป็นข้อมูลบริบทสำหรับการดำเนินการ:
สำหรับฟอร์มอัปเดต คุณจะต้องส่งทั้ง ID ของแถวข้อมูลและข้อมูลที่อัปเดตไปพร้อมกันครับ/ค่ะ:
หากมีการส่งทั้ง ID และข้อมูลไปพร้อมกัน ระบบจะโหลดแถวข้อมูลที่ตรงกับ ID ก่อนครับ/ค่ะ จากนั้นจะใช้คุณสมบัติจากออบเจกต์ข้อมูลที่ส่งมาเขียนทับแถวข้อมูลเดิม เพื่อให้ได้บริบทข้อมูลที่ใช้ในการเรียกใช้สุดท้าย
หากมีการส่งข้อมูลความสัมพันธ์เข้ามา ข้อมูลนั้นก็จะถูกเขียนทับด้วยเช่นกันครับ/ค่ะ โดยเฉพาะอย่างยิ่งเมื่อมีการตั้งค่าให้โหลดข้อมูลความสัมพันธ์ล่วงหน้า ควรจัดการข้อมูลที่ส่งเข้ามาอย่างระมัดระวัง เพื่อหลีกเลี่ยงการเขียนทับข้อมูลความสัมพันธ์ที่ไม่เป็นไปตามที่คาดหวัง
นอกจากนี้ พารามิเตอร์ URL triggerWorkflows คือ Key ของ เวิร์กโฟลว์ ครับ/ค่ะ โดยสามารถคั่น Key ของ เวิร์กโฟลว์ หลายรายการด้วยเครื่องหมายจุลภาค (comma) คุณสามารถดู Key นี้ได้โดยการเลื่อนเมาส์ไปวางเหนือชื่อ เวิร์กโฟลว์ ที่ด้านบนของ Canvas เวิร์กโฟลว์ ครับ/ค่ะ:

หลังจากเรียกใช้สำเร็จ เหตุการณ์การทำงานแบบกำหนดเองสำหรับ คอลเลกชัน samples ที่เกี่ยวข้องจะถูกเรียกใช้ครับ/ค่ะ
เนื่องจากการเรียกใช้จากภายนอกยังคงต้องอิงตามสิทธิ์ของผู้ใช้ ดังนั้นเมื่อเรียกใช้ผ่าน HTTP API จะต้องมีการระบุข้อมูลการยืนยันตัวตนเช่นเดียวกับการส่งคำขอจากหน้าจอทั่วไปครับ/ค่ะ ซึ่งรวมถึง Header Authorization หรือพารามิเตอร์ token (Token ที่ได้จากการเข้าสู่ระบบ) และ Header X-Role (ชื่อบทบาทปัจจุบันของผู้ใช้)
หากคุณต้องการเรียกใช้เหตุการณ์สำหรับข้อมูลความสัมพันธ์แบบ "หนึ่งต่อหนึ่ง" (to-one) ในการดำเนินการนี้ (ปัจจุบันยังไม่รองรับแบบ "หนึ่งต่อหลาย" หรือ to-many) คุณสามารถใช้เครื่องหมาย ! ในพารามิเตอร์เพื่อระบุข้อมูลที่ใช้เรียกสำหรับฟิลด์ความสัมพันธ์ได้ครับ/ค่ะ:
หลังจากเรียกใช้สำเร็จ เหตุการณ์การทำงานแบบกำหนดเองสำหรับ คอลเลกชัน categories ที่เกี่ยวข้องจะถูกเรียกใช้ครับ/ค่ะ
เมื่อเรียกใช้เหตุการณ์หลังการดำเนินการผ่าน HTTP API คุณจำเป็นต้องตรวจสอบสถานะการเปิดใช้งานของ เวิร์กโฟลว์ และการตั้งค่า คอลเลกชัน ว่าตรงกันหรือไม่ครับ/ค่ะ มิฉะนั้นการเรียกใช้อาจไม่สำเร็จหรือเกิดข้อผิดพลาดขึ้นได้