Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


TPSVCSTART

〈このページの構成〉

名称

サービスルーチンの開始

形式

01 TPSVCDEF-REC.
   COPY  TPSVCDEF.
01 TPTYPE-REC.
   COPY  TPTYPE.
01 DATA-REC.
   COPY  Data record definition.
01 TPSTATUS-REC.
   COPY  TPSTATUS.
 
CALL "TPSVCSTART" USING TPSVCDEF-REC TPTYPE-REC DATA-REC
                        TPSTATUS-REC.

機能

TPSVCSTARTは,サービスルーチンをコーディングするときに最初に呼ばれます。TPSVCSTARTを呼ぶ前に,サービスルーチン内でほかのXATMIの呼び出しをするとエラーになります。TPSVCSTARTは,サービスへのパラメタとデータを検索するために使います。このルーチンは,TPCALLまたはTPACALLルーチンからのサービス要求を受け取るために使われます。同様にTPCONNECT,TPSEND,TPRECVの要求を受け取るためにも使われます。

TPCALLまたはTPACALLを経由して実行されたサービス要求を処理するサービスルーチンは,多くても一つの入力されたメッセージ(TPSVCSTARTが正常リターンしたこと)を受信して,一つの応答(TPRETURNでサービスルーチンを出たこと)を送信します。

他方,会話型サービスは,オープンコネクションを参照する手段のほかに,多くても一つの入力メッセージを伴った,コネクション要求で呼び出されます。TPSVCSTARTが正常に終了すると,コネクション要求を出したプログラムも,会話型サービスも,アプリケーションで定義したデータを送信したり受信したりできるようになります。コネクションは半二重となっています。つまり,プログラムは,コネクションの制御権を通信相手が明示的に放棄するまで,会話を制御(つまり,データを送信する)できます。

トランザクションに関しては,トランザクションモードで起動した場合,サービスルーチンは,少なくとも一つのトランザクションに参加できます。サービスルーチンの作成者は,トランザクションは,サービスルーチンから戻ることで終了すると考えてください。サービスルーチンをトランザクションモードで起動しない場合,サービスルーチンは,必要なだけのトランザクションをTXBEGIN,TXCOMMIT,TXROLLBACKを使うことで開始します。

Note:TPRETURNは,トランザクションの完了には使われません。したがって,サービスルーチン内で起こったトランザクションを解決しないままにしてTPRETURNを呼ぶと,エラーになります。

DATA-RECには,読む応答がどこにあるかを,そしてLENにはDATA-RECに入れるバイトの最大値を設定します。TPSVCSTARTが正常リターンすると,LENにはDATA-RECに入った実際の長さが設定されます。REC-TYPEとSUB-TYPEにはそれぞれ,データのtypeとsubtypeが設定されます。DATA-RECの値よりも応答が大きい場合は,DATA-RECにはレコードに入るだけのバイトが格納されます。応答の残りの部分は捨てられて,TPSVCSTARTはTPTRUNCATEを返します。

TPSVCSTARTが正常に終了した場合に,LENが0であるときは,応答にはデータ部がなく,DATA-RECは変更されません。LENに0を設定した場合はエラーになります。

TPSVCSTARTが正常に終了した場合,SERVICE-NAMEには要求するプログラムを起動するために使ったサービス名が設定されます。

『データ領域』

『●TPSVCDEF-REC

サービスルーチンの呼び出され方を示す値が設定されます。設定される値と意味は,以降説明します。』

『●TPTYPE-REC

受信データのデータ型と,subtypeのレコード名が設定されます。』

『●DATA-REC

受信データが設定されます。』

『●TPSTATUS-REC

TPSVCSTARTの実行結果を示すリターン値が設定されます。』

TPSVCSTARTがリターンしたときに有効になるTPSVCDEF-RECの値を,次に示します。

TPREQRSP

サービスは,TPCALLまたはTPACALLで呼び出されました。この設定は,TPCONVとは互いに排他的です。

TPCONV

サービスは,TPCONNECTで呼び出されました。会話に使う通信ハンドルは,COMM-HANDLEとして有効です。この設定は,TPREQRSPとは互いに排他的です。

TPNOTRAN

サービスルーチンは,トランザクションモードではありません。この設定は,TPTRANとは互いに排他的です。

TPTRAN

サービスルーチンは,トランザクションモードです。この設定は,TPNOTRANとは互いに排他的です。

TPNOREPLY

呼び出し側は応答を期待しません。このオプションは,TPREQRSPが設定されている場合にだけ意味を持ちます。この設定は,TPREPLYとは互いに排他的です。

TPREPLY

呼び出し側は応答を期待します。このオプションは,TPREQRSPが設定されている場合にだけ意味を持ちます。この設定は,TPNOREPLYとは互いに排他的です。

TPSENDONLY

このサービスは,コネクションを渡ってデータを送信だけできるように起動されて,コネクションの他端点のプログラムは,データを受信だけできるようになります。この値は,TPCONVが設定されているときだけ有効です。この設定は,TPRECVONLYとは互いに排他的です。

TPRECVONLY

このサービスは,コネクションを渡ってデータを受信だけできるように起動されて,コネクションの他端点のプログラムは,データを送信だけできるようになります。この値は,TPCONVが設定されているときだけ有効です。この設定は,TPSENDONLYとは互いに排他的です。

リターン値

成功した場合,TPSVCSTARTはTP-STATUSにTPOKを設定します。受信したデータの長さが入力のLENに設定した長さを超えた場合は,TPTRUNCATEが設定され,LENで示す長さ分だけ,DATA-RECに格納されます。受信したデータの残りの部分は捨てられます。

エラー

次のような場合,TPSVCSTARTはエラーリターンして,次のうちどれか一つの値をTP-STATUSに設定します。

TPEINVAL

間違った引数が与えられました(例えば,LENに0を設定した)。

TPEPROTO

TPSVCSTARTが間違った状況で呼ばれました。

TPESYSTEM

コミュニケーションリソースマネジャシステムでエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。

TPEOS

オペレーティングシステムにエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。

関連項目

TPACALL,TPCALL,TPCONNECT,TPRETURN