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