スクリプトとは

設計者 管理者

スクリプトとは、一連のフォームによる計算処理を自動実行するツールです。スクリプトは簡易言語で記述し、ごく少数の構文によって、複数のフォームでの処理を連続実行、さらにはメンバリストで指定される複数メンバを対象に繰り返し実行することができます。また、フォームを照会するときと同様に、スクリプト実行時にパラメータを指定し、それを、各フォームの実行に適用することもできます。

スクリプトには、アプリケーション内で一意なラベルと、任意の名称を付す必要があります。

スクリプトを用いて元帳データにアクセスする際には、元帳アクセスコントロールが適用されます。

スクリプト言語

スクリプト言語は、スクリプトの記述に用いる簡易言語です。以下のような機能を備えています。

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

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

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

スクリプトの記述例

スクリプトの記述例を示します。各行の // 以降はコメントです。

  //
  // パラメータの宣言
  //

  // 会計年度ディメンションの #ALL メンバリストからパラメータを選択
  parameter #FY:#ALL

  // 相対期間ディメンションの #POV_BOTTOMS メンバリストからパラメータを選択。但し、「年/Y」を視点メンバとする
  parameter #PERIOD:#POV_BOTTOMS[Y]

  // カスタムディメンション「ビジネスユニット(BU)」の #ALL メンバリストからパラメータを選択
  parameter BU:#ALL

  //
  // 処理の記述
  //
  //【処理内容】
  // 指定された会計年度・月の実績データを見通しシナリオにコピーする。
  // ただし、指定されたビジネスユニット配下のビジネスユニットのみを対象とする。
  //

  // for…end 間の処理を、パラメータで与えられたビジネスユニットの最下位子孫(BU:#POV_BOTTOMS[@pov])について繰り返す。
  for ( BU:#POV_BOTTOMS[@pov] )
      // フォーム「COPY_A_TO_F_BU / 実績⇒見通しコピー(ビジネスユニット別データ)」の処理を実行。
      // フォーム実行時パラメタを指定していないので、この場での「現在のメンバ(@CUR)」が適用される。すなわち:
      // ビジネスユニットについては、FOR で繰り返される対象の各メンバ、
      // 会計年度、相対期間については、スクリプトのパラメタとして与えられたメンバ、が渡される。
      forms!COPY_A_TO_F_BU.calculate
  end

  // 最後にフォーム「COPY_A_TO_F_COMMON / 実績⇒見通しコピー(共通データ)」の処理を実行。
  // フォーム実行時パラメタとして、 スクリプトのパラメタとして与えられた会計年度、相対期間、ビジネスユニットが適用される。
  forms!COPY_A_TO_F_COMMON.calculate

スクリプト言語の構文

基本的な構文

大文字・小文字

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

コメント

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

ラベル

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

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

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

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

  for ( #PERIOD:#POV_CHILDREN[@pov] )

      // ...

  end

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

制御構造

parameter

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

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

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

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

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

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

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

forms

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

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

  // または

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

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

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

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

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

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