スタンドアロンの画面帳票アプリケーションをMeFt/Web環境へ移行するにあたり、対応が必要となる点を説明します。
MeFt/Webでリモート実行したプログラムで表示される画面のうち、表示ファイルを使用した画面以外はサーバ上で処理されます。サーバ上で処理される画面には、次のようなものがあります。
エラーメッセージ
コンソール画面
診断機能メッセージ
ウィンドウクローズメッセージ
しかし、通常、WWWサーバを介して起動されたプログラムの画面は表示されないため、その画面への応答ができずに入力待ち状態になってしまいます。その結果、クライアントのWWWブラウザが無応答となってしまいます。
この問題への対応を画面ごとに説明します。
エラーメッセージ
COBOLプログラムの実行時にエラーが発生すると、エラーのメッセージボックスが表示され、[OK]ボタンが押されるのを待つ状態になります。しかし、MeFt/Web環境ではメッセージボックスが表示されても応答できないため、必ずエラーメッセージをファイルに出力する指定をします。
エラーメッセージをファイルに出力するには、実行環境情報で、COBOLが用意する環境変数情報「@MessOutFile」に出力するファイル名を割り当てます。なお、実行環境設定ツールでは、COBOLが用意する環境変数情報を[変数名]のリストから選択することができます。
次の例では、メッセージを出力するファイルとして「C:\NetCOBOL\workspace\ADDR\ERROR.TXT」を割り当てています。
コンソール画面
コンソール画面に対するACCEPT文およびDISPLAY文を使用したデータの入出力はできません。コンソール画面への出力は、ファイルに出力するよう変更します。コンソール画面への出力をファイルにするには、翻訳オプション「SSOUT」で任意の環境変数情報名を指定し、実行環境情報でその環境変数情報名とファイル名を対応づけます
以下に、翻訳オプションと実行環境情報の設定例を示します。
<翻訳オプションの指定内容> SSOUT(OUTFILE) <実行環境情報の指定内容> OUTFILE=C:\NetCOBOL\workspace\ADDR\SSOUT.DAT |
診断機能メッセージ
COBOLプログラムの実行時にアプリケーションエラーなどが発生すると、COBOLの診断機能によりエラーの発生箇所などを記載した診断レポートファイルが出力され、そのことがメッセージボックスに表示されます。MeFt/Web環境では、そのメッセージを表示しないようにするか、診断機能を起動しないようにする指定を必ず行います。
この指定は、実行環境情報で実行環境変数「@CBR_JUSTINTIME_DEBUG」にて行います。診断機能のメッセージを表示させないようにするには、「@CBR_JUSTINTIME_DEBUG」の変数値を「ALLERR,SNAP -l」とします。また、診断機能を起動しないようにするには、「@CBR_JUSTINTIME_DEBUG」の変数値を「NO」とします。
次の例では、診断機能のメッセージを表示させないように「ALLERR,SNAP -l」を指定しています。
ウィンドウクローズメッセージ
ウィンドウを閉じる時の確認メッセージであるウィンドウクローズメッセージを非表示にするため、実行環境情報の実行環境変数「@WinCloseMsg=OFF」を指定する必要があります。
MeFt/Webでは、次の2種類のCOBOLプログラムを起動できます。
プログラムの種類 | 説明 |
---|---|
プロセス型プログラム | 実行可能なモジュール形式(EXE)のプログラムです。 |
スレッド型プログラム | ダイナミックリンクライブラリ形式(DLL)のプログラムです。 |
プロセス型プログラムとスレッド型プログラムの比較
プロセス型プログラムとスレッド型プログラムの違いを下表に示します。
項目 | プロセス型プログラム | スレッド型プログラム |
---|---|---|
アプリケーションの形式 | 主プログラム(EXE) | 副プログラム(DLL) |
実行単位 | プロセス | スレッド |
起動性能 | スレッド型プログラムと比べ低速。 | スタートアップのオーバヘッドがないため高速。 |
サーバの資源消費 | 大 | 小 |
既存資産の活用性 | ソース修正および再翻訳・再リンクとも不要。 | 再翻訳・再リンクが必要。場合によっては若干のソース修正が必要。 |
アプリ異常終了時の影響範囲 | 異常が発生したプログラム以外には影響が及ばない。 | 同じプロセスで動作する他のスレッド型プログラムも異常終了してしまう。 |
プロセス型プログラムをスレッド型プログラムに移行する場合の修正点
既存のプロセス型プログラムをスレッド型プログラムに移行する際、プログラム修正が必要となる部分を説明します。
環境変数操作
スレッド型プログラムでは、1つのプロセスで複数のスレッドが動作するため、環境変数の内容が変更されると、他のプログラムに影響を及ぼす可能性があります。したがって、スレッド型プログラムでは環境変数操作を行うことはできません。環境変数操作を行っている場合は、環境変数操作は行わないように修正します。
引数の受渡し方法
プロセス型プログラムでは、起動時に指定された引数を受け取るには、コマンド行引数の操作機能を使用します。コマンド行引数の操作機能は、“NetCOBOL ユーザーズガイド”の「コマンド行引数の取出し」をご参照ください。一方、スレッド型プログラムはC呼出し規約に従って呼び出されるため、起動時に指定された引数を受け取るには、手続き部(PROCEDURE DIVISION)の見出しのUSING指定にデータ名を記述します。したがって、引数の受渡しを行っている場合は、受取り方法を変更します。C呼出し規約による呼出しの詳細は、“NetCOBOL ユーザーズガイド”の「CプログラムからCOBOLプログラムを呼び出す方法」をご参照ください。
参考
MeFt/Webアプリケーションでは、起動時に指定する引数はMeFt/Webコントロールのargumentプロパティに指定します。argumentプロパティは、“MeFt/Webユーザーズガイド”の「利用者プログラムの指定方法(pathname/argument/environment/funcname)」を参照してください。
プログラムの終了
スレッド型プログラムでは、プログラムの終了にSTOP RUNを使用することはできません。STOP RUNを使用している場合は、EXIT PROGRAMを使用するように修正します。
MeFt/Webの運用時には、スタンドアロンでのエラーコードに加えて、次のエラーコードが通知されます。
エラーコードを判定して処理を分けているプログラムをMeFt/Webで運用する場合は、次のコードも考慮した判定を行うようにします。エラーコードの通知は、“3.2 表示ファイルのプログラミング”の「エラー処理」に記載があります。
通知コード | FILE STATUS句(4桁)に通知される内容 | エラー内容 |
---|---|---|
N1 | 90N1 | WWWサーバが正常に通信を行うことができなかったため、リモート実行処理を続行できなくなりました。または、クライアントマシンかサーバマシンでメモリ不足が発生しました。 |
N7 | 90N7 | MeFt/Webサーバで通信監視時間のタイムアウトが発生しました。 |
N8 | 90N8 | MeFt/WebコントロールのQuitメソッドが実行されました。 |
なお、本章で構築するアプリケーションでは、画面機能および帳票機能の各ファイルFILE STATUS句に指定した4桁のデータ名の領域の値が「0000」であるかを判定して処理を分けています。そのため、MeFt/Webの運用時に追加されるエラーコードに対応するための修正は特に行いません。