logologo
התחלה
מדריך
פיתוח
תוספים
API
בית
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
התחלה
מדריך
פיתוח
תוספים
API
בית
logologo

מבוא

מהו FlowEngine?
FlowEngine והקשר ל-Plugin
התחלה מהירה
מפת דרכים ללמידה

מדריך

רישום FlowModel
יצירת FlowModel
רינדור FlowModel
FlowModel: זרימת אירועים וקונפיגורציה
התמדה של FlowModel
מחזור החיים של FlowModel
מערכת הקונטקסט של FlowModel
מנגנון ריאקטיבי: Observable
FlowModel vs React.Component
נקודות הרחבה של RunJS Plugin

Definitions

ModelDefinition
FlowDefinition
EventDefinition
ActionDefinition
StepDefinition
Previous Pageמחזור החיים של FlowModel
Next Pageמנגנון ריאקטיבי: Observable
הודעת תרגום AI

מסמך זה תורגם על ידי AI. למידע מדויק, אנא עיינו בגרסה באנגלית.

#סקירה כללית של מערכת ההקשר

מערכת ההקשר (Context) של מנוע תהליכי העבודה (Flow engine) של NocoBase מחולקת לשלוש שכבות, המתאימות לטווחי פעולה (scopes) שונים. שימוש מושכל מאפשר שיתוף ובידוד גמישים של שירותים, הגדרות ונתונים, ומשפר את יכולת התחזוקה וההרחבה העסקית.

  • FlowEngineContext (הקשר גלובלי): ייחודי ברמה הגלובלית, נגיש לכל המודלים ותהליכי העבודה, מתאים לרישום שירותים גלובליים, הגדרות וכו'.
  • FlowModelContext (הקשר מודל): משמש לשיתוף הקשר בתוך עץ מודלים, מודלי משנה מאצילים אוטומטית להקשר של מודל האב, תומך בדריסה של שמות זהים, מתאים לבידוד לוגיקה ונתונים ברמת המודל.
  • FlowRuntimeContext (הקשר זמן ריצה של תהליך עבודה): נוצר בכל הרצה של תהליך עבודה, מלווה את כל מחזור ההרצה, מתאים להעברת נתונים, אחסון משתנים, תיעוד מצב הרצה וכו'. תומך בשני מצבים: mode: 'runtime' | 'settings', המתאימים למצב ריצה ומצב הגדרות בהתאמה.

כל ה-FlowEngineContext (הקשר גלובלי), FlowModelContext (הקשר מודל), FlowRuntimeContext (הקשר זמן ריצה של תהליך עבודה) וכו', הם תתי-מחלקות או מופעים של FlowContext.


#🗂️ תרשים מבנה היררכי

FlowEngineContext (הקשר גלובלי)
│
├── FlowModelContext (הקשר מודל)
│     ├── FlowModelContext משנה (מודל משנה)
│     │     ├── FlowRuntimeContext (הקשר זמן ריצה של תהליך עבודה)
│     │     └── FlowRuntimeContext (הקשר זמן ריצה של תהליך עבודה)
│     └── FlowRuntimeContext (הקשר זמן ריצה של תהליך עבודה)
│
├── FlowModelContext (הקשר מודל)
│     └── FlowRuntimeContext (הקשר זמן ריצה של תהליך עבודה)
│
└── FlowModelContext (הקשר מודל)
      ├── FlowModelContext משנה (מודל משנה)
      │     └── FlowRuntimeContext (הקשר זמן ריצה של תהליך עבודה)
      └── FlowRuntimeContext (הקשר זמן ריצה של תהליך עבודה)
  • FlowModelContext ניגש למאפיינים ומתודות של FlowEngineContext דרך מנגנון האצלה (delegate), למימוש שיתוף יכולות גלובליות.
  • ה-FlowModelContext של מודל משנה ניגש להקשר של מודל האב (קשר סינכרוני) דרך מנגנון האצלה (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 }}'

עיצוב דו-מצבי זה מבטיח זמינות נתונים בזמן ריצה ומקל על הפניית משתנים ויצירת ביטויים בזמן ההגדרה, ובכך משפר את הגמישות וקלות השימוש של מנוע תהליכי העבודה.


#🤖 מידע הקשר עבור כלים/מודלים גדולים (LLM)

בתרחישים מסוימים (כגון עריכת קוד RunJS ב-JS*Model או AI coding), יש צורך לאפשר ל"צד הקורא" להבין מבלי להריץ את הקוד:

  • אילו יכולות סטטיות קיימות תחת ה-ctx הנוכחי (תיעוד API, פרמטרים, דוגמאות, קישורי תיעוד וכו')
  • אילו משתנים זמינים קיימים בממשק/בזמן הריצה הנוכחי (כגון מבנים דינמיים כמו "רשומה נוכחית", "רשומת חלון קופץ נוכחית" וכו')
  • צילום מצב (snapshot) קטן של סביבת הריצה הנוכחית (עבור prompt)

#1) await ctx.getApiInfos(options?) (מידע API סטטי)

#2) await ctx.getVarInfos(options?) (מידע על מבנה משתנים)

  • נבנה על בסיס defineProperty(...).meta (כולל meta factory)
  • תומך בחיתוך path ובבקרת עומק maxDepth
  • נפתח כלפי מטה רק בעת הצורך

פרמטרים נפוצים:

  • maxDepth: רמת פתיחה מקסימלית (ברירת מחדל 3)
  • path: string | string[]: חיתוך, פלט רק של תת-עץ בנתיב שצוין

#3) await ctx.getEnvInfos() (צילום מצב של סביבת זמן הריצה)

מבנה צומת (מפושט):

type EnvNode = {
  description?: string;
  getVar?: string; // ניתן לשימוש ישיר עבור await ctx.getVar(getVar), מתחיל ב-"ctx."
  value?: any; // ערך סטטי מפוענח/ניתן לסריאליזציה
  properties?: Record<string, EnvNode>;
};