3.1.3 AP分割時の注意
COBOLでは,明示的にCALL文でオープンを要求する場合を除き,一つのコンパイル単位で最初のSEND文またはTRANSCEIVE文が発行されると画面がオープンされます。そのため,1画面が1実行ファイル(.exe)のような構成にすると,画面ごとにオープンをすることになります。この場合,オープン・クローズ,SEND文またはTRANSCEIVE文を発行する実行ファイル,ビジネス処理をする実行ファイルを分けると実行性能が高くなります。ビジネス処理をする実行ファイルは,DLLファイルでも代用できます。EXEファイルにするかDLLファイルにするかは,処理の形態によって次のように使い分けてください。
-
.exe:メニュー画面など処理が続く場合(EXEファイル間でのデータ受け渡しはない)
-
.dll:処理が単独で閉じる場合(1ウィンドウで閉じる)
また,複数のコンパイル単位のものを合わせて一つの実行ファイルにするときは,各コンパイル単位でオープンを発行しないようにするため,COBOLの実行支援の環境変数で,「CBLTERMSHAR=YES」を指定します。「CBLTERMSHAR=YES」は,SEND/RECEIVE/TRANSCEIVE文でAPを作成したときだけ有効です。CALL文でAPを作成したときは無効になります。
CALL文でAPを作成する場合,AP間のオープン引き継ぎをするときは,ユーザが,XMAP3インタフェースエリアの情報を引き継ぐようなコーディングをする必要があります。このコーディングのひな型として,APパターンのGENDSP02およびGENDSP03を利用できます。
- 〈この項の構成〉
(1) メインの実行ファイルから別の実行ファイルを呼び出す場合
メインメニュー(AP1)から各サブプログラム(AP2〜n)を呼び出すケースを次の図に示します。
-
AP1,AP2〜nの各APで,オープン〜クローズを行う。
-
AP1からAP2〜nを呼び出すときは,表示している画面を一度消してから,新しい画面を表示し直す。
図3‒4 メインメニュー(AP1)から各サブプログラム(AP2〜n)を呼び出すケース
(2) 新しい画面を表示するとき前の画面を消さないで表示しておくケース
AP1からAP2〜nを呼び出すとき,AP1の画面を消さないで表示しておくケースを次の図に示します。ただし,この方法では動きが遅くなります。
-
AP1で画面をオープン→AP2〜nを呼び出す
-
AP2〜nではオープン〜クローズを行う
図3‒5 AP1からAP2〜nを呼び出すとき,AP1の画面を消さないで表示しておくケース
(3) 新しい画面を表示するとき前の画面を消す場合
AP1からAP2〜nを呼び出すとき,AP1の画面を消してAP2を表示するケースを次の図に示します。ただし,この方法では動きが遅くなります。
(4) 画面をクローズしないで一時的に表示中の画面を消す場合(Windows)
画面をクローズすると,次に表示するときには必ずオープンしなければならないので,この間のオープン/クローズの時間が掛かります。このような時間を節約したいときには,GUI画面の画面属性ダイアログの「Z位置」で「後ろに表示」か「一時非表示」を指定します。これらの指定をすると,一時的に表示中の画面を見えないようにできます。いちばん後ろに表示された画面を前に表示させたり,一時的に非表示になった画面を元に戻す場合は,ドローセットアップの「表示属性の動的変更」の「位置属性」タブで「XY位置」を「手前に表示」と指定します。
(5) 一つの表示サービスに複数画面表示する場合(UNIX)
C/SおよびOLTP(TP1/NET/XMAP3)構成で,一つの表示サービスに対して複数の画面を表示する場合,同時に表示できる画面数(GUI画面の場合は,一次/二次ウィンドウの総数)は15個までです。16個以上の画面表示を要求するとエラー(ログ情報に出力される詳細コードが「0x01001303」エラー)となり,16個目からの画面は表示されませんので注意してください。ログ情報に出力される詳細コードについては,「付録F リターンコードと詳細コード」を参照してください。