処理フロー: メインプログラムの動作

プログラムリポジトリMagic eDeveloper V9以降には、プログラムリポジトリの先頭に「メインプログラム」があります。
dbMAGIC V8以前には無かったもので、他のプログラムとは異なる特別な役割を担います。

タスク定義メインプログラムは、他のタスクとは明らかに異なる点があります。
それは、メインテーブルが指定できないため、レコード前処理/後処理が存在しない、ということです。

しかし、タスク前処理/後処理はあります。
そして、この処理は必ず決まったタイミングで処理されます。

RunMode関数の戻り値によって、処理タイミングを表にすると次のようになります。

RunModeの戻り値 タスク前処理 タスク後処理
0 または 1 アプリケーション(MCF)がオープンされたときに自動実行。 アプリケーション(MCF)がクローズされるときに自動実行。
2 開発モードから実行モードに切り替わった瞬間に自動実行。 実行モードから開発モードに戻る瞬間に自動実行。
3 F7によって起動されたプログラムの前に自動実行。 F7によって起動されたプログラムの終了後に自動実行。

また、レコードメインもありますが、メインテーブルが指定できないので、ここで扱えるのは変数のみです。
ここで定義された変数は、アプリケーション(MCF)内のどのタスクからでも使えるグローバル変数となります。
読込/書込ともに可能です。

メインプログラムのレコードメインではリンクコマンドも使うことができます。
しかし、ここでリンクされたテーブルは、アプリケーションの開始から終了まで(= MCFのオープンからクローズまで) オープンした状態が継続するので、あまり心地良い感じはしません。
個人的には、サブタスクやサブプログラムでリンクしたデータをメインプログラムの変数に格納して使う方がスマートかと思います。

ユーザイベントメインプログラムでもユーザイベントの定義が可能です。
ここで作成されたユーザイベントは、変数と同様に、アプリケーション(MCF)内のどのタスクからでも使えるグローバルイベントとなります。
Magic eDeveloper V10では、オンラインタスクはイベントドリブンで作ることが推奨されていますが、そうなるとグローバルイベントは非常に便利です。
勿論、V9Plusでも知っていれば、かなり重宝しますので、覚えておきましょう。

尚、V10では、ユーザ定義関数を作成できるという機能があります。
これも、メインプログラムで作成したものはグローバル関数として使えます。