このドキュメントはAIによって翻訳されました。正確な情報については英語版をご参照ください。
JavaScript スクリプトノードを使用すると、ユーザーはワークフロー内でカスタムのサーバーサイド JavaScript スクリプトを実行できます。スクリプトでは、ワークフローの上流の変数をパラメーターとして使用でき、スクリプトの戻り値を下流のノードに提供して使用できます。
スクリプトは NocoBase アプリケーションのサーバーサイドでワーカースレッドを起動して実行され、Node.js のほとんどの機能をサポートしていますが、ネイティブの実行環境とは一部異なります。詳細は 特性リスト を参照してください。
ワークフロー設定インターフェースで、フロー内のプラス(「+」)ボタンをクリックし、「JavaScript」ノードを追加します。


スクリプト内のコードロジックで使用するために、ワークフローコンテキストの変数や静的な値をスクリプトに渡すために使用します。そのうち name はパラメーター名で、スクリプトに渡された後は変数名として使用されます。value はパラメーター値で、変数を選択するか定数を入力できます。
スクリプト内容は一つの関数と見なすことができ、Node.js 環境でサポートされている任意の JavaScript コードを記述できます。また、return 文を使用してノードの実行結果として値を返し、後続のノードで変数として使用できます。
コードを記述した後、エディタの下にあるテストボタンをクリックしてテスト実行のダイアログを開き、静的な値をパラメーターに入力してシミュレーション実行を行うことができます。実行後、ダイアログで戻り値と出力(ログ)の内容を確認できます。

単位はミリ秒で、0 に設定するとタイムアウトを設定しないことを意味します。
チェックを入れると、スクリプトのエラーやタイムアウトエラーが発生しても、後続のノードが実行されます。
スクリプトがエラーになった後は戻り値がなく、ノードの結果はエラーメッセージで埋められます。後続のノードでスクリプトノードの結果変数を使用する場合は、慎重に処理する必要があります。
メインアプリケーションが実行されている Node.js バージョンと同じです。
スクリプト内では制限付きでモジュールを使用でき、CommonJS と同様に、コード内で require() 命令を使用してモジュールをインポートします。
Node.js ネイティブモジュール、および node_modules にインストールされているモジュール(NocoBase が既に使用している依存パッケージを含む)をサポートしています。コードで使用できるようにするモジュールは、アプリケーションの環境変数 WORKFLOW_SCRIPT_MODULES で宣言する必要があり、複数のパッケージ名は半角カンマで区切ります。例:
環境変数 WORKFLOW_SCRIPT_MODULES で宣言されていないモジュールは、Node.js ネイティブのものや node_modules にインストールされているものであっても、スクリプト内で使用することはできません。このポリシーは、運用管理層でユーザーが使用できるモジュールリストを制御するために使用でき、一部のシナリオでスクリプトの権限が過剰になるのを防ぐことができます。
ソースコードデプロイではない環境で、特定のモジュールが node_modules にインストールされていない場合、必要なパッケージを storage ディレクトリに手動でインストールできます。例えば、exceljs パッケージを使用する必要がある場合は、以下の操作を実行します。
その後、アプリケーションの CWD(現在の作業ディレクトリ)を基準とした相対パス(または絶対パス)で、そのパッケージを環境変数 WORKFLOW_SCRIPT_MODULES に追加します。
これで、スクリプト内で exceljs パッケージを使用できるようになります(require の名称は環境変数で定義されたものと完全に一致させる必要があります):
global、process、__dirname、__filename などのグローバル変数はサポートされていません。
ノードで設定されたパラメーターはスクリプト内のグローバル変数として扱われ、直接使用できます。スクリプトに渡されるパラメーターは、boolean、number、string、object、配列などの基本型のみをサポートしています。Date オブジェクトは渡された後、ISO 形式の文字列に変換されます。カスタムクラスのインスタンスなど、その他の複雑な型は直接渡すことができません。
return 文を使用すると、基本型のデータ(パラメーターのルールと同様)をノードの結果として返すことができます。コード内で return 文が呼び出されない場合、ノードの実行に戻り値はありません。
console を使用したログ出力をサポートしています。
ワークフローの実行時、スクリプトノードの出力も対応するワークフローのログファイルに記録されます。
async を使用した非同期関数の定義、および await を使用した非同期関数の呼び出しをサポートしています。Promise グローバルオブジェクトの使用をサポートしています。
setTimeout、setInterval、setImmediate などのメソッドを使用する必要がある場合は、Node.js の timers パッケージを介してインポートする必要があります。