5.2.2 スタンドアロン環境,およびC/S環境下での画面入出力および帳票出力命令

マップドライバを使ったスタンドアロン環境およびC/S環境下では,次に示す方法でアプリケーションプログラムからWS,PCに対する帳票印刷およびPCに対する画面の入出力ができます。

  1. 日立COBOLのSEND文,RECEIVE文およびTRANSCEIVE文による方法
  2. COBOL言語のCALL文による方法
<この項の構成>
(1) SEND文,RECEIVE文およびTRANSCEIVE文による方法
(2) CALL文による方法

(1) SEND文,RECEIVE文およびTRANSCEIVE文による方法

GUI画面で受注伝票発行業務(メニュー画面)を出力したあと,クリックされたプッシュボタンを判定し,「受注データ修正:ヘッダ画面」(データ入力画面)を出力するまでのコーディングを図5-7に示します。

図5-7 コーディング例

[図データ]

日立COBOLのSEND文,RECEIVE文およびTRANSCEIVE文によって画面の入出力をする方法について指定例を使用して説明します。

詳細については,マニュアル「COBOL2002 言語 標準仕様編」またはマニュアル「COBOL85 言語」を参照してください。

(a) 通信記述項

画面の入出力に必要な情報をCOMMUNICATION SECTION中に指定します。

(例)
[図データ]
1,2,3は必ず指定します。5は画面入出力時に必ず指定します。ほかの項目は,必要に応じて指定します。
〈例の説明〉
  1. 通信記述名(必須)
    • DSP:画面入出力時に,SEND文,RECEIVE文およびTRANSCEIVE文で使用する名称
    • PRT:シリアル/ページプリンタ出力時,SEND文で使用する名称
  2. 通信種別(必須)
    • I-O WS:ディスプレイへの画面入出力用であることを示します。
    • OUTPUT WS:シリアル/ページプリンタへの帳票印刷用であることを示します。
  3. 物理マップ名称格納エリア(必須)
    SEND文,RECEIVE文およびTRANSCEIVE文で出力,または入力する場合に物理マップ名称を格納するエリアです。格納するマップ名には,次に示すデバイスIDを付ける必要があります。
    • GUI画面の場合:ND
    • CUI画面の場合:NC
    • シリアルプリンタ(けい線帳票)の場合:6A
    • シリアルプリンタ(プレプリント帳票)の場合:6H
    • ページプリンタ(網掛け帳票)の場合:6B
    • ページプリンタ(グラフィック帳票)の場合:6G
  4. 仮想端末名格納エリア
    最初のSEND文およびTRANSCEIVE文を実行する前に,仮想端末名を格納しておくエリアです。仮想端末定義ファイル(XMAPhosts)で定義した仮想端末名を指定します。正しい名称を指定しないと,実行時に表示・印刷先が決定できなくなりエラーになります。
    SYMBOLIC TERMINAL句を省略した場合は,仮想端末定義ファイルの先頭に定義されている仮想端末名が格納されているものとして入出力が実行されます。
  5. マッピングオプション(画面入出力時必須,帳票印刷時不要)
    論理マップ,または物理マップのマッピング方式を指定します。詳細については,「5.2.2(1)(f) MAPPING MODE句の扱い(マッピングオプション)」を参照してください。
  6. リターンコード格納エリア
    SEND文,RECEIVE文およびTRANSCEIVE文のリターンコードを格納するエリアです。SEND文,RECEIVE文およびTRANSCEIVE文が正常に処理されたかを判定する場合,このエリアを参照します。詳細については,「5.2.2(1)(g) STATUS KEY句のリターンコード」を参照してください。
  7. データ有無コード格納エリア
    データ有無コードを変更する場合には,最初のSEND文を実行する前にデータ有無コードを格納しておく必要があります。「DATA ABSENCE CODE IS」を省略すると,データ有無コードとして標準の(1F)16が仮定されます。
(b) SEND文

ディスプレイへの画面表示,またはシリアル/ページプリンタへの帳票印刷を実行します。画面表示,帳票印刷時に変更したいデータは,出力論理マップへ格納したあとに実行します。

画面の出力から入力までの間にAPでほかの処理をする場合などに使用します。ただし,二次ウィンドウ,または二次ウィンドウがある一次ウィンドウの場合の入出力には,TRANSCEIVE文を使用してください。

(例)
[図データ]
(c) RECEIVE文

ディスプレイからの画面入力を実行します。画面入力の結果は,入力論理マップに格納されます。SEND文と対で指定してください。

