Questetra には、ユーザ自身がスクリプト(ECMAScript)を記述してオリジナル処理を定義することのできる自動処理工程[スクリプトタスク]と、インポートして追加することのできる自動処理工程[サービスタスク(Add-on)]があります。
([サービスタスク(Add-on)]には、公開されているサービスタスク定義やユーザ自身が自作したものがあります。)

2020年11月現在、[スクリプトタスク][サービスタスク(Add-on)]では、スクリプトエンジンとして「GraalJS」「Nashorn」「Rhino」を利用することができますが、「Rhino」につきましては 2021年6月30日をもって廃止されますのでお知らせいたします。

また、Rhino 廃止に伴い、Rhino でのみ利用可能な次の形式のデータ参照/更新方法も廃止されます。

  • 参照:data.get(“1”)
  • 更新:retVal.put(“1”, hogehoge)

つきましては、[スクリプトタスク][サービスタスク(Add-on)]にて、スクリプトエンジンに「Rhino」を利用している場合は、次の対応を進めていただきますようお願いいたします。

2021年1月18日にアップグレードされる Ver. 12.3 のワークフロー基盤(Questetra BPM Suite)において、「Rhino」が利用されているワークフローアプリについては、アプリ設定エラーとなるように対応されます。アプリ設定エラーとなっても、稼働しているワークフローアプリの動作に影響はありませんが、アプリの新バージョンを[リリース]する際は、エラーを解消していただく必要がございます。

◆ スクリプトタスク

スクリプトエンジンの変更

  • 「Rhino」から「GraalJS / Nashorn」へ変更
  • 長期的には、「GraalJS」の利用を推奨
    • 「Nashorn」は JDK 11 にて非推奨となっており、Questetra でも、近い将来、廃止予定となる見込みです

スクリプト(コード)の変更

スクリプト内にて、廃止される形式でのデータ参照/更新を行っている場合や E4X を利用した XML 処理を行っている場合は、コードの修正が必要となります。

  • データ参照/更新の方法を変更
    • 参照:data.get(“データ定義番号”)
      => engine.findDataByNumber(“データ定義番号”)、engine.findDataByVarName(“フィールド名”)、など
    • 更新:retVal.put(“データ定義番号”, データ型に応じた形式の値)
      => engine.setDataByNumber(“データ定義番号”, データ型に応じた形式の値)、engine.setDataByVarName(“フィールド名”, データ型に応じた形式の値)、など
    • 「フィールド名」を利用した形式を推奨
    • 関連ドキュメント:R2301: Scriptデータ取得/代入
  • XML 処理の変更

動作確認

設定変更後は、[デバッグ実行]にて、期待通りの動作をしているか動作確認を行ってください。
スクリプトエンジンを変更しただけの場合であっても、スクリプト(コード)の記述方法によっては動作が変わっている可能性がございます。動作が変わっている場合は、スクリプトの修正を行ってください。

コードの変更例

データ参照/更新の形式、XML 処理

文字型データ項目にセットされている次の XML を読み込んで、type=”リンゴ” の要素の price / quantity を出力するようなサンプルコードを記載します。

<sales vendor="John">
  <merchandise type="Orange" price="4" quantity="6"/>
  <merchandise type="Apple" price="3" quantity="10"/>
  <merchandise type="Peach" price="5" quantity="3"/>
</sales>

変更前(Rhino 版):廃止されるデータ参照/更新の形式、E4X を利用

var type = "Apple";
var xmlText = data.get("2");
var xmlObj = new XML( xmlText );

var price = xmlObj.merchandise.(@type == type).@price;
var quantity = xmlObj.merchandise.(@type == type).@quantity;

var outStr = "type: " + type + "\n" +
             "price: " + price + "\n" +
             "quantity: " + quantity;

retVal.put("0", outStr);

変更後(GraalJS 版):フィールド名を利用したデータ参照/更新の形式、XPath 式を利用

const type = "Apple";
const xmlText = engine.findDataByVarName("q_xml_text");

