11.1.3 関数リターン値の設定
OpenTP1が提供する関数のリターン値として任意の値を返す場合,あらかじめ関数リターン値ファイルを作成して,リターン値を設定します。
また,XATMI関数のtpsend関数とtprecv関数のイベントタイプや,マルチノード機能で使用する関数に渡す出力データ(ノード識別子,サーバ名)も設定できます。
定義方法や記述形式は,オフラインテスタ環境定義と同じです。
(1) 形式
(a) リターン値を設定する場合
{関数名|プログラム名(要求コード)} = リターン値 {,|;}
(b) イベントタイプを設定する場合
{tpsend|tprecv} = TPEEVENT, {tpsend(event)|tprecv(event)} = イベントタイプ {,|;}
(c) 出力データを設定する場合
{マルチノード機能で使用する関数名(node_id)|マルチノード機能で使用する関数名(sv_name)} = {ノード識別子|サーバ名}{,|;}
(2) 機能
OpenTP1提供関数のリターン値として返す,任意の値を定義します。
また,XATMI関数のtpsend関数とtprecv関数のイベントタイプや,TP1/Multiの関数に渡す出力データ(ノード識別子,サーバ名)の値を定義します。
(3) オペランド
(a) リターン値を設定する場合
-
関数名 | プログラム名(要求コード)
リターン値を返す関数名,またはプログラム名(要求コード)を指定します。
- 関数名
-
C言語の関数に対するリターン値を設定します。
- プログラム名(要求コード)
-
COBOL言語のプログラムに対するリターン値を設定します。( )の中には要求コードを設定します。
-
リターン値 〜〈1〜39文字の英数字〉
関数,またはプログラムによって返されるリターン値(COBOL言語ではリターンコード)を設定します。リターン値は,定数名を大文字で設定します。TX関数でCOBOL言語のリターンコードを設定する場合は,定数名でも設定します。
また,リターン値は,定数名を使わないで数値(10進数)でも設定できます。数値で指定する場合に指定できる範囲を,次に示します。
インタフェース
指定できる数値の範囲
C言語インタフェース
-99999〜99999
COBOL言語インタフェース
0〜99999※
- 注
-
範囲外の場合は,文字列と見なします。
- 注※
-
TX関数については,-99999〜99999の範囲で指定できます。
なお,定義されていない定数名が指定された場合や,数値が誤って指定された場合(数字以外の指定など)は,関数が正常にリターンしたと見なします。
(b) イベントタイプを設定する場合
-
{tpsend | tprecv}=TPEEVENT
イベントタイプを設定することを示します。
-
tpsend(event) | tprecv(event)
イベントタイプを設定する関数を指定します。
tpsend(event):tpsend関数にイベントタイプを設定します。
tprecv(event):tprecv関数にイベントタイプを設定します。
-
イベントタイプ
tpsend関数またはtprecv関数に設定する,イベントタイプを設定します。
イベントタイプの設定を省略した場合は,TPEV_SVCERRを仮定します。
(c) 出力データを設定する場合
-
マルチノード機能で使用する関数名(node_id) | マルチノード機能で使用する関数名(sv_name)
出力データを設定する関数名と,出力データの種別を設定します。
node_id:出力データとしてノード識別子を設定します。
sv_name:出力データとしてサーバ名を設定します。
設定できる関数名と,それに対応する出力データの種別を,次に示します。
関数名
出力データの種別
dc_adm_get_nd_status_next関数
node_id
dc_adm_get_sv_status_next関数
sv_name
dc_adm_get_nodeconf_next関数
node_id
dc_adm_get_node_id関数
node_id
-
ノード識別子 | サーバ名
設定するノード識別子,またはサーバ名を設定します。
関数リターン値ファイル内のノード識別子とサーバ名の設定順序は,UAPで発行するマルチノード機能の関数の発行順序と対応します。
設定を省略した場合や設定に誤りがあった場合,その行は無視されます。したがって,ノード識別子やサーバ名はないものとして処理され,その個数はカウントされません。
関数リターン値ファイルに設定したノード識別子やサーバ名の個数より,UAPで発行した対応する関数の個数が多い場合,余分の関数のリターン値としてDCADMER_NO_MORE_ENTRYが返されます。ただし,dc_adm_get_node_id関数は除きます。
(4) 定義例
(a) C言語の場合
dc_jnl_ujput = 0, dc_dam_open = DCDAMER_PROTO, #dc_trn_begin = DC_OK, dc_dam_read = -1600, tpsend = TPEEVENT, tpsend(event) = TPEV_DISCONIMM, dc_adm_get_nd_status_next(node_id) = ND01 : : dc_logprint = DC_OK;
(b) COBOL言語の場合
CBLDCJNL(UJPUT) = 0, #CBLDCTRN(BEGIN) = 905, CBLDCDAM(READ) = 1600, : : CBLDCLOG(PRINT) = 1905;
(5) 注意事項
-
定義解析では,関数とリターン値の正当性や,関係についてはチェックしません。
-
関数名(プログラム名)として,サポートしない関数,リターン値を返さない関数,およびオフライン環境でDAMファイルにアクセスする関数の名称を指定した場合,書式不正と見なされます。
-
重複して指定(同じ名称の関数の指定や,同じ機能の関数とプログラムの指定),できません。重複して指定した場合は,先に指定したりターン値が設定されたりします。
-
定義解析中に書式エラーを検出した場合は,エラーメッセージを出力して解析を続行します。書式エラーのあった定義内容の有効・無効の判断は,次のようになります。
書式エラーの内容
定義内容
有効時の仮定
文末に','または';'なし
有効
文末に','を仮定
その他
無効
−
- (凡例)
-
−:該当しません。
-
要求コードには,マニュアル「OpenTP1 プログラム作成リファレンス COBOL言語編」に記載されている要求コードを指定します。ただし,次に示す機能については,要求コードを次のように設定してください。
機能
要求コード
TAMテーブルのレコード削除
DELT
TAMレコードのレコード入力
READ
TAMレコードの更新/出力
WRIT
-
正常終了したときに状態コードを返すCOBOL言語プログラムのリターン値は,次のように設定してください。
- CBLDCADM(STATUS)
-
ユーザサーバの状態コードをリターン値として設定します。
- CBLDCTAM(GST)
-
次に示す値を設定します。
1:RO(オープン状態)を返す場合
2:RC(クローズ状態)を返す場合
3:HL(論理閉塞状態)を返す場合
4:HO(障害閉塞状態)を返す場合
- (例)CBLDCADM(STATUS)=1 と設定した場合,次を返します。
-
リターン値=0
ユーザサーバ状態コード=1
CBLDCTAM(GST)=3 と設定した場合,次を返します。
リターン値=0
TAMテーブル状態=HL(論理閉塞状態)