logologo
Začínáme
Manuál
Vývoj
Pluginy
API
Domů
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Začínáme
Manuál
Vývoj
Pluginy
API
Domů
logologo
Workflow
Přehled
Rychlý start

Spouštěče

Přehled
Události kolekce
Plánované úlohy
Události před akcí
Události po akci
Vlastní události akcí
Schvalování
Webhook

Uzly

Přehled

Umělá inteligence (AI)

Velké jazykové modely (LLM)

Řízení toku

Podmínka
Větvení podle podmínek
Smyčka
Proměnná
Paralelní větvení
Volání workflow
Výstup procesu
Mapování JSON proměnných
Zpoždění
Ukončení

Výpočet

Výpočet
Výpočty s datem
Výpočty s JSON

Operace s daty

Přidat data
Aktualizovat data
Načíst data
Odstranit data
SQL operace

Ruční zpracování

Ruční zpracování
Schvalování
Odeslat kopii (CC)

Rozšířené typy

HTTP požadavek
JavaScript skript
Oznámení
Odeslání e-mailu
Odpověď
Zpráva v odpovědi
Proměnná
Záznamy o spuštění
Správa verzí
Pokročilé možnosti

Vývoj rozšíření

Přehled
Rozšířené typy spouštěčů
Rozšířené typy uzlů
API reference
Previous PageHTTP požadavek
Next PageOznámení
Upozornění na AI překlad

Tento dokument byl přeložen pomocí AI. Pro přesné informace se podívejte na anglickou verzi.

#JavaScript

Workflow: JavaScript NodeCommunity Edition+

#Úvod

Node JavaScript umožňuje uživatelům spouštět vlastní serverový JavaScriptový skript v rámci Workflow. Skript může jako parametry používat proměnné z předchozích kroků Workflow a jeho návratová hodnota může být poskytnuta následným Node.

Skript se spouští v pracovním vlákně na serveru aplikace NocoBase a podporuje většinu funkcí Node.js. Existují však určité rozdíly oproti nativnímu spouštěcímu prostředí. Podrobnosti naleznete v Seznamu funkcí.

#Vytvoření uzlu

V rozhraní Interface Configuration pro Workflow klikněte na tlačítko plus („+“) v toku a přidejte Node „JavaScript“:

20241202203457

#Konfigurace Node

20241202203655

#Parametry

Slouží k předávání proměnných nebo statických hodnot z kontextu Workflow do skriptu pro použití v logice kódu. name je název parametru, který se po předání do skriptu stane názvem proměnné. value je hodnota parametru, kterou můžete vybrat jako proměnnou nebo zadat jako konstantu.

#Obsah skriptu

Obsah skriptu lze považovat za funkci. Můžete napsat libovolný JavaScriptový kód podporovaný v prostředí Node.js a použít příkaz return k vrácení hodnoty jako výsledku spuštění Node, kterou pak mohou následné Node použít jako proměnnou.

Po napsání kódu můžete kliknout na tlačítko „Test“ pod editorem, čímž otevřete dialogové okno pro testovací spuštění. Zde můžete vyplnit parametry statickými hodnotami pro simulované spuštění. Po provedení se v dialogovém okně zobrazí návratová hodnota a obsah výstupu (logu).

20241202203833

#Nastavení časového limitu

Jednotkou jsou milisekundy. Hodnota 0 znamená, že není nastaven žádný časový limit.

#Pokračovat ve Workflow při chybě

Pokud je tato možnost zaškrtnuta, následné Node se budou provádět i v případě, že skript narazí na chybu nebo vyprší časový limit.

Tip

Pokud skript selže, nebude mít žádnou návratovou hodnotu a výsledek Node bude vyplněn chybovou zprávou. Pokud následné uzly používají proměnnou výsledku z JavaScript Node, je třeba s tím zacházet opatrně.

#Seznam funkcí

#Verze Node.js

Stejná jako verze Node.js, na které běží hlavní aplikace.

#Podpora modulů

Moduly lze ve skriptu používat s omezeními, v souladu s CommonJS, pomocí direktivy require() pro import modulů.

Podporuje nativní moduly Node.js a moduly nainstalované v node_modules (včetně závislostí již používaných NocoBase). Moduly, které mají být dostupné pro kód, musí být deklarovány v proměnné prostředí aplikace WORKFLOW_SCRIPT_MODULES, přičemž více názvů balíčků je odděleno čárkami, například:

WORKFLOW_SCRIPT_MODULES=crypto,timers,lodash,dayjs
Tip

Moduly, které nejsou deklarovány v proměnné prostředí WORKFLOW_SCRIPT_MODULES, nelze ve skriptu použít, a to ani v případě, že jsou nativní pro Node.js nebo již nainstalované v node_modules. Tato politika může být použita na provozní úrovni k řízení seznamu modulů dostupných uživatelům, což v některých scénářích zabraňuje skriptům mít nadměrná oprávnění.

V prostředí, kde není nasazení ze zdrojového kódu, pokud modul není nainstalován v node_modules, můžete požadovaný balíček ručně nainstalovat do adresáře storage. Například, pokud potřebujete použít balíček exceljs, můžete provést následující kroky:

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

Poté přidejte relativní (nebo absolutní) cestu k tomuto balíčku, vzhledem k CWD (aktuálnímu pracovnímu adresáři) aplikace, do proměnné prostředí WORKFLOW_SCRIPT_MODULES:

WORKFLOW_SCRIPT_MODULES=./storage/node_modules/exceljs

Poté můžete balíček exceljs použít ve svém skriptu:

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

#Globální proměnné

Nepodporuje globální proměnné jako global, process, __dirname a __filename.

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

#Vstupní parametry

Parametry nakonfigurované v Node se stávají globálními proměnnými ve skriptu a lze je přímo používat. Parametry předávané skriptu podporují pouze základní typy, jako jsou boolean, number, string, object a pole. Objekt Date bude po předání převeden na řetězec ve formátu ISO. Jiné komplexní typy, jako jsou instance vlastních tříd, nelze přímo předávat.

#Návratová hodnota

Pomocí příkazu return lze vrátit data základních typů (stejná pravidla jako pro parametry) zpět do Node jako jeho výsledek. Pokud v kódu není volán příkaz return, spuštění Node nebude mít žádnou návratovou hodnotu.

return 123;

#Výstup (Log)

Podporuje použití console pro výstup logů.

console.log('hello world!');

Při spuštění Workflow je výstup JavaScript Node také zaznamenán do souboru protokolu odpovídajícího pracovního postupu.

#Asynchronní operace

Podporuje použití async pro definování asynchronních funkcí a await pro jejich volání. Podporuje použití globálního objektu Promise.

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

const value = await test();
return value;

#Časovače

Pokud potřebujete použít metody jako setTimeout, setInterval nebo setImmediate, je nutné je importovat z balíčku 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;