forms!'parameter'.calculate
スクリプト言語
スクリプト言語は、スクリプトの記述に用いる簡易言語です。
スクリプト言語の機能
スクリプト言語は以下のような機能を備えています。
- フォームによる計算処理の連続実行
-
フォームによる計算処理を連続実行することができます。複数のフォームを連続実行することもできますし、ひとつのフォームについて異なるパラメータを指定して連続実行することともできます。
- フォームによる計算処理の繰返実行
-
メンバリストに含まれるメンバをパラメータとして、 フォームによる計算処理を繰り返し実行することができます。
- パラメータ値の受け入れ
-
スクリプト全体に対するパラメータ値を受け入れることができます。パラメータ値を受け入れる対象のディメンション、受け入れ可能なメンバ範囲をメンバリストにて指定可能です。
スクリプト言語の構文
基本的な構文
メンバとメンバ変数
メンバを必要とする文に対しては、メンバ変数への参照(視点メンバ @pov
および 現在のメンバ @cur
)または任意のラベルを使用できます。例えば、メンバ変数への参照を指定する場合は以下のようになります。
forms!EXAMPLE_FORM.calculate(#FY!@cur)
for (#PERIOD:#POV_CHILDREN[@pov])
// ...
end
メンバ変数 @pov
および @cur
は、実行時に決定されるメンバへの参照です。 @pov
は parameter
文によって宣言され、スクリプト実行時に指定されたメンバを保持します。 @cur
は for
ループによって作られるメンバリストの現在のメンバを保持します(ループにより上書きされない場合、@cur
は @pov
と同じメンバを保持します)。
パラメータ宣言
parameter
文は指定されたメンバリストのメンバをスクリプト実行時に指定できるようにします。対象となるメンバリストが視点メンバを取らない場合の構文は次のようになります。
parameter ディメンションラベル : メンバリストラベル
メンバリストが視点メンバを取る場合の構文は次のとおりです。
parameter ディメンションラベル : メンバリストラベル[メンバラベル]
parameter
文で指定されたメンバは、以降、@pov
で参照することができます。
|
フォーム
forms
文は指定されたフォームの処理を実行します。フォームがパラメータを取らない場合の構文は次のようになります。
forms!フォームラベル.メソッド
// または
forms!フォームラベル.メソッド()
フォームのパラメータに適用するメンバを指定する際の構文は次のとおりです。
forms!フォームラベル.メソッド(ディメンションラベル!メンバ, ディメンションラベル!メンバ, ...)
ディメンションメンバラベルに代えて @pov
又は @cur
を指定することで、それぞれ、視点メンバ、現在のメンバを適用することができます。
また、フォームのパラメータに適用するメンバの指定は省略することができます。省略した場合、そのフォームが必要とするパラメータについて、該当ディメンションに関する現在のメンバ(@cur
)が適用されます。
パイプライン
(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
が実行されます。