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

Ручна обробка

Ручна обробка
Схвалення
Копія (CC)

Типи розширень

HTTP-запит
Скрипт JavaScript
Сповіщення
Надсилання email
Відповідь
Повідомлення відповіді
Змінні
Журнал виконання
Керування версіями
Розширені параметри

Розробка розширень

Огляд
Розширення типів тригерів
Розширення типів вузлів
Довідник API
Previous PageHTTP-запит
Next PageСповіщення
Повідомлення про ШІ-переклад

Цей документ було перекладено за допомогою ШІ. Для точної інформації зверніться до англійської версії.

#JavaScript скрипт

Workflow: JavaScript NodeCommunity Edition+

#Вступ

Вузол JavaScript скрипт дозволяє користувачам виконувати власну серверну частину JavaScript скрипту в робочому процесі. У скрипті можна використовувати змінні з попередніх етапів процесу як параметри, а повернене значення скрипту можна надати для використання наступним вузлам.

Скрипт виконується в робочому потоці на стороні сервера застосунку 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); // викличе помилку: "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;