Page History
...
[ |../../index.htm#lansa/dsnbi_0035.htm]
現在地:
| Anchor | ||||
|---|---|---|---|---|
|
| Anchor | ||||
|---|---|---|---|---|
|
このセクションでは、組み込み関数を 1 つのプログラムとして作成する際の手順を説明します。以下に示す例は非常に簡素なものですが、組み込み関数が LANSA システムに組み込まれる様子が理解できると思います。
シナリオ:これはユーザー定義の組み込み関数です。この組み込み関数を使って、システム値を取得します。
簡素な CL プログラムです。このプログラムは、システム値の名前を渡し、システム値が返されます。
名前は UD_GET_SYSTEM_VALUE です。
このサイトで次に利用可能な識別子は 411 です。
(DC@F47 による) BIF 定義
...
以下のようにデータを組み込み関数定義ファイルに入力します:
/ プログラム : 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 /==================================================================*/
[ |../../index.htm#lansa/dsnbi_0035.htm]