例 - 組み込み関数を 3GL プログラムとして定義

このセクションでは、組み込み関数を 1 つのプログラムとして作成する際の手順を説明します。以下に示す例は非常に簡素なものですが、組み込み関数が LANSA システムに組み込まれる様子が理解できると思います。
シナリオ:これはユーザー定義の組み込み関数です。この組み込み関数を使って、システム値を取得します。
簡素な CL プログラムです。このプログラムは、システム値の名前を渡し、システム値が返されます。
名前は UD_GET_SYSTEM_VALUE です。
このサイトで次に利用可能な識別子は 411 です。
(DC@F47 による) BIF 定義

BIF名:

UD_GET_SYSTEM_VALUE

一意の識別子:

411

説明:

システム値の取得

呼び出しまたは実行:

C     (C<呼び出し> または E<実行>)

プログラム名:

UD@P411

呼び出し間での終了:

N      (Y <はい> または N <いいえ>)

引数の数:

1

戻り値の数:

1

 
(DC@F48 による) BIFの引数

BIF名:

UD_GET_SYSTEM_VALUE

パラメータ・タイプ

ARG

パラメータシーケンス:

1

パラメータ番号:

1

パラメータ識別子:

A

説明:

システム変数の名前

必須/任意:

R    (R <必須> または O <任意>)

パラメータタイプ:

A    (A、N、または L)

最小長:

1

最大長:

10

小数点以下最小桁数:

 

小数点以下最大桁数:

 

引き渡し長:

10

引き渡す小数点以下桁数:

 

デフォルト:

 

 
(DC@F48 による) BIF の戻り値

BIF名:

UD_GET_SYSTEM_VALUE

パラメータ・タイプ

RET

パラメータシーケンス:

1

パラメータ番号:

2

パラメータ識別子:

B

説明:

システム変数の値

必須/任意:

R    (R <必須> または O <任意>)

パラメータタイプ:

A    (A、N、または L)

最小長:

1

最大長:

256

小数点以下最小桁数:

 

小数点以下最大桁数:

 

引き渡し長:

256

引き渡す小数点以下桁数:

 

 
以下のようにデータを組み込み関数定義ファイルに入力します:
/ プログラム      : UD@P411                                          / / ------                                                         / / 組み込み関数名 : システム値の取得                               / / ----------                                                    / / 作成日 : 03/10/91                                         / / ----------                                                    / / 作成者       : Johnny Programmer                                / / ----                                                          / /* 記述 : システム値を返すプログラム               / / ---------                                                     / /                                                                 / /=================================================================/ / パラメータ リスト仕様                                   / /=================================================================/ /                                                                 / /  入力パラメータ リスト                                             / /  ------------------                                           / /                                                                 / /  固定パラメータ (すべての組み込み関数)                      / /  ---------------------------------------                      / /                                                                 / /      DC@IDS : 標準の情報データ構造                                                  / /      DC@EDS : 標準の交換データ構造                                                  / /      PR@IDS : 標準のプロセス情報データ構造                                         / /                                                                 / /  変数の引数と戻り値 (DC@F48 定義より)  / /  ------------------------------------------------------------  / /                                                                 / /      B$411A : 組み込み関数の引数記述子 数値 A   / /      B@411A : 取得するシステム値                               / /      B$411B : 組み込み関数の戻り値記述子番号     / /      B@411B : システム値の値                             / /=================================================================/  UD@P411: PGM PARM(&DC@IDS &DC@EDS &PR@IDS &B$411A &B@411A &B$411B +                    &B@411B) /=================================================================/ /  変数の宣言                                          / /=================================================================/       DCL &DC@IDS *CHAR  1024       DCL &DC@EDS *CHAR  1024       DCL &PR@IDS *CHAR  1024       DCL &B$411A *CHAR     4       DCL &B@411A *CHAR    10       DCL &B$411B *CHAR     4       DCL &B@411B *CHAR   256       DCL &$PGMNM *CHAR    10       DCL &PR@PGM *CHAR    10       DCL &PRN *CHAR     3       DCL &PRA *CHAR     1       DCL &DC@RET *CHAR     1       DCL &DC@MID *CHAR     7       DCL &DC@MVR *CHAR   132 /=================================================================/ /  グローバル エラー ハンドラー                                           / /=================================================================/        MONMSG MSGID(CPF0000 MCH0000) EXEC(GOTO ARGERR) /=================================================================/ /  プログラム メイン行                                               / /=================================================================/ / フィールドの設定とデータ構造から一部をマッピング ....   /             CHGVAR     &$PGMNM   'UD@P411'             CHGVAR     &PR@PGM   %SST(&PR@IDS 424 10)             CHGVAR     &PRN   %SST(&PR@IDS 157  3)             CHGVAR     &PRA   %SST(&PR@IDS 160  1) / 当初の結果は "正常に" 戻されることが前提 ....   /             CHGVAR     &DC@RET 'Y' / 必須の評価/アクションの実行.......                / / システム値の取得                                       /        RTVSYSVAL SYSVAL(&B@411A) RTNVAR(&B@411B)         MONMSG  (CPF0000 MCH0000)   / プログラム処理ロジックの終わり                               / ENDPGM:      CHGVAR %SST(&DC@EDS 38   1) &DC@RET              CHGVAR %SST(&DC@EDS 39   7) &DC@MID              CHGVAR %SST(&DC@EDS 46 132) &DC@MVR              RETURN /==================================================================/ / ARGERR :プログラムに引き渡された引数のエラー処理。                        / /        呼び出し元は、このロジックの実行前にエラーの原因を反映              / /        させるため DC@MID と DC@MVR を設定します。                          / /        このロジックが起動されると、プログラム全体が終了されます。             / /        これで、RDML プログラムの呼び出しはエラーとなり、                        / /        DC@MID/DC@MVR 内のエラー詳細を示すメッセージが表示されます   / /==================================================================/ ARGERR: / 呼び出し元に返す追加メッセージをすべて転送                                   /              CALL       PGM(DC@P9007) PARM(&$PGMNM &PR@PGM)              MONMSG     (CPF0000 MCH0000) / "不正な" 戻りコードを設定 ....                                  /              CHGVAR &DC@RET 'N'              MONMSG     (CPF0000 MCH0000) / 呼び出し元のプログラムに制御を戻す ....                       /              GOTO ENDPGM /==================================================================/              ENDPGM /==================================================================*/