Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プロトコル TP1/NET/TCP/IP編


RECEIVE − メッセージの受信(データ操作言語)

〈このページの構成〉

形式

DATA DIVISION(通信記述項)の指定

CD  通信記述名
    FOR  {INPUT|I-O}
   〔STATUS  KEY  IS  データ名1〕
   〔SYMBOLIC  TERMINAL  IS  データ名2〕
   〔MESSAGE  DATE  IS  データ名3〕
   〔MESSAGE  TIME  IS  データ名4〕
   〔SYNCHRONOUS  MODE  IS {SYNC|ASYNC|データ名6}〕
   〔WAITING  TIME  IS  データ名11〕.

DATA DIVISION(データ記述項)の指定

01  一意名1.
    02  データ名A   PIC 9(4)  COMP.
    02  データ名B   PIC X(2).
    02  データ名C   PIC X(n).

PROCEDURE DIVISION(通信文)の指定

RECEIVE  通信記述名
   〔FIRST〕 SEGMENT
       INTO  一意名1.

機能

次に示すCALLインタフェースの機能を実現します。ただし,受信できるメッセージの一つのセグメントの最大長は,32,763バイトです。

受信するセグメント長は,システム定義,共用メモリ,およびOpenTP1ファイルに影響があります。詳細は「4. COBOL-UAP作成用プログラムインタフェース」の「COBOL-UAP作成用プログラムインタフェース使用時の注意事項」を参照してください。

セグメントを受信する領域(一意名1で示す領域)の形式を次に示します。

[図データ]

UAPで値を設定する項目

●FOR句

次のどちらかの値を設定します。

INPUT

一方送信メッセージの受信

I-O

問い合わせメッセージまたは同期型メッセージの受信

●SYMBOLIC TERMINAL句

非同期型のメッセージ(中間セグメントまたは最終セグメント)の受信,または,同期型のメッセージの受信の場合,論理端末名称を設定したデータ項目を設定します。データ名2にメッセージ入力元の論理端末名称を設定します。論理端末名称は最大8バイトの長さです。8バイトに満たない名称を設定する場合は,後ろを空白で埋めてください。

非同期型のメッセージ(中間セグメントまたは最終セグメント)の受信の場合,先頭セグメントの受信時に返された論理端末名称を設定してください。

非同期型のメッセージ(先頭セグメント)の受信処理終了後,SYMBOLIC TERMINAL句にはOpenTP1から値が返されます。

●SYNCHRONOUS MODE句

非同期型でメッセージを受信するか,同期型でメッセージを受信するかを設定します。

SYNC

同期型のメッセージの受信

ASYNC

非同期型のメッセージの受信

データ名6

次の値を設定したデータ項目

'0'または'△':非同期型のメッセージの受信

'1':同期型のメッセージの受信

省略した場合は,ASYNC(非同期型のメッセージの受信)が設定されます。

●WAITING TIME句

RECEIVE文を実行してから終了するまでの,最大時間を設定したデータ項目を設定します。同期型のメッセージの受信の場合に設定します。

データ名11

監視時間をHHMMSS00(HH:時 MM:分 SS:秒 00は固定)の形式で設定したデータ項目を設定します。

省略した場合,またはデータ名11に'00000000'を設定した場合は,MCFマネジャ定義のUAP共通定義で設定した同期型受信監視時間(mcfmuap -t recvtim)が設定されます。

注意事項

監視時間の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間の間隔でタイムアウトが発生したかどうかを監視しています。このため,設定した監視時間と実際にタイムアウトを検出する時間には秒単位の誤差が生じます。そのため,タイミングによっては,設定した監視時間よりも短い時間でタイムアウトすることがあります。監視時間が小さくなるほど,誤差の影響を受けやすくなりますので,監視時間は3秒以上の値の設定を推奨します。

●データ名B

MCFで使用する領域です。

●FIRST

先頭セグメントを受信する場合に設定します。

OpenTP1から値が返される項目

●STATUS KEY句

ステータスコードを受け取りたい場合に設定します。省略した場合は,ステータスコードを受け取れません。データ名1にステータスコードが返されます。

●SYMBOLIC TERMINAL句

非同期型のメッセージ(先頭セグメント)の受信の場合,入力元の論理端末名称を受け取りたいときに設定します。省略した場合は,論理端末名称を受け取れません。データ名2にメッセージ入力元の論理端末名称が返されます。論理端末名称は最大8バイトの長さです。8バイトに満たない場合,論理端末名称の後ろが空白で埋められます。

