12.4.2 3GL プログラム
次のプログラムは、簡単に *SYDNや*MELBなどの 2 つのシステム変数の値を返すように拡張できます。これは、どちらも型と長さが同じだからです。
C *ENTRY PLIST
C PARM SYSVAR 20
C PARM VALUE 7
C*
C SYSVAR IFEQ '*SYDN'
C MOVEL'SYD0386' VALUE
C ELSE
C MOVEL'MEB2307' VALUE
C END
C*
C RETRN
さらに、このプログラムを修正して、*SYDN、*MELB、*PERIOD、*COMPANYなど、型や長さが異なるシステム変数の値を返すようにすることも可能です。
IVALUE DS
I 1 7 OFFICE
I P 1 30PERIOD
I 1 2 COMPNY
C*
C *ENTRY PLIST
C PARM SYSVAR 20
C PARM VALUE
C*
C SYSVAR IFEQ '*SYDN'
C MOVEL'SYD0386' OFFICE
C ELSE
C SYSVAR IFEQ '*MELB'
C MOVEL'MEB2307' OFFICE
C ELSE
C SYSVAR IFEQ '*PERIOD'
C Z-ADD8701 PERIOD
C ELSE
C SYSVAR IFEQ '*COMPANY'
C MOVEL'05' COMPNY
C END
C END
C END
C END
C*
C RETRN
さらに、このプログラムは、*SYDN、*MELB、*PERIOD、*COMPANY などの異なるタイプと長さを持つシステム変数の値を返すように変更できます。
すべての例において、返り値はシステム変数評価プログラムに「ハードコーディング」された数値または英数字リテラルの動きから生成されます。ただし、このような処理は通常は行いません。返り値は、所定のデータ領域、あるいはデータベース・ファイルから取得するのが一般的です。ただし、上記の例をもとに、データ領域やデータベース・ファイルへのアクセス処理を追加するのは容易です。
スマート・システム変数
以下のように、LANSA により提供されるシステム変数評価プログラムもあります。
M@SYSDTA - 英数字データ領域の一部を取得します。
M@SYSNUM - データ領域から次の番号を取得します。
M@SYSDTA を使って、システムに事前に定義された英数字データ領域からデータを取得することができます。
M@SYSNUM を使って、データ領域に格納された値から次の番号を生成することができます。これは、アルファもしくは数値のいずれかで返します。
これらの提供されているプログラムは、定義されたネーミング規則に従っていれば、ユーザー定義のシステム変数に対して、システム変数評価プログラムとして使用することが可能です。Tこの命名規約は以下の通りです。
例 1
M@SYSDTA の場合、次の命名規約に従います。
*DTAssslllxxxxxxxxxx
説明
Sss | データ領域内の開始位置 |
lll | 検索する長さ(最大256文字) |
Xxxxxxxxxx | データ領域名 |
注意
- データ領域は、ライブラリ・リストに載っているものでなければなりません。
- データ領域名は、「*LDA」(ローカル・データ領域)、「*GDA」(グループ・ジョブ・データ領域)以外であるものとします。
- この評価プログラムでシステム変数を派生する方法はSTATICであるものとします。
使用例 (#1)
データ領域COMPDETLから企業名を検索します。企業名は32文字目以降の25文字分であるものとします。
ステップ1 - システム変数の定義
ステップ2 - LANSAファンクションで使用
例 2
M@SYSNUM の場合、次の命名規約に従います。
結果が英数字の場合 | *AUTOALPnnxxxxxxxxxx |
結果が数値の場合 | *AUTONUMnnxxxxxxxxxx |
nnは長さ、xxxxxxxxxxはデータ領域名を表します。
注意
- データ領域名は、「*LDA」(ローカル・データ領域)、「*GDA」(グループ・ジョブ・データ領域)以外であるものとします。
- データ領域が割り当てられない/見つからない場合、*DEC型で長さがnn(最大15)の、xxxxxxxxxxというデータ領域が作成され、値は0になります。
- システム変数名の「xxxxxxxxxx」の部分は、他と重複しないものでなければなりません。
- この評価プログラムでシステム変数を派生する方法は DYNAMIC であるものとします。
使用例 (#2)
順序番号のうち、まだ使われていないものを検索します。使用済みの番号はORDNOというデータ領域に保存されています。このデータ領域は5桁の整数値(小数部分なし)です。順序番号は、長さが5の英数字列の形で返されます。
ステップ1 - システム変数の定義
ステップ2 - LANSAファンクションで使用