マップドライバを使ったスタンドアロン環境およびC/S環境下では,次に示す方法でアプリケーションプログラムからWS,PCに対する帳票印刷およびPCに対する画面の入出力ができます。
GUI画面で受注伝票発行業務(メニュー画面)を出力したあと,クリックされたプッシュボタンを判定し,「受注データ修正:ヘッダ画面」(データ入力画面)を出力するまでのコーディングを図5-7に示します。
図5-7 コーディング例
日立COBOLのSEND文,RECEIVE文およびTRANSCEIVE文によって画面の入出力をする方法について指定例を使用して説明します。
詳細については,マニュアル「COBOL2002 言語 標準仕様編」またはマニュアル「COBOL85 言語」を参照してください。
画面の入出力に必要な情報をCOMMUNICATION SECTION中に指定します。
ディスプレイへの画面表示,またはシリアル/ページプリンタへの帳票印刷を実行します。画面表示,帳票印刷時に変更したいデータは,出力論理マップへ格納したあとに実行します。
画面の出力から入力までの間にAPでほかの処理をする場合などに使用します。ただし,二次ウィンドウ,または二次ウィンドウがある一次ウィンドウの場合の入出力には,TRANSCEIVE文を使用してください。
ディスプレイからの画面入力を実行します。画面入力の結果は,入力論理マップに格納されます。SEND文と対で指定してください。
ディスプレイでの画面の入出力をまとめて実行します。SEND文とRECEIVE文の機能を持ちます。通常の画面の入出力には,TRANSCEIVE文を使用します。
AP中の最初のSEND文または,TRANSCEIVE文が発行されたとき,ディスプレイ,またはプリンタをオープンし,プログラム終了まで解放(クローズ)しません。
画面表示,または帳票印刷をしていないときは,ディスプレイ端末またはプリンタ端末を解放し,ほかのプログラムが表示,印刷できるようにDISABLE文を使用します。
「例」のようにコーディングすると,次のオープン命令が発行された場合,ディスプレイ上に表示されているウィンドウは閉じて,新たにウィンドウが表示されます。
通信記述項のMAPPING MODE句には,画面を表示するときのオプションとしてディスプレイ用に次に示すものが指定できます。
目的 | MAPPING MODE句の指定値 | 説明 |
---|---|---|
2回目または1回目でユーザデータを表示したいとき | △,または0 〈マージ〉 | 論理マップに代入したデータと物理マップをマージして画面を表示します。同一画面を書き換えるときに使用します。 表示属性の変更要求をしないオブジェクト属性については,画面定義時に指定した表示属性となります。同じ画面に対し,2回目以降の表示では固定部分(タイトルやけい線)は再描画しません。 |
同じ画面に対して一部上書をしたいとき | 2 〈論理マップだけ〉 | 論理マップに代入したデータを使用して画面を表示します。一般的に,2回目以降の表示で,入力した状態をそのままにして部分的に書き換えるときに使用します。 表示属性の変更指定をしないオブジェクト属性については,直前の表示属性となります。 |
ユーザデータなしで1回目(初期)表示用 | 3 〈物理マップだけ〉 | 論理項目,または制御項目に指定したデータを無視して,画面定義時の情報(物理マップ)だけで画面を表示します。論理マップをすべてデータ有無コードでクリアしたときと同じであり,メニューなどの初期表示に使用します。 |
STATUS KEY句のリターンコードの意味を次に示します。
コード | 意味 | 状態/要因/対処方法 |
---|---|---|
00000 | 正常終了 | データの入出力が正常に終了しました。 |
00008 | 論理エラー | COBOLのAPに誤りがあります。APに誤りがないかを調べて修正します。 |
10004 10008 | マッピングエラー | 画面データのマッピング中にエラーが発生しました。STATUS KEY句の指定がない場合,実行を中止します。STATUS KEY句の指定がある場合,処理を続行します。画面入出力時のリターンコードの内容を調査して対処する必要があります。※ |
20008 | 入出力エラー | 画面データの入出力中にエラーが発生しました。STATUS KEY句の指定がない場合,実行を中止します。STATUS KEY句の指定がある場合,処理を続行します。画面入出力時のリターンコードの内容を調査して対処する必要があります。※ |
なお,これらのリターンコードは標準出力に出力されます。
ここでは,COBOL言語のCALLインタフェースによってマップドライバを使用する方法を説明します。
マップドライバの機能と発行順序を図5-8に示します。
図5-8 マップドライバの機能と発行順序
CALL命令の形式を次に示します。
表5-3 共通インタフェース領域の形式(XMAP-COM)
データ項目名 | 長さ(位置) | データ形式 | 指定内容(データ名) |
---|---|---|---|
アイキャッチャ | 4 | X(4) | 「*XP△」とします(XMAP-COM-ID) |
リターン値 | 2(4) | 9(4)COMP※ | 2進形式で格納(XMAP-COM-RTN) |
リターン情報詳細 | 2(6) | 9(4)COMP※ | 2進形式で格納(XMAP-COM-RSN) |
未使用 | 3(8) | X(3) | (00)16とします(XMAP-COM-RSV1) |
id区分 | 1(11) | X | 必ず「I」とします(XMAP-COM-ITYPE) |
仮想端末名称 | 8(12) | X(8) | 仮想端末定義ファイルで指定した名称を左詰めで指定し,残りは空白とします。仮想端末名を省略して,空白を8バイトセットすると仮想端末定義ファイル中の先頭に定義された仮想端末名が仮定されます(XMAP-COM-TNAME) |
未使用 | 4(20) | X(4) | (00)16とします(XMAP-COM-RSV2) |
通信種別 | 4(24) | X(4) | ディスプレイ要求時は,「BWS△」とし,プリンタ要求時は,「OWS△」とします(XMAP-COM-MSG) |
未使用 | 44(28) | X(44) | (00)16とします(XMAP-COM-RSV3) |
マップ名称 | 8(72) | X(8) | 物理マップ名をデバイスID付きの左詰めで指定します。残りは空白です(XMAP-COM-MAPNAME) |
未使用 | 2(80) | X(2) | (00)16とします(XMAP-COM-RSV4) |
未使用 | 6(82) | X(6) | (00)16とします(XMAP-COM-PAGENAME) |
入力論理マップ長 | 4(88) | S9(8)COMP※ | 入力論理マップ長を指定します(XMAP-COM-INLNG) |
未使用 | 68(92) | X(68) | (00)16とします(XMAP-COM-RSV5) |
表5-4 要求インタフェース領域の形式(XMAP-REQ)
データ項目名 | 長さ(位置) | データ形式 | 指定内容(データ名) |
---|---|---|---|
要求種別 | 4 | X(4) | OPEN:オープン要求 CLOS:クローズ要求 SEND:出力要求 RECV:入力要求 MDO△:オプション設定要求(XMAP-REQ-TYPE) |
RECEIVEオプション | 1(4) | X | F:入力要求時 △:上記以外(XMAP-REQ-OPT1) |
SENDオプション | 1(5) | X | 1:出力要求時 △:上記以外(XMAP-REQ-OPT2) |
未使用 | 2(6) | X(2) | 「△△」とします(XMAP-REQ-RSV) |
表5-5 オープンインタフェース領域の形式(XMAP-OPN)
データ項目名 | 長さ(位置) | データ形式 | 指定内容(データ名) |
---|---|---|---|
データ有無コード使用選択 | 1 | X | 1:データ有無コードを有効にします その他:データ有無コードを無効にします(XMAP-OPN-DCODE-SET) |
データ有無コード | 1(1) | X | データ有無コードを指定します(XMAP-OPN-DCODE) |
未使用 | 2(2) | X(2) | 「△△」とします(XMAP-OPN-RSV) |
表5-6 マッピングインタフェース領域の形式(XMAP-MDO)
データ項目名 | 長さ(位置) | データ形式 | 指定内容(データ名) |
---|---|---|---|
マッピングオプション大分類 | 4 | 9(8)COMP※1 | XMAP-MDO-SFLDの内容をセットします(XMAP-MDO-OPT1) |
マッピングオプション小分類 | 4(4) | 9(8)COMP※1 | マージ:XMAP-MDO-MAPFLDの内容をセットします※2 物理マップだけ:XMAP-MDO-PHFLDの内容をセットします※2 論理マップだけ:MAP-MDO-LOGFLDの内容をセットします※2(XMAP-MDO-OPT2) |
図5-9 インタフェース領域