intra-martのユーザー定義のJavascriptを作成して、エラーになったので、備忘録として残す。
Javascript
ArrayBufferを使うために、以下の機能を作成した。
function str2ab(str) {
const buf = new ArrayBuffer(str.length);
const bufView = new Uint8Array(buf);
for (let i = 0, strLen = str.length; i < strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
実行結果
jp.co.intra_mart.system.javascript.EcmaError: ReferenceErrorです。""ArrayBuffer ""が定義されていません。
調査
IM-LogicDesignerのユーザ定義「Javascript」は、サーバサイドで実行されるJavascriptとなる。
サーバサイドJavascriptは、サードパーティライブラリとして Rhinoを導入し、バージョンは 1.7R4 を利用。
参照:2022 Spring(Eustoma) リリースノート : サードパーティ ライセンス一覧
https://document.intra-mart.jp/library/iap/public/iap_release_note/texts/license/index.html
Rhino 1.7R4 は、JavaScript 1.7 で利用可能な内容、および、一部の JavaScript 1.8 や ES2015 以降の書き方が利用可能。
参照:Rhino ES2015 Support
https://mozilla.github.io/rhino/compat/engines.html
原因
ArrayBufferは、サーバサイドJavascriptエンジンであるRhinoでサポートをしていないメソッドであることがエラーの原因。