データ操作言語を使ったコーディング
COBOL言語でUAPを作成するときに,OpenTP1のメッセージ送受信機能を,データ操作言語(DML Data Manipulation Language)で作成できます。一つのサービスをコーディングするときには,CALL文とDMLは共存させることができます。
DMLは,TP1/Server Baseの場合にだけ使えます。TP1/LiNKでは,DMLは使えません。
DMLは,作業領域を定義する通信記述項と,命令文として使う通信文で構成されます。
DMLで使えるメッセージ送受信の機能を次の表に示します。
通信文 |
機能 |
対応するCALLインタフェース |
|
---|---|---|---|
データコミュニケーション機能 |
RECEIVE※1 |
メッセージの受信 |
CBLDCMCF('RECEIVE ') |
同期型のメッセージの受信 |
CBLDCMCF('RECVSYNC') |
||
SEND※1 |
メッセージの送信 |
CBLDCMCF('SEND ') |
|
応答メッセージの送信 |
CBLDCMCF('REPLY ') |
||
同期型のメッセージの送信 |
CBLDCMCF('SENDSYNC') |
||
同期型のメッセージの送受信 |
CBLDCMCF('SENDRECV') |
||
ENABLE※2 |
同期型のメッセージの送信 |
CBLDCMCF('SENDSYNC') |
|
DISABLE※2 |
同期型のメッセージの送信 |
CBLDCMCF('SENDSYNC') |
|
サービス機能 |
MHPのコミット |
CBLDCMCF('COMMIT ') |
|
継続問い合わせ応答の終了 |
CBLDCMCF('CONTEND ') |
||
一時記憶データの受け取り |
CBLDCMCF('TEMPGET ') |
||
MHPのロールバック |
CBLDCMCF('ROLLBACK') |
||
アプリケーションプログラムの起動 |
CBLDCMCF('EXECAP ') |
||
一時記憶データの更新 |
CBLDCMCF('TEMPPUT ') |
||
運用コマンドの実行 |
CBLDCADM('COMMAND ') |
||
ユーザジャーナルの取得 |
CBLDCJNL('UJPUT ') |
- 注
-
メッセージの再送 − CBLDCMCF('RESEND ')のDMLインタフェースはありません。
- 注※1
-
文法については,マニュアル「OpenTP1 プロトコル」の該当するプロトコル編を参照してください。
- 注※2
-
通信プロトコル対応製品にTP1/NET/OSI-TPを使った場合にだけ使えます。文法については,マニュアル「OpenTP1 プロトコル TP1/NET/OSI-TP編」を参照してください。
文法上の一般規則
OpenTP1のUAPで使うDMLは,COBOL言語本来の文法で記述された部分と,通信節,通信文から構成されます。ここでは通信節,通信文の記述規則,およびCOBOL言語本来の記述上で従わなければならない文法規則について説明します。ここで説明していない項目はCOBOL言語の文法規則に従います。COBOL言語の一般的な文法規則については,該当するマニュアルを参照してください。
記述記号
記述記号 |
意味 |
---|---|
〔 〕 |
この記号で囲まれている内容は省略できることを示します。 (例) 〔BEFORE ERASING〕 |
{ } |
この記号で囲まれている項目のうち,一つだけ選択することを示します。 |
__ |
この下線記号で示す予約語は,必要語なので省略できないことを示します。下線がない予約語は,補助語なので書いても書かなくてもかまいません。 |
形式の詳細
通信節(COMMUNICATION SECTION)の記述規則
通信節は,データ部(DATA DIVISION)に記述します。通信節を含めたDATA DIVISIONの一般形式を次に示します。データ部の各節は,ここに示す形式で記述してください。
DATA DIVISION. 〔 FILE SECTION. : 〕 〔 WORKING-STORAGE SECTION. : 〕 〔 LINKAGE SECTION. : 〕 〔 COMMUNICATION SECTION. 通信記述項 : 〕 〔 REPORT SECTION. : 〕
通信節は,節の見出し(COMMUNICATION SECTIONという予約語列をピリオドと空白で止めたもの)で書き始めます。見出しのあとに一つ以上の通信記述項(CD)を記述します。
通信記述項(CD)の記述規則
通信記述項は,通信種別およびUAPとOpenTP1のインタフェース領域を定義します。通信記述項の一般形式を次に示します。
CD 通信記述名 FOR {INPUT|OUTPUT|I-O} 〔STORAGE|JOURNAL|PROGRAM|COMMAND〕 〔 STATUS KEY IS データ名1〕 〔 SYMBOLIC TERMINAL IS データ名2〕 〔 MESSAGE DATE IS データ名3〕 〔 MESSAGE TIME IS データ名4〕 〔 MAP NAME IS データ名5〕 〔 SYNCHRONOUS MODE IS {SYNC|ASYNC|データ名6}〕 〔 SWITCHING MODE IS {NORMAL|PRIOR|データ名7}〕 〔 NEXT TRANSACTION IS データ名8〕 〔 ACTIVE INTERVAL IS データ名9〕 〔 DETAIL MODE IS データ名10〕 〔 WAITING TIME IS データ名11〕.
-
通信記述項は,レベル指示語であるCDで書き始めて,必ずピリオドと空白で止めます。
-
レベル指示語CDに続けて,FOR句を記述します。FOR句以降の各句の順序は,任意です。
-
通信記述名,およびデータ名1からデータ名11には,使用するCOBOL言語で使える名称を指定します。また,OpenTP1のUAPでは使えない名称は指定できません。
-
一つの通信記述項は,20行以内で記述してください。COBOLの継続行の機能は使えません。さらに,一つの通信記述項の途中に,注釈行,空白行は記述できません。
通信文の記述規則
通信文は,手続き部(PROCEDURE DIVISION)で使います。通信文の一般形式を次に示します。
RECEIVE 通信記述名 {〔FIRST〕SEGMENT|MESSAGE} 〔INTO 一意名1〕 〔 BEFORE ERASING 〕. SEND 通信記述名 〔FROM 一意名1〕 〔WITH {ESI|EMI|一意名2}〕 〔 BEFORE RECEIVING MESSAGE INTO 一意名3〕. DISABLE 通信記述名 〔 WITH 一意名1〕. COMMIT. ROLLBACK 〔WITH STOPPING〕.
-
通信文の各句は,一般形式で示した順序で記述します。
-
通信文中の通信記述名は,必ず通信節で定義しておいてください。
-
通信文中に一意名を指定する場合,それは作業場所節で定義したものでなければなりません。また,OpenTP1で使えない名称は指定できません。
-
通信文は複数行にわたって記述できます。ただし,標識領域(indicator area)にハイフン(-)を書く継続行の記述方法は使えません。また,一つの通信文の途中に,注釈行,または空白行は使えません。
-
通信文はCOBOL言語本来の文,または段落名と,同じ行に記述しないでください。
-
通信文中に記述する一意名は,01レベル,または77レベルを使ってください。
通信記述項について
通信文で使う通信記述項は,複数の通信文で共用できます。これらの通信記述項には,UAPで値を設定するデータ名と,OpenTP1から値が返されるデータ名があります。OpenTP1から値が返されるデータ名以外は,通信文の前後で内容が変わりません。したがって,複数の文で同じ通信記述項を使う場合,前回使った通信文と同じ内容でよいデータ名は,値を再設定する必要がありません。
通信記述項のうちで,データ名を指定する句と,編集形式の一覧を次の表に示します。
データ名を指定する句 |
データ領域の 形式 |
データ領域の値の設定元※ |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1. |
2. |
3. |
4. |
5. |
6. |
7. |
8. |
9. |
10. |
||
STATUS KEY |
データ名1 PIC X(5). |
B |
B |
B |
B |
B |
B |
B |
B |
B |
B |
SYMBOLIC TERMINAL |
データ名2 PIC X(8). |
B |
− |
U |
U |
U |
U |
U |
U |
− |
− |
MESSAGE DATE |
データ名3 PIC 9(6). |
B |
− |
− |
− |
− |
− |
− |
− |
− |
− |
MESSAGE TIME |
データ名4 PIC 9(8). |
B |
− |
− |
− |
− |
− |
− |
− |
− |
− |
MAP NAME |
データ名5 PIC X(8). |
b |
− |
U |
U |
− |
− |
− |
− |
− |
− |
SYNCHRONOUS MODE |
データ名6 PIC X(1). |
− |
− |
u |
u |
− |
− |
− |
− |
− |
− |
SWITCHING MODE |
データ名7 PIC X(1). |
− |
− |
u |
u |
− |
− |
− |
− |
− |
− |
NEXT TRANSACTION |
データ名8 PIC X(8). |
− |
− |
u |
− |
− |
− |
− |
− |
− |
− |
ACTIVE INTERVAL |
データ名9 PIC X(8). |
− |
− |
− |
− |
− |
− |
u |
− |
− |
− |
DETAIL MODE |
データ名10 PIC X(1). |
− |
− |
u |
u |
− |
− |
− |
− |
− |
− |
WAITING TIME |
データ名11 PIC 1(32) BIT. |
− |
− |
u |
u |
− |
− |
− |
− |
− |
− |
- (凡例)
-
1.:先頭セグメントの受信(RECEIVE)
2.:中間,最終セグメントの受信(RECEIVE)
3.:先頭セグメントの送信(SEND)
4.:中間,最終セグメントの送信(SEND)
5.:継続問い合わせ応答の終了(DISABLE)
6.:一時記憶データの受け取り(RECEIVE)
7.:アプリケーションプログラムの起動(SEND)
8.:一時記憶データの更新(SEND)
9.:運用コマンドの実行(SEND)
10.:ユーザジャーナルの取得(SEND)
B:OpenTP1から値が返されます。
b:ある条件のときには,OpenTP1から値が返されます。
U:UAPで値を設定します。
u:ある条件のときには,UAPで値を設定します。
−:該当しません。
- 注※
-
COMMIT文およびROLLBACK文では通信記述項を使いません。