ホーム > Magic xpa > 旧Magicバージョン > 連載 Magic V10リッチクライアント

サイト内検索

連載 Magic V10リッチクライアント

第7回 サブフォームを利用した受注入力タスクの作成(その1)

(第9回掲載時に、前後関係の問題からタイトルが変更されました。)

前回までに、APGで作成したリッチクライアントタスクを、リモートでインターネット上から起動する方法について学びました。今回は、eDeveloper V10の新機能である「サブフォーム」を利用したリッチクライアントタスクの作り方について学びます。

丹田 昌信 (プロフィール

サブフォームの実行画面

画面1は、V10のサブフォーム機能を利用して作成したリッチクライアントタスクの実行画面です。内容的には、往年のペットショップ管理システムの受注入力プログラムをV10用に改良したものです。サブフォーム機能を利用すれば、親子関係にある1対Nのタスクを、従来の方法より容易に作成することができます。

画面 1 サブフォームを利用したリッチクライアントタスク
画面 1 サブフォームを利用したリッチクライアントタスク

V9 Plusまでは、1対Nの親子タスクを作成するのに、親タスクのレコード前処理やレコードメインなどからその都度、サブタスクをコールする必要がありました(画面2)。

画面 2 V9 Plusまでのサブタスクのコール
画面 2 V9 Plusまでのサブタスクのコール

これが、V10ではコールコマンドの記述が不要となり、フォーム定義上で1対Nのタスクを実現することができるようになりました。画面3画面1のタスクのロジックエディタです。ロジック部分はまったくの空白であることが分かります。

画面 3 V10ではサブタスクのコールが不要
画面 3 V10ではサブタスクのコールが不要

しかも、画面1で見たとおり、サブフォーム機能はリッチクライアントでも使用可能ですので、この機能がV10に追加されただけでも、大幅なアプリケーション開発の工数削減につながりそうです。

なお、この受注入力リッチクライアントは、のちほど、画面4画面5のように顧客選択プログラムや商品選択プログラムもコールできるように機能を追加していきます。

画面 4 顧客選択プログラムのコール
画面 4 顧客選択プログラムのコール
画面 5 商品選択プログラムのコール
画面 5 商品選択プログラムのコール

ちなみに、リッチクライアントタスクはWebアプリケーションと同じように、それぞれのセッションがコンテキストで一元管理されていますので、複数のプログラムを並行してコールすることもできます(画面6)。

画面 6 複数プログラムの並行コール
画面 6 複数プログラムの並行コール

選択プログラムがコールされている状態で呼び出し元のプログラムを終了すれば、コンテキストの整合性を維持するために、コールされたプログラムも一斉に自動終了します(画面7)。

画面 7 コール元のプログラムの終了でコールされたプログラムも自動終了
画面 7 コール元のプログラムの終了でコールされたプログラムも自動終了

では、この受注入力プログラムを実際に作ってみましょう。はじめに、SQLデータベースの作成からです。

SQLデータベースの作成

Microsoft SQL Server Management Studio Expressを開き、画面8のように「PetShop」というデータベースを新規に作成します。

画面 8 SQLデータベースの作成
画面 8 SQLデータベースの作成

テーブルの定義はすべてMagic側から行いますので、SQL Server側で行う作業はこれだけです。

データベーステーブルの設定

次に、Magic eDeveloper V10を起動し、「オプション」→「設定」→「データベース」で、「PetShop」というデータベースを定義します。「DBMS」には「MicrosoftSQLServer」を指定します(画面9)。

画面 9 データベーステーブルの設定
画面 9 データベーステーブルの設定

データベース特性では、画面10のようにデータベースサーバを指定します。Windows統合認証でのログオンが可能に設定してある場合は、ユーザ名とユーザパスワードの指定は不要です。

画面 10 データベース特性の設定
画面 10 データベース特性の設定

この時に、データベース特性の「SQL」タブにある「テーブルの存在チェック」にチェックを入れておくと、Magic側からテーブルを自動生成することが可能となります(画面11)。

画面 11 テーブルの存在チェック
画面 11 テーブルの存在チェック

プロジェクトの登録

次に、Magic側に「PetShop」というプロジェクトを登録します(画面12)。

画面 12 プロジェクトの登録
画面 12 プロジェクトの登録

データソースの定義

続いて、データリポジトリにペットショップ管理システムで使用する5つのデータソースを定義します(画面13)。

画面 13 5つのデータソースの定義
画面 13 5つのデータソースの定義

データベース欄はすべて、画面9で定義したPetShopを指定します(画面14)。

画面 14 データベースの指定
画面 14 データベースの指定

個々のデータソースは画面15画面19のように定義します。従来、「A=文字型」として定義していたカラムは、ここではすべて「U=Unicode」として定義しています。

画面 15 制御ファイルの定義
画面 15 制御ファイルの定義
画面 16 顧客ファイルの定義
画面 16 顧客ファイルの定義
画面 17 商品ファイルの定義
画面 17 商品ファイルの定義
画面 18 受注ファイルの定義
画面 18 受注ファイルの定義
画面 19 明細ファイルの定義
画面 19 明細ファイルの定義

インデックスの定義は表1~表5のとおりです。

表 1 制御ファイルのインデックス定義

# 名前 タイプ # セグメント 順序
1 制御キー 重複不可 1 1 制御キー 昇順

表 2 顧客ファイルのインデックス定義

# 名前 タイプ # セグメント 順序
1 顧客番号 重複不可 1 1 顧客番号 昇順
2 顧客名1 重複不可 1 2 顧客名 昇順
2 1 顧客番号 昇順

表 3 商品ファイルのインデックス定義

# 名前 タイプ # セグメント 順序
1 商品番号 重複不可 1 1 商品番号 昇順
2 商品名 重複不可 1 2 商品名 昇順
2 1 商品番号 昇順
3 商品タイプ 重複不可 1 3 商品タイプ 昇順
2 1 商品番号 昇順

表 4 受注ファイルのインデックス定義

# 名前 タイプ # セグメント 順序
1 受注番号 重複不可 1 1 受注番号 昇順
2 顧客番号 重複不可 1 2 顧客番号 昇順
2 1 受注番号 昇順

表 5 明細ファイルのインデックス定義

# 名前 タイプ # セグメント 順序
1 受注番号 重複不可 1 1 受注番号 昇順
2 2 明細番号 昇順
2 商品番号 重複不可 1 3 商品番号 昇順
2 1 受注番号 昇順
3 2 明細番号 昇順

次回は、Unicode(UTF-8)データの取り込みをお送りします。

(以上、2008年2月1日号)