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

טריגר

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

צומת

סקירה כללית

AI

LLM

בקרת זרימה

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

חישוב

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

פעולת נתונים

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

טיפול ידני

טיפול ידני
אישור
העתק

סוג הרחבה

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

פיתוח הרחבות

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

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

#סקריפט JavaScript

This feature is provided by the plugin «תהליך עבודה: JavaScript»This feature is provided by the commercial plugin «תהליך עבודה: JavaScript», please purchase to use

#מבוא

צומת סקריפט 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 בסקריפט שלכם:

const ExcelJS = require('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;