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〕.
PROCEDURE DIVISION(通信文)の指定
RECEIVE 通信記述名 〔FIRST〕 SEGMENT INTO 一意名1.
機能
次に示すCALLインタフェースの機能を実現します。
-
一方送信メッセージの受信 CBLDCMCF('RECEIVE△')
-
同期型メッセージの受信 CBLDCMCF('RECVSYNC')
セグメントを受信する領域(一意名1で示す領域)の形式を次に示します。
UAPで値を設定する項目
●FOR 句
次のどちらかの値を設定します。
- INPUT
-
一方送信メッセージの受信
- I-O
-
同期型メッセージの受信
●SYMBOLIC TERMINAL 句
非同期型メッセージ(中間セグメントまたは最終セグメント)の受信,または,同期型メッセージの受信の場合,データ名2に入力元の論理端末名称を設定します。先頭セグメントの受信時に返された論理端末名称を設定してください。論理端末名称は最大8バイトの長さです。8バイトに満たない場合,論理端末名称の後ろを空白で埋めてください。
非同期型メッセージ(先頭セグメント)の受信処理終了後,SYMBOLIC TERMINAL句にはOpenTP1から値が返されます。
●SYNCHRONOUS MODE 句
非同期型でメッセージを受信するか,同期型でメッセージを受信するかを設定します。
- SYNC
-
同期型メッセージの受信
同期型メッセージの受信のとき設定します。
- ASYNC
-
非同期型メッセージの受信
一方送信メッセージの受信のとき設定します。
- データ名6
-
次の値を設定したデータ項目
'1':同期型メッセージの受信
'0'または'△':非同期型メッセージの受信
省略した場合は,ASYNC(非同期型メッセージの受信)が設定されます。
●WAITING TIME句
RECEIVE文を実行してから終了するまでの,最大時間を設定したデータ項目を設定します。同期型メッセージを受信する場合に設定します。
- データ名11
-
監視時間をHHMMSS00(HH:時 MM:分 SS:秒 00は固定)の形式で設定したデータ項目を設定します。指定できる値の範囲は10秒〜10分で,10秒単位です。
省略した場合は,2分を設定します。
- 注意事項
-
監視時間の精度は秒単位です。また,タイマ定義(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
受信したセグメントの内容が返されます。
ステータスコード
ステータスコード |
意味 |
---|---|
00000 |
正常に終了しました。 |
71000 |
先頭セグメントを受信するRECEIVE文を2回以上実行しています。中間セグメントまたは最終セグメントを受信する場合は,FIRSTを設定しないでRECEIVE文を実行してください。 |
71001 |
メッセージの最終セグメントを受信したあとで,次のセグメントを受信するRECEIVE文を実行しています。直前に実行したRECEIVE文でメッセージはすべて受信しました。 このステータスコードが返されたあとに,再びRECEIVE文を実行した場合は,ステータスコード72000が返されます。 |
71002 |
メッセージキューからの入力処理中に障害が発生しました。 |
メッセージキューが閉塞されています。 |
|
メッセージキューが割り当てられていません。 |
|
MCFが終了処理中のため,メッセージの受信を受け付けられません。 |
|
71108 |
メッセージ受信に必要な管理テーブルが確保できませんでした。 |
プロセスのローカルメモリが不足しています。 |
|
72000 |
<MHPの実行でリターンした場合>
|
<SPPの実行でリターンした場合> SPPでは非同期型メッセージを受信するRECEIVE文を実行できません。 |
|
72001 |
SYMBOLIC TERMINAL 句に設定した論理端末名称が間違っています。 |
SYMBOLIC TERMINAL句に設定した論理端末名称は,定義されていません。 |
|
RECEIVE文を実行できない論理端末を設定しています。 |
|
72013 |
一意名1のサイズを超えるセグメントを受信しました。 一意名1のサイズを超える部分は切り捨てられました。 |
72016 |
WAITING 句に設定した値が間違っています。 |
72020 |
SYNCHRONOUS MODE句に設定した値が間違っています。 |
72024 |
FOR 句に設定した値が間違っています。 |
72036 |
データ名Cのサイズが不足しています。5バイト以上の領域を確保してください。 |
73001 |
データ名11に60秒を加算した時間が経過しましたが,MCF通信プロセスからの応答がありません。 |
入力元の論理端末でMCF通信プロセスの内部障害が発生しました。 |
|
73005 |
データ名11に設定した時間が経過しましたが,論理端末からの応答がありません。 |
73010 |
入力または出力メッセージの編集UOCで障害が発生しました。 |
メッセージの読み込み時に障害が発生しました。 |
|
73018 |
データ名11に設定した監視時間が間違っています。 |
73020 |
RECEIVE文で設定した論理端末は停止中です。 |
77350 |
サービスプリミティブの発行順が間違っています。 |
サービスプリミティブの連結数が超過しています。 |
|
77433 |
相手からのメッセージによって,ダイアログが未確立になりました。 |
77436 |
相手からのメッセージによって,ダイアログを解放中です。 |
77437 |
相手からのメッセージによって,ハンドシェイクが応答待ちになりました。 |
77491 |
相手からのメッセージによって,エラー処理中です。 |
上記以外 |
プログラムの破壊などによる,予期しないエラーが発生しました。 |