const xpathType = "/sales/merchandise[@type='" + type + "']"
const node = xpath.findNode(xmlText, xpathType);
const price = xpath.findNodeText(node, "@price");
const quantity = xpath.findNodeText(node, "@quantity");

// 直接、テキストを取得
// const price = xpath.findNodeText(xmlText, "/sales/merchandise[@type='" + type + "']/@price");
// const quantity = xpath.findNodeText(xmlText, "/sales/merchandise[@type='Apple']/@quantity");

let outStr = "type: " + type + "\n" +
             "price: " + price + "\n" +
             "quantity: " + quantity;

engine.setDataByVarName("q_xpath_output", outStr);
データの型変換

Rhino では自動的な型変換が行われていたところも、GraalJS では明示的な型変換(キャスト)が必要となります。
例えば、HttpRequestWrapper の queryParam / formParam などにて(無意識に)数値を引数に指定しているところがあれば、GraalJS ではエラーとなるので修正が必要となります。

const limitNum = 1000;

httpClient.begin().queryParam("limit", limitNum); //変更前
↓
httpClient.begin().queryParam("limit", String(limitNum)); //変更後

◆ サービスタスク(Add-on) 〜サービスタスク定義(Addon-XML)〜

サービスタスク定義ファイル(Addon-XML)は、次のいずれかの箇所に登録されています。

  • アプリ固有のサービスタスク定義
    • (アプリ詳細画面) > ▼アプリ > アドオンの管理 > サービスタスク定義ファイル
    • 対象アプリの「アプリ管理権限」が必要
  • アプリ共有のサービスタスク定義
    • システム設定 > アプリ共有アドオン > サービスタスク定義ファイル
    • 「システム管理権限」が必要

登録されている Addon-XML ファイルにて、<engine-type> 要素の値が「0」(Rhino)、または要素自体が未定義(存在しない)の場合、対応が必要となります。

利用されているサービスタスク定義の内容に応じて、いくつかの対応方法がありますので、ご利用環境に合った方法をご検討ください。

a. 標準アイテム(モデリング要素)に置き換える

利用しているサービスタスク定義と同等の機能が標準アイテムとして提供されている場合、ワークフロー図にて標準アイテムに置き換えていただくのが良いです。

  • 標準アイテム:R2010: モデリング要素の一覧
    • 標準アイテムは、随時追加されております
    • 以前はサービスタスク定義のアドオンとして公開されていたものが、標準アイテムとなったものもあります

b. 新しいサービスタスク定義に置き換える

利用しているサービスタスク定義の新版が公開されている場合、新しい Addon-XML ファイルをダウンロードし、既存のアドオンファイルを更新、もしくは別途登録後、ワークフロー図で置き換えてください。

  • サービスタスク定義:自動処理工程を追加する(アドオン)
    • 取得した Addon-XML ファイルにて、<engine-type> 要素の値が「1」(Nashorn)または「2」(GraalJS)となっていることを確認ください
    • サービスタスク定義の動作仕様は変更となっている場合があります。目的に合致しているかどうかを確認ください。
    • 既存のサービスタスク定義ファイルを更新した場合、稼働中のアプリの動作に影響を及ぼします

c. サービスタスク定義(Addon-XML)を編集して更新する

自作のサービスタスク定義や、上記 a/b の方法で対応できない場合は、ユーザ自身で Addon-XML ファイルを編集し、更新してください。

スクリプトエンジンの変更

  • <engine-type> 要素の値を「2」(GraalJS)、または「1」(Nashorn)に変更
    • <engine-type>2</engine-type>
  • <engine-type> 要素が未定義の場合は追加

スクリプト(コード)の変更

<script> 要素内のスクリプトにて、廃止される形式でのデータ参照/更新を行っている場合や E4X を利用した XML 処理を行っている場合は、コードの修正が必要となります。
対応方法については、「スクリプトタスク」セクション内の「スクリプト(コード)の変更」を参照してください。


お手数をお掛けし誠に恐縮ではございますが、スクリプトエンジン Rhino 廃止への準備・対応を進めていただきますよう、よろしくお願いします。

%d人のブロガーが「いいね」をつけました。