連載 Magic V10リッチクライアント
第10回 サブフォームを利用した受注入力タスクの作成(その4)
サブフォーム機能はV10から新しく搭載された機能で、1対Nの親子関係にあるタスクの連動を容易にする機能です。
V9 Plusまでは、1対Nの親子関係にあるタスクを生成するには、いわゆるファントムタスク(*1)を作成してこれをレコード前処理やハンドラからコールするのが定石でした。これがV10では、親タスクのロジックエディタから子タスクをいっさいコールすることなしに、親子連動のフォームを実現することが可能となっています。これが「サブフォーム」と呼ばれる機能です。
(*1)子タスクの[ウィンドウ消去]を「No」に設定して、タスクが終了してもウィンドウ表示が残るようにした構造のタスク。
丹田 昌信 (プロフィール)
サブフォームを用いた1対Nのタスク
画面1は、前回までに作成した受注入力プログラムの親タスクのフォームです。ウィンドウタイプを「S=SDI」とし、「最小化ボタン=Yes」の設定にしてありますので、Windowsのタスクバーにもタスクボタンが表示されるようになっています。
ここにサブフォーム機能を用いて子タスクである明細行のフォームを追加します。完成後の実行ウィンドウは画面2のようになります。
明細入力サブタスクの作成
サブタスク自体は、従来と同じように親タスクのサブツリーとして作成します。タスク名は「明細入力」とし、タスクタイプは「C=リッチクライアント」とします(画面3)。
データビューエディタのメインソースには「明細ファイル」を指定し、7つのカラムをすべて選択します(画面4)。
親タスクから受注番号の値を受け取るためのパラメータ項目(P_受注番号)を設定し、その値で明細ファイルの受注番号を範囲指定(最小/最大)します(画面5)。(*2)
(*2)サブフォームの場合、サブフォームコントロール上からパラメータを渡す必要があるため、同一プログラム上の親タスクの参照項目であっても、無用のトラブルを未然に防ぐため、原則としてパラメータを介した設定とします(画面17)。
商品ファイルから商品名、商品タイプ、単価を引用するために照会リンクで商品ファイルにリンクし、4つのカラム(商品番号、商品名、商品タイプ、単価)を引用します(画面6)。
リンク先の商品ファイルの商品番号を、明細ファイルの商品番号で位置付け(最小/最大)設定します(画面7)。
これでひとまず、既存データを画面表示するためのデータビューの設定は完了です(*3)。
(*3)この段階ではまだ明細入力用の代入式の設定は行っていません。入力用のデータビューの定義はのちほど追加します。
明細入力フォームの作成
続いてフォームの定義を行います。明細入力サブタスクのフォームエディタを開き、名前が「明細入力」、インタフェースタイプが「C=リッチクライアント表示形式」になっていることを確認します(画面8)。
この状態でプルダウンメニューの「オプション」から「フォーム自動作成」を選択するか、あるいはCtrl+Gを押してフォーム作成ダイアログを表示します(画面9)。
フォームサイズ」のオプションを「C=表示内容に依存」とし、OKボタンを押してフォームを作成します。
できあがったフォームは、「明細入力」フォームからズームすると画面10のように表示されます。
次に、自動作成されたテーブルから不要なカラムを削除し、フォーム全体の大きさを微調整します。
ただしこのとき、フォームのサイズをMagicの旧バージョンのように厳密に親タスク側の明細行表示用のスペースに合わせる必要はありません。最終調整は親タスク側で行いますので、ここでは大雑把な調整だけでかまいません(画面11)。
ついでに、明細行の行単位のライン表示をONにしておきます。テーブルコントロールの特性シートを開き、「ラインの表示」欄を「Yes」に設定します(画面12)。
親タスク側のフォームの調整
サブタスクのフォームを保存してフォームエディタに戻り、親タスク側の「受注入力」フォームをズームします(画面13)。
コントロールパレットから「サブフォーム」コントロールを選択し、フォーム上の適当な位置に配置します(画面14)。
サブフォームコントロールのサイズ変更ハンドルをドラッグして、明細入力フォーム用の大きさに手動で調整します(画面15)。
このとき、厳密にサブタスク側のフォームのサイズ(画面11)に合わせる必要はありません。デフォルトでは、サブタスク側のフォームはここで指定したサイズに自動リサイズされて実行画面上に表示されます。これもサブフォーム機能の特徴のひとつです。
次に、このサブフォーム上に配置するプログラム/タスクを指定します。
サブフォームのコントロール特性にある「接続先」を「S=サブタスク」とし、「プログラム/タスク番号」からズームして「明細入力」のサブタスクを選択します(画面16)。
続いて、「パラメータ」欄からズームしてパラメータテーブルを開き、受注ファイルの受注番号をパラメータとして渡す設定を行います。サブタスク側のコール先パラメータは、画面5で定義したP_受注番号とします(画面17)。
最後に、親タスクからサブタスクに入るときのサブフォームのタブ順序の調整を行います。ここでは例として、6番としています(画面18)。
これで親タスク側、サブタスク側ともにフォームの作成は完了です。タスクを保存してプログラムリポジトリに戻り、F8キーでプログラムをチェックします。
「プログラムは正常です」と表示されたら、デバッグモードのF7キーでプログラムを実行してみましょう。
画面19のように表示されれば、サブフォームの動作は正常です。
次回は、リッチクライアントで顧客選択プログラムを作成します。
(以上、2008年3月15日号)