(例)
[図データ]
(d) TRANSCEIVE文

ディスプレイでの画面の入出力をまとめて実行します。SEND文とRECEIVE文の機能を持ちます。通常の画面の入出力には,TRANSCEIVE文を使用します。

(例)
[図データ]
(e) DISABLE文

AP中の最初のSEND文または,TRANSCEIVE文が発行されたとき,ディスプレイ,またはプリンタをオープンし,プログラム終了まで解放(クローズ)しません。

画面表示,または帳票印刷をしていないときは,ディスプレイ端末またはプリンタ端末を解放し,ほかのプログラムが表示,印刷できるようにDISABLE文を使用します。

「例」のようにコーディングすると,次のオープン命令が発行された場合,ディスプレイ上に表示されているウィンドウは閉じて,新たにウィンドウが表示されます。

(例)
[図データ]
(f) MAPPING MODE句の扱いマッピングオプション

通信記述項のMAPPING MODE句には,画面を表示するときのオプションとしてディスプレイ用に次に示すものが指定できます。

目的MAPPING MODE句の指定値説明
2回目または1回目でユーザデータを表示したいとき△,または0
〈マージ〉
論理マップに代入したデータと物理マップをマージして画面を表示します。同一画面を書き換えるときに使用します。
表示属性の変更要求をしないオブジェクト属性については,画面定義時に指定した表示属性となります。同じ画面に対し,2回目以降の表示では固定部分(タイトルやけい線)は再描画しません。
同じ画面に対して一部上書をしたいとき2
〈論理マップだけ〉
論理マップに代入したデータを使用して画面を表示します。一般的に,2回目以降の表示で,入力した状態をそのままにして部分的に書き換えるときに使用します。
表示属性の変更指定をしないオブジェクト属性については,直前の表示属性となります。
ユーザデータなしで1回目(初期)表示用3
〈物理マップだけ〉
論理項目,または制御項目に指定したデータを無視して,画面定義時の情報(物理マップ)だけで画面を表示します。論理マップをすべてデータ有無コードでクリアしたときと同じであり,メニューなどの初期表示に使用します。
(g) STATUS KEY句のリターンコード

STATUS KEY句のリターンコードの意味を次に示します。

コード意味状態/要因/対処方法
00000正常終了データの入出力が正常に終了しました。
00008論理エラーCOBOLのAPに誤りがあります。APに誤りがないかを調べて修正します。
10004
10008
マッピングエラー画面データのマッピング中にエラーが発生しました。STATUS KEY句の指定がない場合,実行を中止します。STATUS KEY句の指定がある場合,処理を続行します。画面入出力時のリターンコードの内容を調査して対処する必要があります。
20008入出力エラー画面データの入出力中にエラーが発生しました。STATUS KEY句の指定がない場合,実行を中止します。STATUS KEY句の指定がある場合,処理を続行します。画面入出力時のリターンコードの内容を調査して対処する必要があります。
注※
画面入力時のリターンコードの内容については,「9.4 AP実行時のXMAP3 Serverのリターンコード」を参照してください。

なお,これらのリターンコードは標準出力に出力されます。

(2) CALL文による方法

ここでは,COBOL言語のCALLインタフェースによってマップドライバを使用する方法を説明します。

(a) CALL文の発行順序

マップドライバの機能と発行順序を図5-8に示します。

図5-8 マップドライバの機能と発行順序

[図データ]

注※1
ディスプレイとプリンタを使う場合それぞれに必要です。
注※2
画面・帳票数分を繰り返します。
注※3
マッピングオプション変更時に発行します。
注※4
ディスプレイからデータを入力する場合に必要であり,プリンタの場合は発行しません。
(b) CALL命令

CALL命令の形式を次に示します。

