logologo
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
logologo

บทนำ

FlowEngine คืออะไร
ความสัมพันธ์ระหว่าง FlowEngine และปลั๊กอิน
เริ่มต้นใช้งาน
แผนการเรียนรู้

คู่มือ

การลงทะเบียน FlowModel
การสร้าง FlowModel
การเรนเดอร์ FlowModel
โฟลว์เหตุการณ์และการกำหนดค่าของ FlowModel
การคงอยู่ของ FlowModel
วงจรชีวิตของ FlowModel
ระบบบริบทของ FlowModel
กลไกการตอบสนอง: Observable
FlowModel vs React.Component

Definitions

ModelDefinition
FlowDefinition
EventDefinition
ActionDefinition
StepDefinition
Previous Pageวงจรชีวิตของ FlowModel
Next Pageกลไกการตอบสนอง: Observable
TIP

เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ

#ภาพรวมระบบ Context

ระบบ Context ของ NocoBase FlowEngine แบ่งออกเป็นสามเลเยอร์ ซึ่งแต่ละเลเยอร์จะสอดคล้องกับขอบเขตการทำงานที่แตกต่างกัน การใช้งานอย่างเหมาะสมจะช่วยให้คุณสามารถแชร์และแยกส่วนบริการ, การตั้งค่า และข้อมูลได้อย่างยืดหยุ่น ซึ่งจะช่วยเพิ่มความสามารถในการบำรุงรักษาและขยายระบบของธุรกิจได้ครับ

  • FlowEngineContext (Global Context): มีเพียงหนึ่งเดียวทั่วทั้งระบบ ทุกโมเดลและเวิร์กโฟลว์สามารถเข้าถึงได้ เหมาะสำหรับการลงทะเบียนบริการหรือการตั้งค่าระดับ Global
  • FlowModelContext (Model Context): ใช้สำหรับการแชร์ Context ภายในโครงสร้างโมเดล ซับโมเดลจะรับช่วงต่อ (delegate) Context จากโมเดลหลักโดยอัตโนมัติ และรองรับการเขียนทับชื่อเดียวกัน เหมาะสำหรับการแยกตรรกะและข้อมูลในระดับโมเดล
  • FlowRuntimeContext (Flow Runtime Context): ถูกสร้างขึ้นทุกครั้งที่เวิร์กโฟลว์ทำงาน และคงอยู่ตลอดวงจรการทำงานของเวิร์กโฟลว์ เหมาะสำหรับการส่งผ่านข้อมูล, การจัดเก็บตัวแปร, และการบันทึกสถานะการทำงานภายในเวิร์กโฟลว์ รองรับสองโหมดคือ mode: 'runtime' | 'settings' ซึ่งจะสอดคล้องกับโหมดรันไทม์ (runtime) และโหมดตั้งค่า (settings) ตามลำดับ

Context ทั้งหมด ไม่ว่าจะเป็น FlowEngineContext (Global Context), FlowModelContext (Model Context), FlowRuntimeContext (Flow Runtime Context) ล้วนเป็นซับคลาส (subclass) หรืออินสแตนซ์ (instance) ของ FlowContext ครับ


#🗂️ แผนภาพโครงสร้างลำดับชั้น

FlowEngineContext (Global Context)
│
├── FlowModelContext (Model Context)
│     ├── Sub FlowModelContext (ซับโมเดล)
│     │     ├── FlowRuntimeContext (Flow Runtime Context)
│     │     └── FlowRuntimeContext (Flow Runtime Context)
│     └── FlowRuntimeContext (Flow Runtime Context)
│
├── FlowModelContext (Model Context)
│     └── FlowRuntimeContext (Flow Runtime Context)
│
└── FlowModelContext (Model Context)
      ├── Sub FlowModelContext (ซับโมเดล)
      │     └── FlowRuntimeContext (Flow Runtime Context)
      └── FlowRuntimeContext (Flow Runtime Context)
  • FlowModelContext สามารถเข้าถึงคุณสมบัติและเมธอดของ FlowEngineContext ได้ผ่านกลไกการรับช่วงต่อ (delegate) เพื่อให้สามารถแชร์ความสามารถระดับ Global ได้
  • FlowModelContext ของซับโมเดลสามารถเข้าถึง Context ของโมเดลหลัก (ความสัมพันธ์แบบซิงโครนัส) ได้ผ่านกลไกการรับช่วงต่อ (delegate) และรองรับการเขียนทับชื่อเดียวกัน
  • โมเดลหลัก-ซับโมเดลแบบอะซิงโครนัสจะไม่สร้างความสัมพันธ์แบบรับช่วงต่อ (delegate) เพื่อหลีกเลี่ยงการปนเปื้อนสถานะ
  • FlowRuntimeContext จะเข้าถึง FlowModelContext ที่เกี่ยวข้องเสมอผ่านกลไกการรับช่วงต่อ (delegate) แต่จะไม่ส่งการเปลี่ยนแปลงกลับขึ้นไปด้านบน

#🧭 โหมดรันไทม์และโหมดตั้งค่า (mode)

FlowRuntimeContext รองรับสองโหมด ซึ่งแยกความแตกต่างด้วยพารามิเตอร์ mode ดังนี้ครับ

  • mode: 'runtime' (โหมดรันไทม์): ใช้ในขั้นตอนการทำงานจริงของเวิร์กโฟลว์ คุณสมบัติและเมธอดจะส่งคืนข้อมูลจริง ตัวอย่างเช่น:

    console.log(runtimeCtx.steps.step1.result); // 42
  • mode: 'settings' (โหมดตั้งค่า): ใช้ในขั้นตอนการออกแบบและตั้งค่าเวิร์กโฟลว์ การเข้าถึงคุณสมบัติจะส่งคืนสตริงเทมเพลตตัวแปร ซึ่งช่วยให้เลือกนิพจน์และตัวแปรได้ง่ายขึ้น ตัวอย่างเช่น:

    console.log(settingsCtx.steps.step1.result); // '{{ ctx.steps.step1.result }}'

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