LightSwitchファーストタッチ1(画面関連)

Lightswitchを少し触ったので気づいた点をメモ。
まずは、画面関連、操作感については、Lightswitch特有な操作性があること、部分的にSilverlightの画面を含めるのは簡単*1という印象

型変換できない値の入力

数値項目にアルファベットを入力すると入力エラーではなく元のデータに強制的に戻される。戻された旨のメッセージがツールチップに表示される
存在しない日付や、AutoCompleteも同じ

検索ボタンの利用

既定では検索が自動的に実行される。入力条件後に実行したい場合、画面デザイナの左ペインのクエリのプロパティを表示して、クエリの自動実行をオフにする
あとはボタンを追加し検索する処理を追加する。検索処理はクエリのLoadメソッドを呼び出せばOK。

楽観ロック競合時の動き

競合の解決のための仕組みが組み込まれている。データが競合した場合にユーザがどのデータを利用するか選択できる
この動作を避けたい場合はSaveErrorでエラーを先にハンドリングする

        partial void EditableCustomersGrid_SaveError(Exception exception, ref bool handled)
        {
            if (exception is ConcurrencyException)
            {
                this.ShowMessageBox("他のユーザーがデータを変更したため登録できません");
                handled = true;
            }
        }

データ競合Screenのカスタマイズは難しそう

『参考資料』

利用できる標準コントロール(拡張追加は可能)

・String・Integr・Decimal、Double型 テキストボックスとラベルが利用可能
 各値が選択肢を持っている場合、オートコンプリートボックス、モーダルウインドウピッカーが利用可能
 Decimal型は小数桁数を指定できる
・Boolean型 チェックボックス、テキストボックスとラベル
・DateTime型、Date型、Money型は専用のコントロールとテキストボックスとラベルが利用可能
 各値が選択肢を持っている場合、オートコンプリートボックス、モーダルウインドウピッカーが利用可能
 DateTime型、Date型は長い日付を指定するとyyyy年MM月dd日表示
 Money型はデータに小数桁数、通貨記号などを指定可能
・その他、Binay・Guid・PhoneNumber・Email、複合データ用に住所・テキストと画像など、レイアウト用にタブやモーダルウインドウなどがある

カスタムコントロールの利用

SilverlightのUserControlを組み込む事も簡単に実装できる。ただし、LightSwitchからはデータバインドするデータのパスを指定できるぐらい。カスタムコントロール追加時にパス(インテリセンスが効く)を指定する。
同じソリューションにSilverlightのライブラリを追加して管理すると簡単。

コントロールの追加

カスタムコントロールではなくLightSwitchに新しくコントロールに追加することもできる。すでにいくつか提供されている。
・LightSwitch Suite of Controls (ComboBox、 SQL Server Reporting Services Control 、Splitter Layouts、PDF Viewer )
http://archive.msdn.microsoft.com/SpursoftLSControls

・Infragistics NetAdvantage for LightSwitch (グラフなどのリッチなコントロールを用意。free versionもあり、Masked Editorが含まれている)
http://www.microsoft.com/visualstudio/en-us/lightswitch/extensions/infragistics

これ以外にはもっとアプリよりのレポート用やOLAP用などのコントロールもいろいろある。LightSwitchの思想からいえばこれらを利用してコードを書かないのが理想的な開発シナリオなのかもしれない。

関連データの表示

「他の画面データ」を追加して関連データを指定する


計算されたプロパティを利用する方法もある。関連データをコード上で取得し利用する方法。ただし、計算されたプロパティは遅延ロード処理される可能性があるので処理のタイミングでサーバーアクセスする可能性があるので注意。

画面遷移

画面を表示するためのメソッド「Show画面名」がApplicationクラスに定義されるので利用する。引数を利用する場合、遷移先の画面にローカルプロパティを追加してパラメーターであるをチェックする。
なお、モーダルウインドウは画面遷移というよりは別ウインドウで一部のデータを表示するという意味付け。OpenModalWindowやCloseModalWindowで制御、画面を指定する引数は画面内のコントロール名を利用する

*1:使いすぎるのはLightswitchを利用した意味がなくなるかも