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
תהליך עבודה
סקירה כללית
התחלה מהירה

טריגרים

סקירה כללית
אירוע אוסף
משימה מתוזמנת
אירוע לפני פעולה
אירוע אחרי פעולה
אירוע פעולה מותאם אישית
אישור
Webhook

צמתים

סקירה כללית

בינה מלאכותית

מודל שפה גדול

בקרת זרימה

תנאי
ענף רב-תנאים
לולאה
משתנים
ענף מקבילי
קריאה לתהליך עבודה
פלט תהליך
מיפוי משתני JSON
השהיה
סיום

חישוב

חישוב
חישוב תאריך
חישוב JSON

פעולות נתונים

יצירת נתונים
עדכון נתונים
שאילתת נתונים
מחיקת נתונים
פעולת SQL

עיבוד ידני

עיבוד ידני
אישור
העתק

סוגים מורחבים

בקשת HTTP
סקריפט JavaScript
התראה
שליחת דוא"ל
תגובה
הודעת תגובה
משתנים
היסטוריית ביצוע
ניהול גרסאות
אפשרויות מתקדמות

פיתוח הרחבות

סקירה כללית
הרחבת סוגי טריגרים
הרחבת סוגי צמתים
API Reference
Previous Pageבקשת HTTP
Next Pageהתראה
הודעת תרגום AI

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

#סקריפט JavaScript

Workflow: JavaScript NodeCommunity Edition+

#מבוא

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

הסקריפט ירוץ ב-worker thread (תהליכון עבודה) בצד השרת של יישום NocoBase ותומך ברוב התכונות של Node.js, אך קיימים עדיין הבדלים מסוימים מסביבת ההרצה המקורית. לפרטים נוספים, עיינו ברשימת תכונות.

#יצירת צומת

בממשק הגדרות תהליך העבודה, לחצו על כפתור הפלוס ("+") בתוך התהליך כדי להוסיף צומת "JavaScript":

20241202203457

#הגדרות צומת

20241202203655

#פרמטרים

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

#תוכן סקריפט

תוכן הסקריפט יכול להיחשב כפונקציה, ניתן לכתוב כל קוד JavaScript הנתמך בסביבת Node.js, וניתן להשתמש בפקודת return כדי להחזיר ערך כתוצאת הרצת הצומת, לשימוש על ידי צמתים עוקבים כמשתנה.

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

20241202203833

#הגדרת פסק זמן

היחידה היא מילישניות. כאשר הערך מוגדר ל-0, המשמעות היא שלא מוגדר פסק זמן.

#המשך תהליך העבודה לאחר שגיאה

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

טיפ

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

#רשימת תכונות

#גרסת Node.js

זהה לגרסת Node.js שבה רץ היישום הראשי.

#תמיכה במודולים

ניתן להשתמש במודולים בסקריפט עם מגבלות, באופן התואם ל-CommonJS, באמצעות פקודת require() לייבוא מודולים בקוד.

תומך במודולים מקוריים של Node.js ובמודולים המותקנים ב-node_modules (כולל חבילות תלות שכבר נמצאות בשימוש על ידי NocoBase). מודולים שברצונכם להפוך לזמינים לקוד חייבים להיות מוצהרים במשתנה הסביבה של היישום WORKFLOW_SCRIPT_MODULES, כאשר שמות חבילות מרובים מופרדים בפסיקים, לדוגמה:

WORKFLOW_SCRIPT_MODULES=crypto,timers,lodash,dayjs
טיפ

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

בסביבת פריסה שאינה מבוססת קוד מקור, אם מודול מסוים אינו מותקן ב-node_modules, אתם יכולים להתקין ידנית את החבילה הנדרשת לתוך ספריית storage. לדוגמה, כדי להשתמש בחבילת exceljs, בצעו את הפעולות הבאות:

cd storage
npm i --no-save --no-package-lock --prefix . exceljs

לאחר מכן, הוסיפו את הנתיב היחסי (או המוחלט) של החבילה, בהתבסס על ספריית העבודה הנוכחית (CWD) של היישום, למשתנה הסביבה WORKFLOW_SCRIPT_MODULES:

WORKFLOW_SCRIPT_MODULES=./storage/node_modules/exceljs

כעת תוכלו להשתמש בחבילת exceljs בסקריפט שלכם (שם ה-require חייב להיות זהה בדיוק לזה שהוגדר במשתנה הסביבה):

const ExcelJS = require('./storage/node_modules/exceljs');
// ...

#משתנים גלובליים

אינו תומך במשתנים גלובליים כגון global, process, __dirname ו-__filename.

console.log(global); // will throw error: "global is not defined"

#פרמטרים נכנסים

פרמטרים שהוגדרו בצומת ישמשו כמשתנים גלובליים בתוך הסקריפט וניתן להשתמש בהם ישירות. פרמטרים המועברים לסקריפט תומכים רק בסוגים בסיסיים, כגון boolean, number, string, object ומערכים. אובייקט Date יומר למחרוזת בפורמט ISO לאחר העברתו. סוגים מורכבים אחרים אינם ניתנים להעברה ישירה, כגון מופעים של מחלקות מותאמות אישית.

#ערך החזרה

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

return 123;

#פלט (לוגים)

תומך בשימוש ב-console להוצאת לוגים.

console.log('hello world!');

כאשר תהליך העבודה מורץ, הפלט של צומת הסקריפט יירשם גם הוא לקובץ הלוג של תהליך העבודה המתאים.

#אסינכרוני

תומך בשימוש ב-async להגדרת פונקציות אסינכרוניות, וב-await לקריאה לפונקציות אסינכרוניות. תומך בשימוש באובייקט הגלובלי Promise.

async function test() {
  return Promise.resolve(1);
}

const value = await test();
return value;

#טיימרים

כדי להשתמש בשיטות כמו setTimeout, setInterval או setImmediate, עליכם לייבא אותן מחבילת timers של Node.js.

const { setTimeout, setInterval, setImmediate, clearTimeout, clearInterval, clearImmediate } = require('timers');

async function sleep(time) {
  return new Promise((resolve) => setTimeout(resolve, time));
}

await sleep(1000);

return 123;