連載 Magic V10リッチクライアント
第7回 サブフォームを利用した受注入力タスクの作成(その1)
(第9回掲載時に、前後関係の問題からタイトルが変更されました。)
前回までに、APGで作成したリッチクライアントタスクを、リモートでインターネット上から起動する方法について学びました。今回は、eDeveloper V10の新機能である「サブフォーム」を利用したリッチクライアントタスクの作り方について学びます。
丹田 昌信 (プロフィール)
サブフォームの実行画面
画面1は、V10のサブフォーム機能を利用して作成したリッチクライアントタスクの実行画面です。内容的には、往年のペットショップ管理システムの受注入力プログラムをV10用に改良したものです。サブフォーム機能を利用すれば、親子関係にある1対Nのタスクを、従来の方法より容易に作成することができます。
V9 Plusまでは、1対Nの親子タスクを作成するのに、親タスクのレコード前処理やレコードメインなどからその都度、サブタスクをコールする必要がありました(画面2)。
これが、V10ではコールコマンドの記述が不要となり、フォーム定義上で1対Nのタスクを実現することができるようになりました。画面3は画面1のタスクのロジックエディタです。ロジック部分はまったくの空白であることが分かります。
しかも、画面1で見たとおり、サブフォーム機能はリッチクライアントでも使用可能ですので、この機能がV10に追加されただけでも、大幅なアプリケーション開発の工数削減につながりそうです。
なお、この受注入力リッチクライアントは、のちほど、画面4や画面5のように顧客選択プログラムや商品選択プログラムもコールできるように機能を追加していきます。
ちなみに、リッチクライアントタスクはWebアプリケーションと同じように、それぞれのセッションがコンテキストで一元管理されていますので、複数のプログラムを並行してコールすることもできます(画面6)。
選択プログラムがコールされている状態で呼び出し元のプログラムを終了すれば、コンテキストの整合性を維持するために、コールされたプログラムも一斉に自動終了します(画面7)。
では、この受注入力プログラムを実際に作ってみましょう。はじめに、SQLデータベースの作成からです。
SQLデータベースの作成
Microsoft SQL Server Management Studio Expressを開き、画面8のように「PetShop」というデータベースを新規に作成します。
テーブルの定義はすべてMagic側から行いますので、SQL Server側で行う作業はこれだけです。
データベーステーブルの設定
次に、Magic eDeveloper V10を起動し、「オプション」→「設定」→「データベース」で、「PetShop」というデータベースを定義します。「DBMS」には「MicrosoftSQLServer」を指定します(画面9)。
データベース特性では、画面10のようにデータベースサーバを指定します。Windows統合認証でのログオンが可能に設定してある場合は、ユーザ名とユーザパスワードの指定は不要です。
この時に、データベース特性の「SQL」タブにある「テーブルの存在チェック」にチェックを入れておくと、Magic側からテーブルを自動生成することが可能となります(画面11)。
プロジェクトの登録
次に、Magic側に「PetShop」というプロジェクトを登録します(画面12)。
データソースの定義
続いて、データリポジトリにペットショップ管理システムで使用する5つのデータソースを定義します(画面13)。
データベース欄はすべて、画面9で定義したPetShopを指定します(画面14)。
個々のデータソースは画面15~画面19のように定義します。従来、「A=文字型」として定義していたカラムは、ここではすべて「U=Unicode」として定義しています。
インデックスの定義は表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日号)