17.1.2 AP作成時のポイント
- 〈この項の構成〉
(1) 同一マップを再表示するときの方法の見直し
同一マップの画面を再表示する場合は,一部上書を指定しないと,画面中の一つ(または一部)のオブジェクトだけを書き換えるときでも全画面の再表示となり,表示性能が低下します。
一部上書と全面書換とを使い分けることをお勧めします。特に一部上書は,フィールド単位にデータを入力し,APでチェックおよび表示する場合に効果的です。指定方法については「11.1.1(1) 通信記述項」を参照してください。
-
前提となる定義
-
ドローで,画面属性の「入力・選択状態の扱い」に「未入力・未選択」または「状態を維持」を指定します。また,該当するテキスト・フィールドの属性の「初期値」に「なし」を指定します。
-
1.の指定によって,データ未入力を埋字以外で判定する必要が生じた場合には,ドローセットアップの論理マップ属性ダイアログで,「初期クリア文字」に「埋字」以外を指定します。さらに,支援ツールのセットアップ情報の反映で,マップを再生成します。
-
- 1回目の表示時
-
-
プログラム中のマッピングオプションに,「マージ」を指定します。
-
TRANSCEIVE文,SEND文などで画面を表示します。
-
- 同じ画面の再表示時
-
-
プログラム中のマッピングオプションに,「論理マップだけ」を指定します。
-
画面表示時に変更しない項目にデータ有無コードを格納します。
-
動的変更属性の指定があれば,プログラム中の制御項目(修飾名を格納する論理マップのエリア)に格納します。
-
項目データは,先頭1バイト目,またはすべての項目データに対して格納します。
-
出力論理マップがデータ有無コードでクリアされるため,表示中のデータを記憶しておく場合には別のエリアに画面情報をバックアップしておくような対処が必要です。
-
画面表示時に変更する項目だけにデータを格納します。
-
画面の表示形態を指定する制御項目(マップ名-CNTRLO)に,動的変更用の定数テーブル中の「XMAP-CNTRL1(標準の場合)」を格納します。
-
TRANSCEIVE文,SEND文などで1回目と同じマップ名を再表示します。
-
このコーディングのひな型として,APパターンCRLINP01.CBLを利用できます。
(2) データ量の見直し
APでむだなデータを送っていないか,見直してください。例えば,常にスペースやゼロを送ってしまうと実行性能が劣ってしまいます。したがって,出力時の性能を上げるにはデータの量を減らすことが重要です。次の2点に注意してください。
-
データ有無コードで論理マップをクリアする
-
むだな初期値は指定しない
データ有無コードについては,「16. 論理マップ生成規則とマッピング規則」を参照してください。
(3) AP分割の見直し
XMAP3のオープン要求がどのタイミングで出されているかを見直してください。コンパイル単位で,TRANSCEIVE文または,SEND文が発行されると,APごとにオープンが実行されるため,処理が遅くなります。不要にオープンを要求しないためには次の点に注意してください。
-
一つのコンパイル単位にTRANSCEIVE文,SEND文をまとめ,オープンの実行は必要最低限にします。
-
共通のルーチンにまとめてTRANSCEIVE文,SEND文を発行するようにAPの構造を見直します。
-
COBOLの場合,AP間でオープンを引き継ぐ「CBLTERMSHAR=YES」を指定すると,AP間でオープンの引き継ぎが行われます。
詳細については「3.1.2 AP間でオープンを引き継ぐ場合」を参照してください。
COBOLでは,明示的にCALL文でオープンを要求する場合を除き,一つのコンパイル単位で最初のSEND文またはTRANSCEIVE文が発行されると,オープンが要求されます。そのため,1画面が1実行ファイル(.EXE)のような構成にすると,実行ファイルごとにオープンを要求することになります。この場合,オープン・クローズ,SEND文,またはTRANSCEIVE文を発行する実行ファイルとビジネス処理をする実行ファイルを分けた方が,実行性能が高くなります。
また,複数のコンパイル単位のものを合わせて一つの実行ファイルにするときは,各コンパイル単位でオープンを発行しないようにするため,COBOLの実行支援の環境変数で,「CBLTERMSHAR=YES」を指定します。「CBLTERMSHAR=YES」は,SEND/RECEIVE/TRANSCEIVE文でAPを作成したときだけ有効です。CALL文でAPを作成したときは無効になります。
AP間のオープン引き継ぎたいときは,XMAP3インタフェースエリアの情報を引き継ぐようなコーディングをする必要があります。画面用APのコーディングのひな型として,APパターンのGENDSP02およびGENDSP03が利用できます。
(4) グラフィックデータの渡し方の見直し
クリップボード中のグラフィックを指定(「*CLIP」指定)すると,APでファイルを指定して呼び出すよりも処理が早くなります。ただし,指定できるファイルは,一つだけのため注意が必要です。
(5) 画面クローズのタイミングの見直し
画面のクローズは,明示的にCALL文でクローズするか,DISABLE文を発行したタイミングです。ただし,クローズすると次に画面を表示するときには必ずオープンしなければなりません。画面を素早く消したり,再表示したりする場合は,画面属性ダイアログの「Z位置」で「一時非表示」を指定して,見た目上は表示されていないようにしておき,次に画面を表示するときに動的変更で「Z位置」の指定を「標準表示」または「手前に表示」に変更します。このようにすると,画面をクローズ,オープンするよりも早く画面を切り替えられます。
(6) 画面用APでの制御のやり取りの見直し
画面属性の定義で入力単位を「画面」にしているにもかかわらず,オブジェクトの属性で「自動送信」を指定して,オブジェクト単位でAPに制御を返すようなAP構造は,画面単位にAPに制御を返すAP構造と比べ オーバーヘッドが大きくなり,オブジェクト遷移(フォーカス移動)が遅くなる場合があります。このため,APとの制御のやり取りは画面単位で行うことをお勧めします。オブジェクト単位でAPと制御のやり取りをする場合は,入力単位を「フィールド」や「イベント」に設定し,できるだけ画面中のオブジェクトの数を少なくすることがポイントです。