iPhoneネイティブのクライアントを作る
予約機能の組み込み
単一商品の予約リストを表示するための仕組みは、BookingListControllerクラスで、BookingListController.xibファイルにオブジェクトの定義があります。 こちらは基本的にはItemListControllerクラスと同じようなものです。 予約リストは、サーバ側で予約されていない期間についての情報も挿入して戻されるので、後は単にリストに記載するだけです。
写真の右側の商品説明のような箇所は、UIWebViewというWebブラウザと同等なクラスを利用しています。 そこに、プログラムで生成したHTMLをセットして、表にしています。単なるテキストのためのクラスUILabelがありますが、 スタイル付きのテキストやあるいはレイアウト結果を表示したい場合は、UIWebViewを使います。 もちろん、HTMLだけでなく、CSSについても効果的に利用することで、デザイン性を高めることになるでしょう。
予約を入れる機能はReservationControllerクラスであり、ユーザーインタフェースは ReservationController.xibで定義しています。 このクラスは実用にするには、もっときちんと作り込まないといけませんが、ここではモックアップ的な体裁しか整えていない点はご了承ください。 テーブルの読み込みだけでなく、書き込みのためには、いろいろ複雑な処理が絡みます。また、ピッカーの表示を行わないといけません。 ここではピッカーだけを説明します。
iPhone OSではポップアップ・メニューがありません。 そのため、画面半分を使って回転するコントロールを持った「ピッカー」を使って選択入力をする必要があります。 もちろん、クラスとして定義されていますが、日付や時刻用のものと、汎用的なものがあります。 前者は選択肢はもともと持っているので、選択したときの処理の組み込みでOKです。 選択したという「イベント」が発生したときに、別のインスタンスのメソッド呼び出しを行う仕組みがあり(アクション)、それを利用しています。
汎用的な選択肢を持つピッカーはピッカーのdataSourceというアウトレットの先に選択肢の問い合わせを行います。 このサンプルでは、例えば顧客を選択するのに、顧客の一覧を返すように、ReservationControllerクラスで応答するメソッドを定義してあります。
サンプルにない機能で業務アプリに要求されるもの
駆け足でiPhoneアプリケーションを紹介しましたが、雰囲気が分かるようなもの程度です。 一般には、データの検証をさまざまな場面で行う必要があります。例えば、予約する日程にすでにブッキングが入っている場合どうするか?
もちろん、適当にIFで分岐すればいいのかもしれませんが、業務ソフトの場合、こうした処理は用途に応じて組み込む必要があります。 例えば、予約がぶつかった場合、仮予約として入れて後で処理をするのか、そもそも受け付けないでエラーを出すのか、 あるいは重複する日程を排除して予約を入れるか、これは利用する状況次第です。
しかしながら、このようなデータに関する制約は、コントローラ内で吸収するというのが1つの方針です。 ただし、動作によっては追加のユーザー・インタフェースも必要になります。
そして、業務ソフトの多くは利用者が誰なのかによって大きく違います。例えば、このような観葉植物レンタルにしても、 レンタル先の顧客が使うのであれば、認証を行った上で顧客の選択は行わないようにするのが通常でしょう。 一方、営業担当者が使うのであれば、しかるべき認証により、担当者の選択は不要にするのが一般的でしょう。 ただ、あえて認証しないで選択させるという方向性もあります。