เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ
การเปลี่ยนแปลงข้อมูลทั้งหมดที่ผู้ใช้สร้างขึ้นในระบบมักจะเกิดขึ้นจากการดำเนินการบางอย่าง ซึ่งโดยทั่วไปแล้วคือการคลิกปุ่ม ปุ่มเหล่านี้อาจเป็นปุ่ม "ส่ง" ในฟอร์ม หรือปุ่มดำเนินการในบล็อกข้อมูล เหตุการณ์หลังการดำเนินการ (Post-Action Event) มีไว้เพื่อผูก เวิร์กโฟลว์ ที่เกี่ยวข้องกับการดำเนินการของปุ่มเหล่านี้ เพื่อให้ เวิร์กโฟลว์ ที่กำหนดไว้ถูกเรียกใช้งานหลังจากที่ผู้ใช้ดำเนินการสำเร็จครับ/ค่ะ
ตัวอย่างเช่น เมื่อเพิ่มหรืออัปเดตข้อมูล ผู้ใช้สามารถกำหนดค่าตัวเลือก "ผูก เวิร์กโฟลว์" สำหรับปุ่มได้ครับ/ค่ะ หลังจากดำเนินการเสร็จสิ้น เวิร์กโฟลว์ ที่ผูกไว้ก็จะถูกเรียกใช้งานทันที
ในระดับการนำไปใช้งาน เนื่องจากเหตุการณ์หลังการดำเนินการถูกจัดการที่เลเยอร์มิดเดิลแวร์ (middleware layer) ของ Koa การเรียกใช้ HTTP API ไปยัง NocoBase ก็สามารถเรียกใช้งานเหตุการณ์หลังการดำเนินการที่กำหนดไว้ได้เช่นกันครับ/ค่ะ
ปลั๊กอิน นี้เป็นส่วนหนึ่งของระบบอยู่แล้ว จึงไม่จำเป็นต้องติดตั้งเพิ่มเติมครับ/ค่ะ
เมื่อสร้าง เวิร์กโฟลว์ ให้เลือกประเภทเป็น "เหตุการณ์หลังการดำเนินการ" ครับ/ค่ะ

สำหรับเหตุการณ์หลังการดำเนินการ เมื่อสร้าง คุณยังสามารถเลือกโหมดการทำงานเป็น "ซิงโครนัส" (Synchronous) หรือ "อะซิงโครนัส" (Asynchronous) ได้ครับ/ค่ะ

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

จากนั้นเลือกโหมดทริกเกอร์ ซึ่งมีสองแบบคือ โหมดเฉพาะส่วน (Local) และโหมดทั่วทั้งระบบ (Global) ครับ/ค่ะ

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

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

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


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

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

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

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

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

เหตุการณ์หลังการดำเนินการและเหตุการณ์ คอลเลกชัน มีความคล้ายคลึงกันในแง่ที่ว่าทั้งคู่เป็น เวิร์กโฟลว์ ที่ถูกเรียกใช้งานหลังจากข้อมูลมีการเปลี่ยนแปลงครับ/ค่ะ อย่างไรก็ตาม ระดับการนำไปใช้งานนั้นแตกต่างกัน เหตุการณ์หลังการดำเนินการจะทำงานในระดับ API ในขณะที่เหตุการณ์ คอลเลกชัน จะทำงานกับการเปลี่ยนแปลงข้อมูลใน คอลเลกชัน โดยตรงครับ/ค่ะ
เหตุการณ์ คอลเลกชัน จะอยู่ใกล้กับเลเยอร์พื้นฐานของระบบมากกว่าครับ/ค่ะ ในบางกรณี การเปลี่ยนแปลงข้อมูลที่เกิดจากเหตุการณ์หนึ่งอาจเรียกใช้งานเหตุการณ์อื่น ทำให้เกิดปฏิกิริยาลูกโซ่ได้ โดยเฉพาะอย่างยิ่งเมื่อข้อมูลใน คอลเลกชัน ที่เกี่ยวข้องบางส่วนมีการเปลี่ยนแปลงในระหว่างการดำเนินการของ คอลเลกชัน ปัจจุบัน เหตุการณ์ที่เกี่ยวข้องกับ คอลเลกชัน ที่ผูกไว้ก็สามารถถูกเรียกใช้งานได้เช่นกันครับ/ค่ะ
การเรียกใช้งานเหตุการณ์ คอลเลกชัน จะไม่รวมข้อมูลที่เกี่ยวข้องกับผู้ใช้ครับ/ค่ะ ในทางกลับกัน เหตุการณ์หลังการดำเนินการจะอยู่ใกล้กับฝั่งผู้ใช้มากกว่า และเป็นผลลัพธ์จากการดำเนินการของผู้ใช้ บริบทของ เวิร์กโฟลว์ จะมีข้อมูลที่เกี่ยวข้องกับผู้ใช้ด้วย ทำให้เหมาะสำหรับการจัดการ เวิร์กโฟลว์ ที่เกี่ยวข้องกับการดำเนินการของผู้ใช้ครับ/ค่ะ ในการออกแบบอนาคตของ NocoBase อาจมีการขยายเหตุการณ์หลังการดำเนินการที่สามารถใช้เป็นทริกเกอร์ได้มากขึ้น ดังนั้น จึงแนะนำให้ใช้เหตุการณ์หลังการดำเนินการมากกว่า เพื่อจัดการ เวิร์กโฟลว์ ที่ข้อมูลมีการเปลี่ยนแปลงจากการดำเนินการของผู้ใช้ครับ/ค่ะ
ความแตกต่างอีกประการหนึ่งคือ เหตุการณ์หลังการดำเนินการสามารถผูกแบบเฉพาะส่วนกับปุ่มฟอร์มที่เจาะจงได้ครับ/ค่ะ หากมีหลายฟอร์ม การส่งฟอร์มบางส่วนสามารถเรียกใช้งานเหตุการณ์นี้ได้ ในขณะที่ส่วนอื่นไม่เรียกใช้งาน ในทางกลับกัน เหตุการณ์ คอลเลกชัน จะทำงานกับการเปลี่ยนแปลงข้อมูลใน คอลเลกชัน ทั้งหมด และไม่สามารถผูกแบบเฉพาะส่วนได้ครับ/ค่ะ