中間セグメントまたは最終セグメントを受信する場合は,ここで返された論理端末名称をSYMBOLIC TERMINAL句に設定します。

●MESSAGE DATE句

メッセージを受信した日付を受け取りたい場合に設定します。省略した場合は,メッセージを受信した日付を受け取れません。データ名3にメッセージを受信した日付がYYMMDD(YY:西暦下2けた MM:月 DD:日)の形式で返されます。

●MESSAGE TIME句

メッセージを受信した時刻を受け取りたい場合に設定します。省略した場合は,メッセージを受信した時刻を受け取れません。データ名4にメッセージを受信した時刻がHHMMSS00(HH:時 MM:分 SS:秒 00は固定)の形式で返されます。

●データ名A

受信したセグメントの長さ+4が返されます。

●データ名C

受信したセグメントの内容が返されます。一つのセグメントで32,763バイトまで受信できます。

ステータスコード

ステータスコード

意味

00000

正常に終了しました。

71000

先頭セグメントを受信するRECEIVE文を2回以上実行しています。中間セグメントまたは最終セグメントを受信する場合は,FIRSTを設定しないでRECEIVE文を実行してください。

71001

メッセージの最終セグメントを受信したあとで,次のセグメントを受信するRECEIVE文を実行しています。直前に実行したRECEIVE文でメッセージはすべて受信しました。

このステータスコードが返されたあとに,再びRECEIVE文を実行した場合は,ステータスコード72000が返されます。

71002

メッセージキューからの入力処理中に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

MCFが終了処理中のため,メッセージの受信を受け付けられません。

71108

メッセージ受信に必要な管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

72000

<MHPの実行でリターンした場合>

  • 先頭セグメントを受信するRECEIVE文を実行する前に,中間セグメントまたは最終セグメントを受信するRECEIVE文を実行しています。先頭セグメントを受信する場合は,FIRSTを設定してRECEIVE文を実行してください。

  • ステータスコード71001が返されたあとで,RECEIVE文を実行しています。

<SPPの実行でリターンした場合>

SPPではRECEIVE文を実行できません。

72001

SYMBOLIC TERMINAL句に設定した論理端末名称が間違っています。

SYMBOLIC TERMINAL句に設定した入力元の論理端末名称は,MCFで定義していません。

RECEIVE文を実行できない論理端末を設定しています。

<問い合わせ応答形態および継続問い合わせ応答形態のメッセージ送受信機能を使用している(コネクション定義(mcftalccn -l)のreplymsgオペランドにyesを指定)場合>

問い合わせ応答中または継続問い合わせ応答中のため受け付けられません。

72012

MCFバッファグループ定義のバッファ長が不足しました。

MCF通信プロセスは相手システムからメッセージを受信しましたが,UAPへの応答連絡でRPC通信の送信可能な上限値を超えました。

72013

データ名Cのサイズを超えるセグメントを受信しました。データ名Cのサイズを超えた部分は切り捨てられました。

32,763バイトを超えるセグメントを受信しました。32,763バイトを超えた部分は切り捨てられました。

72016

WAITING TIME句に設定した値が間違っています。

72020

SYNCHRONOUS MODE句に設定した値が間違っています。

72024

FOR句に設定した値が間違っています。

72036

データ名Cのサイズが不足しています。5バイト以上の領域を確保してください。

73001

データ名11に60秒を加算した時間が経過しましたが,MCF通信プロセスからの応答がありません。

前回の通信から無通信監視時間(コネクション定義(mcftalccn -k)のnotrftimeオペランド指定値)が経過しましたが,相手システムからの通信がありません。

相手システムからメッセージを受信しましたが,受信バッファを確保できませんでした。

入力元の論理端末でMCF通信プロセスの内部障害が発生しました。

73002

<同期型メッセージの受信を行う(FOR句にI-Oを設定,かつ,SYNCHRONOUS MODE句にSYNCを設定または1を設定したデータ名6を設定)場合>

コネクション再確立時の未送信メッセージの送信抑止機能を使用している(論理端末定義(mcftalcle -d)のreplacemsgオペランドにdiscardを指定)場合に,MHPでメッセージ受信後にコネクションが再確立されたため,受信を取り消しました。

73005

データ名11に設定した時間が経過しましたが,論理端末からの応答がありません。

73010

入力メッセージ編集UOCで障害が発生しました。

メッセージの読み込み時に障害が発生しました。

73015

設定した論理端末は,ほかのUAPで仕掛り中です。

73018

データ名11に設定した監視時間が間違っています。

73020

入力元の論理端末は停止しています。

上記以外

プログラムの破壊などによる,予期しないエラーが発生しました。