Skip to main content

เวิร์กโฟลว์อัตโนมัติ

ภาพรวม

Domain นี้มี 2 ตาราง: workflow เก็บนิยามเวิร์กโฟลว์ปัจจุบันเป็น JSONB ในคอลัมน์ definition พร้อมข้อมูล reference ที่ compile แล้วใน compiled_refs และ workflow_version เก็บประวัติ snapshot ของ definition ทุกครั้งที่มีการเปลี่ยนแปลง เพื่อให้ย้อนดูหรือกู้คืนเวอร์ชันเก่าได้

ตาราง workflow

ColumnTypeNullableDefaultคำอธิบาย
idSERIALNOnextval(...)Primary key
nameVARCHAR(255)NO-ชื่อเวิร์กโฟลว์
descriptionTEXTYES-คำอธิบายเวิร์กโฟลว์
statusVARCHAR(20)NO'draft'สถานะเวิร์กโฟลว์
definitionJSONBNO-นิยามเวิร์กโฟลว์ทั้งหมด (node และการเชื่อมต่อ)
compiled_refsJSONBYES-reference ที่ compile จาก definition เพื่อใช้ตอนรัน
line_oa_idINTEGERNO-LINE OA ที่เวิร์กโฟลว์นี้สังกัด
organization_idINTEGERNO-องค์กรเจ้าของเวิร์กโฟลว์
created_byINTEGERYES-ผู้สร้าง (user id)
updated_byINTEGERYES-ผู้แก้ไขล่าสุด (user id)
created_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่สร้าง
updated_dateTIMESTAMPTZ(3)YES-วันเวลาที่แก้ไขล่าสุด
deleted_dateTIMESTAMPTZ(3)YES-วันเวลาที่ลบ (soft delete)

ตาราง workflow_version

ColumnTypeNullableDefaultคำอธิบาย
idSERIALNOnextval(...)Primary key
workflow_idINTEGERNO-เวิร์กโฟลว์ต้นทางของ snapshot นี้ (FK ไป workflow.id)
versionINTEGERNO-เลขเวอร์ชันของ snapshot
definitionJSONBNO-snapshot ของนิยามเวิร์กโฟลว์ ณ เวอร์ชันนั้น
eventVARCHAR(20)NO-เหตุการณ์ที่ทำให้เกิดเวอร์ชันนี้
created_byINTEGERYES-ผู้ทำให้เกิดเวอร์ชันนี้ (user id)
created_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่บันทึกเวอร์ชัน

หมายเหตุ

  • workflow_version.workflow_id เป็น FK ไป workflow.id โดยมี index บน (workflow_id, version DESC) เพื่อดึงเวอร์ชันล่าสุดได้เร็ว
  • workflow มี index บน (line_oa_id, organization_id) สำหรับ query แยกตาม tenant และ index บน deleted_date สำหรับกรองเรกคอร์ดที่ถูก soft delete
  • trigger_rule อ้างอิงกลับมาที่ workflow.id ผ่าน trigger_rule.workflow_id และระบุตำแหน่ง node ที่ใช้ผ่าน workflow_node_path (ดู กฎทริกเกอร์และงานตั้งเวลา)
  • scheduled_action ก็เก็บ workflow_id และ workflow_node_path เช่นกัน เพื่อให้รู้ว่า action ที่ตั้งเวลาไว้มาจาก node ไหนของเวิร์กโฟลว์
  • workflow และ workflow_version ไม่มี unique constraint บน (workflow_id, version) ในระดับ schema — ความไม่ซ้ำของเลขเวอร์ชันถูกควบคุมที่ระดับแอปพลิเคชัน