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)

Керування потоком

Умова
Розгалуження за умовами
Цикл
Змінна
Паралельне розгалуження
Виклик робочого процесу
Вивід потоку
Мапінг змінних JSON
Затримка
Завершення

Обчислення

Обчислення
Обчислення дати
Обчислення JSON

Операції з даними

Додавання даних
Оновлення даних
Запит даних
Видалення даних
Операції SQL

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

Ручна обробка
Затвердження
Копія (CC)

Розширені типи

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

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

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

Ця документація була автоматично перекладена штучним інтелектом.

#JavaScript Скрипт

This feature is provided by the commercial plugin «Робочий процес: JavaScript», please purchase to use

#Вступ

Вузол 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 у своєму скрипті:

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;