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スクリプト
通知
メール送信
レスポンス
レスポンスメッセージ
変数
実行履歴
バージョン管理
詳細設定

拡張機能開発

概要
拡張トリガータイプ
拡張ノードタイプ
APIリファレンス
Previous PageHTTPリクエスト
Next Page通知
TIP

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

#JavaScript スクリプト

This feature is provided by the commercial plugin «ワークフロー:JavaScript ノード», please purchase to use

#はじめに

JavaScript スクリプトノードは、ユーザーがワークフロー内でカスタムのサーバーサイドJavaScriptスクリプトを実行できるようにします。スクリプトでは、ワークフローの上流にある変数をパラメーターとして使用でき、その戻り値は下流のノードで利用できます。

スクリプトはNocoBaseアプリケーションのサーバーサイドでワーカースレッドとして実行され、Node.jsのほとんどの機能をサポートしていますが、ネイティブな実行環境とはいくつかの違いがあります。詳細は機能リストをご覧ください。

#ノードの作成

ワークフロー設定画面で、フロー内のプラス(「+」)ボタンをクリックし、「JavaScript」ノードを追加します。

20241202203457

#ノードの設定

20241202203655

#パラメーター

スクリプト内のコードロジックで使用するため、ワークフローのコンテキスト変数や静的な値をスクリプトに渡す際に使用します。name はパラメーター名で、スクリプトに渡されると変数名として扱われます。value はパラメーター値で、変数を選択するか定数を入力できます。

#スクリプトの内容

スクリプトの内容は関数と見なすことができ、Node.js環境でサポートされている任意のJavaScriptコードを記述できます。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などのメソッドを使用する場合は、Node.jsのtimersパッケージを介してインポートする必要があります。

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;