スクリプト言語

設計者 管理者

スクリプト言語は、スクリプトの記述に用いる簡易言語です。

スクリプト言語の機能

スクリプト言語は以下のような機能を備えています。

フォームによる計算処理の連続実行

フォームによる計算処理を連続実行することができます。複数のフォームを連続実行することもできますし、ひとつのフォームについて異なるパラメータを指定して連続実行することともできます。

フォームによる計算処理の繰返実行

メンバリストに含まれるメンバをパラメータとして、 フォームによる計算処理を繰り返し実行することができます。

パラメータ値の受け入れ

スクリプト全体に対するパラメータ値を受け入れることができます。パラメータ値を受け入れる対象のディメンション、受け入れ可能なメンバ範囲をメンバリストにて指定可能です。

スクリプト言語の構文

基本的な構文

大文字・小文字

構文上、大文字・小文字は区別されません。

コメント

行の先頭あるいは文のあとに // と記述すると、以降はコメントとみなされます。

ラベル

ラベルの値に予約語を用いる場合は、以下のようにシングルクォートで囲む必要があります。

  forms!'parameter'.calculate
メンバとメンバ変数

メンバを必要とする文に対しては、メンバ変数への参照(視点メンバ @pov および 現在のメンバ @cur)または任意のラベルを使用できます。例えば、メンバ変数への参照を指定する場合は以下のようになります。

  forms!EXAMPLE_FORM.calculate(#FY!@cur)

  for (#PERIOD:#POV_CHILDREN[@pov])
      // ...
  end

メンバ変数 @pov および @cur は、実行時に決定されるメンバへの参照です。 @povparameter 文によって宣言され、スクリプト実行時に指定されたメンバを保持します。 @curfor ループによって作られるメンバリストの現在のメンバを保持します(ループにより上書きされない場合、@cur@pov と同じメンバを保持します)。

パラメータ宣言

parameter 文は指定されたメンバリストのメンバをスクリプト実行時に指定できるようにします。対象となるメンバリストが視点メンバを取らない場合の構文は次のようになります。

  parameter ディメンションラベル : メンバリストラベル

メンバリストが視点メンバを取る場合の構文は次のとおりです。

  parameter ディメンションラベル : メンバリストラベル[メンバラベル]

parameter 文で指定されたメンバは、以降、@pov で参照することができます。

  • parameter 文は必ず、他の文より前に記述します。

  • parameter 文は複数記述することができますが、それぞれ異なるディメンションを対象としなければなりません。

フォーム

forms 文は指定されたフォームの処理を実行します。フォームがパラメータを取らない場合の構文は次のようになります。

  forms!フォームラベル.メソッド

  // または

  forms!フォームラベル.メソッド()

フォームのパラメータに適用するメンバを指定する際の構文は次のとおりです。

  forms!フォームラベル.メソッド(ディメンションラベル!メンバ, ディメンションラベル!メンバ, ...)

ディメンションメンバラベルに代えて @pov 又は @cur を指定することで、それぞれ、視点メンバ、現在のメンバを適用することができます。

また、フォームのパラメータに適用するメンバの指定は省略することができます。省略した場合、そのフォームが必要とするパラメータについて、該当ディメンションに関する現在のメンバ(@cur)が適用されます。

メソッド
calculate
  forms!フォームラベル.calculate
  forms!フォームラベル.calculate()
  forms!フォームラベル.calculate(ディメンションラベル!メンバ, ディメンションラベル!メンバ, ...)

calculate メソッドは、フォームラベル で指定されたフォームの計算処理を実行し、その結果を元帳に書き込むためのメソッドです。

パイプライン

(fusion_place >= 11.0)

forms 文を -> で接続することで、-> の左側のフォームからデータをエクスポートし、右側のフォームにインポートします。フォームがパラメータを取らない場合の構文は次のようになります。

  forms!フォームラベル1 -> forms!フォームラベル2

calculate() メソッドと同様にフォームのパラメータに適用するメンバを指定することもできます。

  forms!フォームラベル1(ディメンションラベル!メンバ, ディメンションラベル!メンバ, ...) -> forms!フォームラベル2
  forms!フォームラベル1 -> forms!フォームラベル2(ディメンションラベル!メンバ, ディメンションラベル!メンバ, ...)
  forms!フォームラベル1(ディメンションラベル!メンバ, ディメンションラベル!メンバ, ...) -> forms!フォームラベル2(ディメンションラベル!メンバ, ディメンションラベル!メンバ, ...)

パイプライン中の任意のフォームについて、calculate() メソッドを実行することもできます。

  forms!フォームラベル1.calculate -> forms!フォームラベル2
  forms!フォームラベル1 -> forms!フォームラベル2.calculate
  forms!フォームラベル1.calculate -> forms!フォームラベル2.calculate

3 つ以上のフォームを連続で接続することもできます。

  forms!フォームラベル1 -> forms!フォームラベル2 -> forms!フォームラベル3 -> ...

制御構造

for

for ループは、メンバリストを反復処理するための構文です。対象となるメンバリストが視点メンバを取らない場合の構文は次のようになります。

  for (ディメンションラベル:メンバリストラベル)
      // ...
  end

メンバリストが視点メンバを取る場合の構文は次のとおりです。

  for (ディメンションラベル:メンバリストラベル[メンバ])
      // ...
  end

for ループによって作られるメンバリストの現在のメンバは、@cur で参照することができます。

  for (#FY:#ALL)
      forms!EXAMPLE_FORM.calculate(#FY!@cur)
  end

for ループの中で別の for ループを記述するネストした(入れ子の)ループ構造を作ることもできます。

  for (#FY:#ALL)
      for (#PERIOD:#POV_CHILDREN[@pov])
          // ...
          forms!EXAMPLE_FORM1.calculate
      end

      forms!EXAMPLE_FORM2.calculate
  end

上述の例で、EXAMPLE_FORM1 は、会計年度ごとかつ相対期間ごとに実行されます。また、会計年度ごとに、すべての相対期間について EXAMPLE_FORM1 の処理が終った後、EXAMPLE_FORM2 が実行されます。

予約語

予約語として指定された名前は、スクリプトの中でラベルとして使用することはできません。以下に予約語の一覧を示します。

  • parameter

  • forms

  • for

  • end

  • dimensions

  • ledgers

  • editions

  • true

  • false

  • if

  • then

  • elseif

  • else

  • endif

  • and

  • or

  • not