処理フロー: リンクと代入の再計算

Magicには、dbMAGICと呼ばれていた頃から最新バージョンに至るまで、変わらない動作ルールがいくつかあります。

例えば、レコード後処理を通る条件等は、その代表例です。
そして、ここで扱う「リンクと代入の再計算」も変わらない動作ルールに該当します。

代入式やリンクの位置付式には、初期計算と再計算があります。
いずれも、初期計算はレコード前処理の前に行われます。
従って、レコード前処理の開始時点では、代入式の計算も完了していますし、リンクの位置付も終わった状態でレコードが取得できているはずです。
この初期計算は、レコードのループ処理が実行される間、毎回行われます。

次に再計算について。
代入式や位置付式に使われる項目の変化をイベントとして、再計算は割り込み的にリアルタイム実行されるのですが、それには一定の決まりがあります。
以下の条件を満たすことによって、再計算は行われます。
・式に項目が使われている(定数だけでの式では再計算は実行されません。)
・その項目は同一タスクにある(親タスク以上に定義された項目では再計算は発生しません)
・その項目が代入やリンクの上にある(下にある場合は再計算の対象になりません)

上記の決まりは、オンラインタスクでもバッチタスクでも、リッチクライアントタスクでも同様です。
特に3番目は知られていないことが多いかもしれません。
レコードメインやデータビューで定義されている場所によって動作が変わってくるということです。

理解を深めるためのサンプルプログラムを作成してみました。
こちらから、どうぞ。