intra-mart Accel Platform スクリプト開発モデル プログラミングガイド 第16版 2020-04-01

グローバル関数の作成

intra-mart Accel Platform には JavaScript で記述したユーザ定義関数を「グローバル関数」として登録する方法があります。
グローバル関数には、Procedure.define 関数と initializer-XXX.xml設定ファイルの2通りの定義方法があります。

前提条件

  • intra-mart e Builder for Accel Platform をインストール済みであること。
  • モジュール・プロジェクトの作成が完了していること。

設定ファイルでグローバル関数を登録

以下の手順でグローバル関数を登録します。

注意

関数名が被らないように注意してください。
グローバルとして関数を定義する場合、特定のプログラムにおいて同名の関数が存在した場合等に影響を与える可能性があります。

ステップ1:initializerの作成

src/main/conf/products/initializer/initializer-[プロジェクト名].xmlを作成します。
initializer-sample.xml

コラム

initializer-[プロジェクト名].xml は、厳密にはプロジェクト名ではなくモジュールのIDから決定されます。
モジュールIDの”.”で分割してその末尾になります。
例として、モジュールIDが「org.example.foo」場合は「initializer-foo.xml」をという名前で initializer を定義してください。
intra-mart e Builder for Accel Platform で開発する場合はプロジェクト名と考えて問題ありません。

注意

intra-mart e Builder for Accel Platform でプロジェクトを作成する際は 「im」 で始まる名前は利用できません。
ファイルに内容を加えます。記述方法は、<java-script-api><global-function-script>グローバル関数を定義する js ファイルのパス#実行関数</global-function-script></java-script-api>です。
<?xml version="1.0" encoding="UTF-8"?>
<initializer-config
    xmlns="http://intra-mart.co.jp/system/secure/product/initializer/config/initializer-config"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://intra-mart.co.jp/system/secure/product/initializer/config/initializer-config ../../../schema/initializer-config.xsd ">

  <java-script-api>
    <global-function-script>sample/prog_guide/common_libs/global_fnction#global_fnction1</global-function-script>
  </java-script-api>

</initializer-config>

注意

拡張APIの登録を行っている場合は、<global-function-script>タグは<api-script>タグよりも先に記述してください。

ステップ2:initializerに設定したjsファイルの作成

上記のxmlにて設定したjsファイルを作成します。
この例では、プロジェクトの src/main/jssp/src/sample/prog_guide/common_libs という階層でフォルダを作成し、作成したフォルダ配下に「 global_fnction.js 」ファイルを作成し、 以下のように実装をします。
sample\prog_guide\common_libs\api.js
/** 
 * 共通関数作成
 */ 
function global_fnction1(valueA, valueB){
	//ここに処理を書きます
	return valueA - valueB;
}

ステップ3:モジュールのデプロイ

エクスポートしたユーザモジュールを含んだwarファイルを作成します。
そのwarファイルをデプロイして intra-mart Accel Platform を再起動します。

注意

initializer は warファイルに含まれるモジュール構成を元に読み込まれるので、一旦ユーザモジュールにしてwarファイルに組み込んだ形でないと動作しません。
ユーザモジュールに関しては、『 intra-mart e Builder for Accel Platform アプリケーション開発ガイド / immファイルのエクスポート 』を参照してください。

ステップ4:登録したグローバル関数の呼び出し

登録したグローバル関数を、任意のjsファイルから呼び出すことができます。
function init(request){
	Debug.console(global_fnction1(5,3));
}

Procedure.define 関数でグローバル関数を登録

以下の手順でグローバル関数を登録します。

注意

関数名が被らないように注意してください。
グローバルとして関数を定義する場合、特定のプログラムにおいて同名の関数が存在した場合等に影響を与える可能性があります。

ステップ1:任意の js ファイルにユーザ定義関数を格納する

この例では、プロジェクトの src/main/jssp/src/sample/prog_guide/common_libs という階層でフォルダを作成し、作成したフォルダ配下に「 global_fnction.js 」ファイルを作成し、 以下のように実装をします。
sample\prog_guide\common_libs\global_function.js
//global_fnction2 という名前で共通関数を登録する 
Procedure.define("global_fnction2", global_fnction2); 
 
/** 
 * 共通関数作成
 */ 
function global_fnction2( valueA, valueB ) {
    //ここに処理を書きます
    return valueA + valueB; 
}

ステップ2:起動時にメモリ上に格納される設定を行う

ユーザ定義関数を格納した js ファイルについて、intra-mart起動後にメモリ上に格納されるよう js ファイルを取り込む記述をします。
intra-mart起動時に読み込まれる js ファイルは src/init.js ですが、initializer-XXX.xml設定ファイルに設定を書くことで任意の js ファイルを読み込むことができます。
  • src/init.js に記載する場合は以下のようになります。

    //共通関数格納ファイルの取り込み 
    include("sample/prog_guide/common_libs/global_fnction"); 
    
    /**
     * Initialize function for user-application.
     * @param nothing
     * @return void
     */
    function init(){
    	return;
    }
    
    
    /* END OF FILE */
    
  • initializer-XXX.xml設定ファイルを使う場合は以下のようになります。

    • initializer と js ファイルを作成
      initializer-sample.xml と init.js を作成します。
      この例では、プロジェクトの src/main/jssp/src/sample/prog_guide/common_libs という階層でフォルダを作成し、作成したフォルダ配下に「 init.js 」ファイルを作成します。
      sample\prog_guide\common_libs\global_function.js
    • initializerに起動時に呼ばれるファイルを編集
      記述方法は、<initializer><script-name>起動時に読み込まれる js ファイルのパス</script-name></initializer>です。
      <?xml version="1.0" encoding="UTF-8"?>
      <initializer-config
          xmlns="http://intra-mart.co.jp/system/secure/product/initializer/config/initializer-config"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="http://intra-mart.co.jp/system/secure/product/initializer/config/initializer-config ../../../schema/initializer-config.xsd ">
      
          <initializer>
              <script-name>sample/prog_guide/common_libs/init</script-name>
          </initializer>
      
      </initializer-config>
      
    • 上記で設定したファイルに、ファイル読み込み処理を追加
      include関数は 第一引数で指定された js ファイル内の init() 関数を実行し、その結果を返却します。
      第一引数は実行対象 js ファイルパスを拡張子なしで指定します。
      //共通関数格納ファイルの取り込み 
      include("sample/prog_guide/common_libs/global_fnction"); 
      function init(){
      }
      

注意

initializer は起動中に処理が走るため全てのAPIが利用可能な状態ではありません。
例)DBに接続に行うなど
Procedure#defineなど起動時に必要な処理を定義してください。

ステップ3:モジュールのデプロイ

エクスポートしたユーザモジュールを含んだwarファイルを作成します。
そのwarファイルをデプロイして intra-mart Accel Platform を再起動します。
ステップ2にて init.jsでファイルを取り込む記述をした場合は、intra-mart Accel Platform の再起動のみで問題ありません。

注意

initializer は warファイルに含まれるモジュール構成を元に読み込まれるので、一旦ユーザモジュールにしてwarファイルに組み込んだ形でないと動作しません。
ユーザモジュールに関しては、『 intra-mart e Builder for Accel Platform アプリケーション開発ガイド / immファイルのエクスポート 』を参照してください。

ステップ4:登録したグローバル関数の呼び出し

Procedure.define(“関数名”,function) で登録した関数は Procedure.関数名() で呼び出すことができます。
function init(request){
	Debug.browse(Procedure.global_fnction2(5,3));
}