4 JavaScriptの保存前処理

概要

このセクションでは、JavaScriptによる保存前処理について詳しく説明します。

JavaScriptのプリプロセッシング

JavaScriptのプリプロセッシングは、JavaScriptの関数を1つのパラメータ'値'とユーザー提供の関数本体で呼び出すことで行われます。プリプロセッシングの結果は、この関数から返される値です。例えば、華氏から摂氏への変換を行う場合、ユーザーは次のように入力する必要があります。

return (value - 32)  * 5 / 9

JavaScript のプリプロセスパラメータは、server でJavaScript関数にラップされます。

function (value)
       {
          return (value - 32) * 5 / 9
       }

入力パラメータ'値'は常に文字列として渡されます。戻り値はいくつかの例外とともに
自動的に ToString() メソッドで文字列に変換されます (失敗した場合は、エラーが文字列として返されます)

  • 未定義の値を返すとエラーになります。
  • null値を返すと、入力値が破棄されます。これは失敗時のカスタマイズ値を破棄と似た動作になります。

エラーは、値/オブジェクト (通常は文字列またはエラー オブジェクト) をスローすることによって返されます。

例:

if (value == 0)
           throw "Zero input value"
       return 1/value

JavaScript の前処理ステップのバイトコードはキャッシュされ、次回ステップが適用されたときに再利用されます。アイテムの保存前処理ステップに変更を加えると、キャッシュされたスクリプトがリセットされ、後で再コンパイルされます。

連続したランタイムエラー(3回連続)が発生すると、1つのスクリプトによって次のスクリプトの実行環境が破壊される可能性を軽減するために、エンジンが再初期化されます (このアクションは、デバッグ レベル 4 以上でログに記録されます)。

JavaScriptの保存前処理は、Duktape(https://duktape.org/) JavaScriptエンジンを使用して実装されています。

参照: 追加のJavaScriptオブジェクトとグローバル関数

スクリプトでマクロを使用する

JavaScriptのコードの中で、ユーザーマクロを使用することができます。
スクリプトにユーザーマクロが含まれている場合、これらのマクロは、特定のプリプロセスを実行する前に、
server / proxy によって解決されます。注意点としてはフロントエンドで前処理ステップをテストする場合、
マクロの値は引き出されないので、手動で入力する必要があります。

マクロがその値で置き換えられるとき、コンテキストは無視されます。
マクロの値はそのままコードに挿入されるため、マクロの値を挿入する前にエスケープを追加することはできません。
このため,場合によってはJavaScriptのエラーを引き起こす可能性があることをご承知おきください。

以下の例では、受信した値が{$THRESHOLD}マクロの値を超えた場合、代わりに閾値(存在する場合)が返されます。

var threshold = '{$THRESHOLD}';
       return (!isNaN(threshold) && value > threshold) ? threshold : value;