[ Siena 目次 ]

商品カタログ(改訂版)
コレクション内コレクションの活用

以前に作成した商品カタログのサンプルの処理を一部書き換えて、
コレクション内の項目に別のコレクションを登録して使用します。
実現する機能や振る舞いは商品カタログのサンプルと全く一緒です。
商品カタログのサンプルを先にご覧いただき、画面の動きや仕様を確認していただけると、 より内容が伝わりやすいかと思います。
変更点を中心に紹介します。


コレクション内コレクションの確認

改訂前との一番の相違点は、データソースをそのまま使わず、3個のデータソース(カテゴリーテーブル、メガネ商品用テーブル、シューズ商品用テーブル)を一つのコレクションにまとめてから使用する点です。

とりあえず、作成したコレクション Goods の中身を確認します。
スクリーン1
コレクション Goods を開いた状態です。カテゴリーテーブルの項目と、 GoodsTBL 項目があります。
2件目( Shoes )の GoodsTBL 項目の下にある、ダイヤモンドのような印をタッチ(クリック)します。
スクリーン2
画面右に、グループ項目の中身が表示されました。ダイヤモンドのような印が、グループ項目であることを表しているようです。
シューズ商品用テーブルと同内容のデータが、 Shoes カテゴリーの従属項目になっていることが確認できます。


以下に、改定前から変更したポイントを記述します。

[ 目次 ]
  1. コレクション内コレクションの確認
  2. 変更点の解説
  3. 変更のメリット



変更点の解説

ここでは、貼り付けた部品の属性を ExpressView で確認します。
部品を選んで右下の ExpressView ボタンをクリックすれば、画面右に開きます。
以下、画像をクリックすると拡大画面が表示されます。

  1. 表紙画面のタイマー
  2. タイマーが終了したら次画面に遷移するようにしていますが、ここに、コレクション Goods の登録を追加しました。
    TimerEnd 属性で、
    Clear(Goods);
    Collect(Goods,AddColumns(Categories,"GoodsTBL",If(Name="Glasses",Glasses,Shoes)));

    と指定している部分が追加処理です。
    改訂前と比較してみてください。→ 改訂前はこちら
    表紙画面のタイマー
    AddColumns 関数を使って、データソース Categories GoodsTBL 項目を追加したテーブルを取得し、 それをコレクション Goods に登録しています。
    GoodsTBL 項目の中身は、 If(Name="Glasses",Glasses,Shoes) によって充填しています。

  3. カテゴリー用リストボックス
  4. カテゴリー名をコレクション Goods から参照するように変更しました。
    Items 属性で、 Sort(Goods,ListOrder) と指定している部分がそれです。
    改訂前と比較してみてください。→ 改訂前はこちら
    カテゴリー用リストボックス

  5. 上段ギャラリー
  6. インデックス用商品の参照元を、データソースからコレクション Goods に変更しました。
    Items 属性で、
    Sort(Filter(Listbox1!Selected!GoodsTBL,UseAsIndex),OrderOfIndex)
    と指定している部分がそれです。カテゴリー名で条件分岐させていた改訂前と比較してみてください。→ 改訂前はこちら
    上段ギャラリー

  7. 下段ギャラリー
  8. 上段で選択された商品のカラーバリエーションを表示いていますが、上段ギャラリーと同様、参照元をデータソースからコレクション Goods に変更しました。
    Items 属性で、
    Filter(Listbox1!Selected!GoodsTBL,ModelNumber=Gallery1_1!Selected!ModelNumber)
    と指定している部分がそれです。こちらも、カテゴリー名で条件分岐させていた改訂前と比較してみてください。→ 改訂前はこちら
    下段ギャラリー



変更のメリット

変更して最も変わった点は、カテゴリー名を直接判定する処理が、初期処理のみになったことです。

上段ギャラリー・下段ギャラリーから、「もしカテゴリーがメガネだったら〜、それ以外は〜」といった条件分岐が消えています。

カテゴリーが二つであれば、その効果は小さいですが、もっとたくさんのカテゴリーを扱っているとしたら、効果は大きいかと思います。

マイクロソフトが提供するサンプル(『 Dress by Video 』など)から学習していた時も、直接判定するコーディングが大変気になっていました。

コーディングレスを謳う製品の性質上、業務アプリケーションと同じレベルの保守性を維持する必要はない(あるいは、そういう発想が通用しにくい使い方が主眼になっている)と思いますが、 少しでもコーディングの間違いを減らす意味では、こうしたコレクション内コレクションの活用もいいのではないかと思っています。