[図データ]

  1. XMAP-COM
    共通インタフェース領域を指定します。形式の詳細を表5-3に示します。この領域は,画面・帳票を出力したい端末単位に作成し,オープンしたときの領域をクローズ要求まで引き継いで使用します。また,次に示す各要求時にマッピングおよび入出力I/Oに必要な情報をセットします。
    • オープン要求時:仮想端末名,通信種別を指定する。
    • 出力要求時:物理マップ名称を指定する。
    • 入力要求時:入力論理マップ長を指定する。

      表5-3 共通インタフェース領域の形式(XMAP-COM)

      データ項目名長さ(位置)データ形式指定内容(データ名)
      アイキャッチャ4X(4)「*XP△」とします(XMAP-COM-ID)
      リターン値2(4)9(4)COMP2進形式で格納(XMAP-COM-RTN)
      リターン情報詳細2(6)9(4)COMP2進形式で格納(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)
      注※ 
      Linuxの場合は,「COMP-5」になります。

  2. XMAP-REQ
    要求インタフェース領域を指定します。形式を表5-4に示します。この領域は必ず指定してください。この領域を指定した内容によって,要求種別が決まります。

    表5-4 要求インタフェース領域の形式(XMAP-REQ)

    データ項目名長さ(位置)データ形式指定内容(データ名)
    要求種別4X(4)OPEN:オープン要求
    CLOS:クローズ要求
    SEND:出力要求
    RECV:入力要求
    MDO△:オプション設定要求(XMAP-REQ-TYPE)
    RECEIVEオプション1(4)XF:入力要求時
    △:上記以外(XMAP-REQ-OPT1)
    SENDオプション1(5)X1:出力要求時
    △:上記以外(XMAP-REQ-OPT2)
    未使用2(6)X(2)「△△」とします(XMAP-REQ-RSV)
  3. データ名3
    入出力要求やオープン要求などの要求種別に応じて適切な内容を指定します。
    • 出力要求時:出力論理マップを指定する。
    • 入力要求時:入力論理マップを指定する。
    • オープン要求時:オープンインタフェース領域を指定する。形式の詳細を表5-5に示す。この領域は必ず指定する。

      表5-5 オープンインタフェース領域の形式XMAP-OPN

      データ項目名長さ(位置)データ形式指定内容(データ名)
      データ有無コード使用選択1X1:データ有無コードを有効にします
      その他:データ有無コードを無効にします(XMAP-OPN-DCODE-SET)
      データ有無コード1(1)Xデータ有無コードを指定します(XMAP-OPN-DCODE)
      未使用2(2)X(2)「△△」とします(XMAP-OPN-RSV)
    • クローズ要求時:0を指定する。
    • オプション設定要求時:1を指定する。
  4. データ名4
    オプション設定要求時は,マッピングインタフェース領域を指定します。形式の詳細を表5-6に示します。なお,マッピングオプションを指定しない場合は,0を指定します。

    表5-6 マッピングインタフェース領域の形式XMAP-MDO

    データ項目名長さ(位置)データ形式指定内容(データ名)
    マッピングオプション大分類49(8)COMP※1XMAP-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)
注※1
Linuxの場合は,「COMP-5」になります。
注※2
詳細は「5.2.2(1)(f) MAPPING MODE句の扱い(マッピングオプション)」を参照してください。
(i)インタフェース領域の取り込み方法
XMAP3 Serverが提供しているインタフェース領域(JSVWATBL.cbl)をアプリケーションプログラムに取り込む場合,COBOL言語のWORKING STORAGE SECTION,またはLINKAGE SECTIONにCOPY文を指定します。また,コンパイルする前にJSVWATBL.cblのディレクトリ名をCBLLIBに設定しておいてください。
インタフェース領域を図5-9に示します。

図5-9 インタフェース領域

[図データ]
(ii)オープン要求
CALL命令を使用する場合,画面・帳票を表示,印字したい端末に付けた仮想端末名単位にオープン要求を実行します。複数の仮想端末(ディスプレイとプリンタ)をオープン要求する場合,インタフェース領域は,仮想端末ごとに用意します。
(例)
[図データ]
注※
SPACEをセットした場合は,仮想端末定義ファイルの先頭に定義された仮想端末名が仮定されます。
(iii)オプション設定要求
仮想端末へ画面表示,帳票印刷をする場合,マッピングオプションを指定できます。オープン要求で使った共通インタフェース領域を引き継いで使います。
(例)
[図データ]
(iv)出力要求
オープン要求した仮想端末へ画面表示,帳票印刷を実行します。オープン要求で使用した共通インタフェース領域を引き継いで使用します。
(例)
[図データ]
(v)入力要求
入力要求によって,画面から入力した情報をアプリケーションプログラムへ入力します。画面表示要求で使用したインタフェース領域を引き継いで使用します。ただし,プリンタの場合は指定できません。
(例)
[図データ]
(vi)クローズ要求
仮想端末をクローズします。オープン要求,出力要求および入力要求で使用したインタフェース領域を引き継いで使用します。
(例)
[図データ]
(vii)コーディング例
CALL文を使ったアプリケーションプログラムのコーディングについては,標準提供例題プログラムのソースファイルを参照してください。なお,ソースファイルのファイル名称については「付録A 提供ファイル一覧」を参照してください。