Visual Studio LightSwitch

Visual Studio LightSwitch を使ってビジネス アプリケーションをビルドする

Robert Green

コード サンプルのダウンロード

とても忙しい 2 人のお話です。Antonio は、数百もの支店を抱える銀行の IT 部門に勤める上級開発者です。Dalia は、その銀行の支店長として、コンピューター資産の管理業務を改善することを望んでいます。だれが、どのコンピューターを、どのぐらいの期間使用しているのか、プリンターや FAX の購入日と設置日はいつだったのか、支店で周辺機器や消耗品に毎月費やしている費用はいくらなのか。

Dalia は Antonio に、資産管理アプリケーションの作成を電子メールで依頼します。Antonio は、このアプリケーションの必要性と、銀行の大幅なコスト削減に役立つことに同意しますが、既に他のプロジェクトで手がふさがっているため Dalia を手助けする時間がありません。Antonio は Dalia がこのアプリケーションを Excel などのエンドユーザー アプリケーションを使用して自分でビルドするつもりだと知り、拡張不可能な単層の自己完結型アプリケーションを彼女がビルドしてしまうことを懸念しています。しかし、彼にはどうすることもできません。

6 か月後、Dalia はヒーローになりました。彼女が自分でビルドしたアプリケーションにより、支店のコンピューター関連費用が 25% 削減されただけでなく、リソースの使用が効率化されたことで生産性も向上しました。銀行の経営陣は、このシステムを全支店に導入し、データを一元管理することを決定します。Antonio は、月末までにこれらの作業を完了するよう命じられたので、時間があれば自分でビルドしていたはずのアプリケーションと同様の形式にこのアプリケーションを変換する方法に悩まされています。Antonio はうまくやり遂げられるでしょうか。

Visual Studio LightSwitch の紹介

Visual Studio LightSwitch は、このようなごくありふれたシナリオに対処するよう設計されています。LightSwitch は Visual Studio ファミリの新製品で、開発者のスキルのレベルにかかわらず、デスクトップ、Web、およびクラウドに対応したデータ中心のビジネス アプリケーションを簡単に作成できるようにすることを目的としています。LightSwitch では、ほとんどの開発作業を LightSwitch 自体が行うため、開発プロセスが簡略化されます。データベースを操作するコードを記述する必要はありません。画面を手作業でレイアウトすることも不要です。開発者はビジネス ロジックの考案に専念できます。

LightSwitch アプリケーションは Silverlight を基盤としています。また、モデル - ビュー - ビューモデル (MVVM: Model-View-ViewModel) に基づく実績のある n 層アーキテクチャ パターンと、使い慣れた Microsoft .NET Framework テクノロジ (Entity Framework、WCF RIA サービスなど) を使用します。LightSwitch アプリケーションは、デスクトップ アプリケーション (ブラウザー外実行アプリケーション) またはブラウザー ベース アプリケーションとして配置できます。デスクトップ アプリケーションは、ローカルのハードウェア リソースを利用でき、Microsoft Word や Excel などのアプリケーションと連携できます。デスクトップとブラウザー ベースの LightSwitch アプリケーションは、どちらも IIS と Windows Azure でホストできます。

LightSwitch の主な対象者は、Dalia のようなエンド ユーザー開発者です。エンド ユーザー開発者とは、インフォメーション ワーカー、IT プロフェッショナル、ビジネス アナリストなど、業務の一環として開発作業に携わるユーザーです。エンド ユーザー開発者はプロフェッショナルの開発者ではないため、、開発にスムーズに着手する手段、一般のアプリケーション要件に対処する機能を自動的に組み立てる組み込みの機能、アプリケーションを配置する際の簡単で柔軟なオプションを求めています。つまり、配置と拡張が容易で優れたアーキテクチャを備えた、データ中心アプリケーションをすばやくビルドすることを希望しています。

以前からの Visual Studio 開発者にとっても、LightSwitch は魅力的な追加ツールとして役立ちます。LightSwitch は、Visual Studio 2010 Professional およびそれ以上のエディションの上位にインストールできます。Visual Studio 開発者は、LightSwitch アプリケーションをゼロからビルドすることも、Visual Studio で LightSwitch アプリケーションを開いて拡張することも可能です。Dalia が LightSwitch を使用してアプリケーションをビルドしていたとすれば、Antonio はそのアプリケーションを開いて強化できていたでしょう。また、Antonio は、ゼロから開発を始めた場合よりもおそらくはるかに短い期間で、LightSwitch でアプリケーションをビルドできたでしょう。

今回の記事では、おなじみ Contoso 社の建設会社部門が使用する LightSwitch アプリケーションを取り上げます。同社では、顧客とそのプロジェクトの管理を希望しています。今回説明するサンプル アプリケーションは、code.msdn.microsoft.com/Contoso-Construction-9f944948 (英語) からダウンロードできます。

エンティティ

LightSwitch アプリケーションをビルドする最初の手順は、Visual Basic と Visual C# のどちらでコードを記述するか選択することです。次に、データを定義します。新しいテーブルを作成することも、外部データ ソースにアタッチすることも可能です。テーブルをゼロから作成すると、作成したテーブルはアプリケーションのデータベース (SQL Server Express データベース) に追加されます。ただし、アプリケーションの配置時には、データのホスト用に任意のエディションの SQL Server を選択できます。外部データを操作する場合は、SQL Server や SQL Azure などの外部データベース、または Entity Framework のプロバイダーを備えた任意のデータベースに接続できます。また、SharePoint リストや WCF RIA サービスにも接続できます。

サンプル アプリケーションには、Customer エンティティ (テーブル) を含みます (図 1 参照)。

The Customer Entity
(クリックすると拡大表示されます)

図 1 Customer エンティティ

エンティティのプロパティごとに、データ型、そのプロパティが必須かどうか、一意かどうか、検索可能かどうか、および画面に既定で表示するかどうかを指定できます。また、代替表示ラベルと最大長も指定できます。数値プロパティと日付プロパティの場合は、最小値と最大値を指定できます。

プロパティを既定の型 (文字列など) のまま使用することも、"カスタム ビジネス型" と呼ばれる組み込みデータ型を使用することもできます。Customer エンティティの電話と FAX に関するプロパティは Phone Number データ型を、Email プロパティは Email Address データ型を使用しています。組み込みデータ型には検証機能があり、ランタイム エラーがわかりやすく表示されます。電話番号や電子メール アドレスが有効かどうか検証するコードを記述する必要はありません。また、Phone Number データ型には、組み込みの形式指定機能があります (図 2 参照)。

The Built-In Phone Number Data Type Provides Validation and Formatting

図 2 組み込みの Phone Number データ型で提供される、形式指定機能と検証機能

LightSwitch には、Date、Image、および Money データ型もあり、すべての型に組み込みエディター、形式指定、および検証の機能が備わっています。

プロパティにエンティティを追加したら、エンティティの概要プロパティを確認します。概要プロパティはエンティティを説明し、検索画面ではハイパーリンクとして表示されます。

画面は、すべての顧客をグリッドに表示します。[Full Name] 列にハイパーリンクが表示されています。ユーザーが氏名をクリックすると、その顧客の詳細画面が表示されます。LightSwitch 開発者は、この操作に関するコードを記述する必要はありません。図 3 に、[Search Customers] タブの画面を示します。

An Entity’s Summary Property Is a Hyperlink in Search Screens

図 3 検索画面でハイパーリンクとして表示される、エンティティの概要プロパティ

LightSwitch の既定では、最初の文字列プロパティがエンティティの概要プロパティとして使用されます。文字列プロパティがなければ、文字列以外の最初のプロパティが使用されます。サンプル アプリケーションでは、顧客は人物で、Customer エンティティの最初の文字列プロパティは、LastName プロパティです。しかし、Customer エンティティでは、このプロパティではなく FullName プロパティを概要プロパティに使用しています。これは計算されたプロパティです。プロパティを計算されたプロパティにするには、[Properties] (プロパティ) ウィンドウの [Is Computed] (計算されたプロパティである) チェック ボックスをオンにするかデザイナー上部のボタンをクリックし、[Edit Method] (編集メソッド) をクリックして、次のプロパティ値を計算するコードを記述します (ここでは Visual Basic を使用します)。

Private Sub FullName_Compute(ByRef result As String)
  result = Me.LastName + ", " + Me.FirstName
End Sub

FullName プロパティを概要プロパティに指定するには、Customer エンティティを選択してから概要プロパティを FullName に設定するだけです。

計算されたプロパティは、データベースには格納されません。実行時にエンティティのプロパティとして計算されます。また、計算されたプロパティを使用して、名前や住所を単純に連結したり、年間累計利益や未払いの請求合計額などの値を計算したりすることができます。

エンティティ間にリレーションシップを作成するには、データ デザイナーの [Relationship] (リレーションシップ) ボタンをクリックします。[Add New Relationship] (新しいリレーションシップの追加) ダイアログ ボックスで、2 つのエンティティ、リレーションシップの種類、および削除時の動作を選択します。Customer エンティティには、Project エンティティと Appointment エンティティで定義した一対多リレーションシップがあります。したがって、Customer エンティティには、Projects プロパティと Appointments プロパティがあります。この 2 つのプロパティは、コレクションです。

1 つのデータ ソースに含まれるエンティティ間だけでなく、複数のデータ ソースのエンティティ間でもリレーションシップを作成できます。すべてのデータの取得、ユーザーへのデータの表示、および変更の保存は、LightSwitch によって行われます。統合されたリレーションシップの作成機能は、LightSwitch 固有の魅力的な機能です。

カスタム検証規則

組み込みビジネス型に用意されている検証に加えて、カスタム ビジネス ロジックのコードも画面レベルとエンティティ レベルの両方に追加できます。画面の検証コードはクライアントだけで実行され、画面のプロパティとデータを検証します。エンティティ プロパティの検証コードは、クライアントでまず実行されてから中間層で実行されます。ユーザーはすぐに検証結果がわかるため、データを中間層に送信する前にエラーを修正できます。検証ロジックは中間層でも実行され、他のユーザーがデータを変更している状況にも対処します。これは、n 層設計のベスト プラクティスです。

エンティティ プロパティの検証コードを作成するには、エンティティ デザイナーでプロパティを選択し、[Write Code] (コードの記述) ボタンのドロップダウン リストから適切なメソッドを選択します。たとえば、ここでは Address1_Validate メソッドを選択します (図 4 参照)。

図 4 Address1_Validate メソッド

Private Sub Address1_Validate(results As EntityValidationResultsBuilder)
  'Warn the user if the Address is empty
  If Me.Address1 = "" Then
    results.AddPropertyResult(
      "Address should not be empty. " & 
      "Construction project cannot begin unless an address is supplied.", 
      ValidationSeverity.Warning)
  End If
End Sub

EntityValidationResultsBuilder は、検証結果のコンテナーです。このコンテナーは、検証情報、警告、およびエラーを保持できます。検証情報と警告が含まれる場合、ユーザーには情報が表示されますが、データをそのまま保存することは可能です。コレクションに検証エラーが含まれる場合、ユーザーはデータを保存できません。

サンプル アプリケーションでは、住所が空の場合はユーザーに警告が表示されます。ただし、ユーザーはデータをそのまま保存できます。一方、郵便番号を検証するコード (図 5 参照) は、これほど緩やかではありません。

図 5 ZIP_Validate メソッド

Private Sub ZIP_Validate(results As EntityValidationResultsBuilder)
  If Me.ZIP <> "" Then
    'Enter the dash if not supplied and is 9 digits long
    If Me.ZIP.Length = 9 Then
      Me.ZIP = Me.ZIP.Substring(0, 5) + "-" + Me.ZIP.Substring(5)
    End If
    'Make sure valid zip code (5 or 5+4 format)
    If Not System.Text.RegularExpressions.Regex.IsMatch(
      Me.ZIP, "^\d{5}$|^\d{5}-\d{4}$") Then
      results.AddPropertyError(
        "Please enter a valid US ZIP code. (ex. 98052 or 98052-1234)")
    End If
  End If
End Sub

郵便番号の形式が正しくなければ、この検証コードは検証エラーを追加します。そのため、ユーザーは無効なデータを保存できません。図 6 に、住所を空にし、無効な郵便番号を入力した場合の結果を示します。空の住所からは警告が生成され、無効な郵便番号からはエラーが生成されます。

The Empty Address Generates a Warning While the Invalid ZIP Code Generates an Error

図 6 空の住所からは警告が生成され、無効な郵便番号からはエラーが生成される

画面

エンティティを定義したら、LightSwitch アプリケーションをビルドする次の手順は、画面をデザインすることです。LightSwitch には、次の定義済みの画面テンプレートが用意されています。

  • Details Screen (詳細画面): 1 つのエンティティを表示し、関連データをグリッドに表示します。
  • Editable Grid Screen (編集可能グリッド画面): グリッド内で 1 つ以上の項目を編集できます。
  • List and Details Screen (一覧および詳細画面): 項目のコレクションを一覧に表示します。一覧の項目を選択すると、その項目の詳細が表示されます。
  • New Data Screen (新規データ画面): 新しい項目を作成する画面です。グリッドを使用して、関連データを同時に取得する機能も追加できます。
  • Search Data Screen (データ検索画面): クエリから返されるデータを表示します。各項目には、エンティティの詳細画面を表示するリンクが含まれます。

これらのテンプレートを使用すると、画面のレイアウトを簡単に始めることができます。画面を作成するには、ソリューション エクスプローラーでソリューションまたは [Screens] (画面) ノードを右クリックし、[Add Screen] (画面の追加) をクリックします。データ デザイナーの [Screen] (画面) ボタンをクリックしてもかまいません。画面を作成する際は、画面の種類と主な画面データを選択します。主な画面データには、エンティティ、またはエンティティに基づいたクエリを選択できます。続いて、画面に表示する関連データを指定できます。

Visual Studio で Silverlight の画面を開くと、デザイン キャンバスと XAML が表示されます。LightSwitch で画面を開くと、Screen Designer (スクリーン デザイナー) が表示されます (図 7 参照)。

The Screen Designer Shows a Hierarchical View of the Controls on a Screen

図 7 画面上のコントロールを階層的に表示するスクリーン デザイナー

左側には、画面メンバーの一覧が表示されます。この一覧には、画面で使用できる項目が含まれ、たとえば、画面に含まれている各エンティティのデータ項目や、Close、Refresh、Save などのメソッドも含まれています。右側には、screen content tree (画面コンテンツ ツリー) が表示されます。これは、画面上のコントロールとそのバインドされたデータを階層的に表示するものです。開発者は必要に応じて画面にデータ項目を追加でき、画面のコントロールを再配置でき、画面のレイアウトを変更できます。たとえば、顧客の一覧を上部に、注文の一覧を下部に表示する代わりに、顧客の一覧を左側に、注文の一覧を右側に表示できます。また、ラベルのテキスト、ラベルを表示するかどうか、水平方向と垂直方向の配置、高さと幅など、コントロールのさまざまなプロパティを設定できます。

少なくとも 1 つの画面を作成したら、F5 キーを押してアプリケーションを実行できます。最初に作成した画面が、アプリケーションの既定の画面になります。この設定は、アプリケーション デザイナーの [Screen Navigation] (画面ナビゲーション) タブで変更できます。LightSwitch アプリケーションには、アプリケーション シェル、ナビゲーション メニュー、リボン、画面のタブ付き領域、およびデータ バインドが自動的に用意されています (図 8 参照)。

LightSwitch Applications Automatically Include an Application Shell, Menu and Ribbon

図 8 アプリケーション シェル、メニュー、およびリボンが自動的に用意される LightSwitch アプリケーション

また、簡便なチェック機能と同時実行制御機能もアプリケーションに組み込まれています。データ中心アプリケーションの一般的な機能はすべて LightSwitch が制御するため、開発者がコードを作成する必要はありません。

LightSwitch の画面テンプレートには、それぞれ固有の機能が用意されています。たとえば、検索画面には、項目を表示するグリッドと、項目を Excel にエクスポートするボタンが備わっています。ユーザーは必要に応じて項目を追加できます。SearchCustomers 画面 (図 8 参照) には、リボンの [Add Customer] ボタンと、グリッド見出しの [Add] ボタンという、 2 つのボタンが備わっています。

ボタンをリボンに追加するには、スクリーン デザイナーで [Screen Command Bar] (画面コマンド バー) ノードを右クリックし、[Add Button] (ボタンの追加) をクリックします。また、[Screen Command Bar] (画面コマンド バー) ノードを展開し、[Add] (追加) ボタンのドロップダウン リストの一覧で [New Button] (新しいボタン) をクリックすることもできます (図 9 参照)。ボタンをグリッドに追加するには、グリッド内の [Command Bar] (コマンド バー) ノードを使用します。

The Screen Command Bar Contains the Buttons in the Application’s Ribbon

図 9 アプリケーションのリボンに表示されるボタンが含まれた [Screen Command Bar] (画面コマンド バー)

ボタンを追加すると、ユーザーがボタンをクリックした際に実行するメソッドの名前の入力が求められます。ボタンを右クリックして [Edit Execute Code] (実行コードを編集) をクリックすると、そのボタンで実行するコードを作成できます。SearchCustomers 画面の [Add Customer] ボタンと [Add] ボタンは、どちらも gridAddAndEditNew_Execute メソッドを呼び出すことで、ShowCreateNewCustomer メソッドを呼び出します。ShowCreateNewCustomer メソッドは、CreateNewCustomer 画面を表示する次のような LightSwitch の組み込みメソッドです。

Private Sub gridAddAndEditNew_Execute()
  Me.Application.ShowCreateNewCustomer()
End Sub

エンティティと同様に、画面にも開発者が制御できるイベントが多数あります (図 10 参照)。

Access Screen Event Handlers via the Write Code Button

図 10 [Write Code] (コードの記述) ボタンを使用してアクセスする画面のイベント ハンドラー

Run イベントは、画面の表示が要求されると発生します。Run イベントのイベント ハンドラーは、handled 引数を受け取ります。この引数を true に設定すると、画面がそれ以上実行されません。InitializeDataWorkspace イベントは、画面データが取得される直前に発生します。このイベントは、画面の初期化コードの実行に適しています。他のイベントにもわかりやすい名前が付いています。画面の表示やデータの保存などの操作をユーザーが実行できるかどうか確認するコードの配置場所としては、Run イベントや Saving イベントが適していると考える方もいるでしょう。しかし、そのようなコードは、適切なアクセス制御メソッド (画面レベルの CanRun、エンティティ レベルの CanUpdate など) に配置する必要があります。アクセス制御は LightSwitch アプリケーションの重要な機能であり、これについては後で説明します。

LightSwitch 開発は、何度も修正を繰り返しやすいよう設計されています。Debug Mode (デバッグ モード) での実行中にリボンの [Design Screen] (デザイン画面) ボタンをクリックすると、実行時に画面を編集できます。このボタンをクリックすると、画面の Customization Mode (カスタマイゼーション モード) に切り替わります (図 11 参照)。

Users Can Edit Screens at Run Time and View Their Changes Immediately
(クリックすると拡大表示されます)

図 11 実行時にユーザーが画面を編集して編集結果をすぐに確認できる機能

ユーザーは、コントロールを再配置したりプロパティを設定したりしてから [Save] (保存) をクリックすると、変更結果をすぐに確認できます。

LightSwitch アプリケーションが Silverlight アプリケーションであると知って、「XAML はどこにあるのだろう」と気になる方もいるでしょう。LightSwitch の主な目的は、アプリケーションのビルドをこれまでよりはるかに容易にすることです。そのため、デザイン時に XAML は公開されず、画面のデザインに基づいて、実行時に XAML が生成されます。このような動作により、アプリケーションのビルドが飛躍的に容易になります。しかし、Silverlight 開発の経験が豊富な方は、画面の自由な構成が制限されると感じるかもしれません。

Visual Studio LightSwitch だけを使用する場合は確かに制限されますが、Visual Studio 2010 Professional またはそれ以上のエディションに LightSwitch をインストールしている場合は、開発の柔軟性が高まります。独自の Silverlight ユーザー コントロールを作成して LightSwitch の画面に追加でき、LightSwitch には付属していないコントロールも使用できます。複合コントロールや、カスタム ロジックを含む画面全体を作成できるうえ、これらのユーザー コントロールを簡単に画面のエンティティにバインドできます。

LightSwitch アプリケーションに機能を追加するには、拡張機能も使用できます。LightSwitch の拡張機能には、コントロール、画面テンプレート、ビジネス型、シェル (アプリケーションの外観)、テーマ (シェルの色とブラシ)、およびカスタム データ ソースの 6 種類があります。LightSwitch の拡張機能を作成するには Visual Studio 2010 Professional またはそれ以上のエディションと Visual Studio 2010 SDK が必要ですが、作成した拡張機能は、インストールしている Visual Studio のエディションに関係なくすべての LightSwitch プロジェクトで使用できます。

拡張機能は VSIX パッケージ形式で配布します。拡張機能を一般公開する場合は、Visual Studio ギャラリーにアップロードできます。アップロードした拡張機能は、LightSwitch の拡張機能マネージャーに表示されます。インストール済みの拡張機能は、アプリケーション デザイナーの [Extensions] (拡張機能) タブで有効にできます。Contoso Construction サンプル アプリケーションでは、Bing Maps コントロールの拡張機能を使用して、顧客の住所を表示します (図 12 参照)。

You Can Use LightSwitch Extensions, Such as the Bing Map Control Extension, to Provide Additional Functionality in Your Applications

図 12 アプリケーションに追加機能を提供できる、Bing Maps コントロールの拡張機能などの LightSwitch の拡張機能

クエリ

すべての画面は、クエリを基盤とします。詳細画面のクエリは、1 行を返します。一覧および詳細画面のクエリは、親の 1 行と、その行に関連する子の行をすべて返します。データ検索画面と編集可能グリッド画面のクエリは、既定ですべての行を返します。多数の行を返すクエリは、同時にすべての行を返すわけではない点に注意してください。これらのクエリは、既定でページ切り替えをサポートします。ページ切り替えを構成するには、スクリーン デザイナーまたは Query Designer (クエリ デザイナー) でクエリを選択し、ページ切り替えに関するプロパティを変更します。

エンティティのコレクションを返す画面クエリから返されるデータは、フィルター処理できます。データをフィルター処理するには、スクリーン デザイナーで [Edit Query] (クエリの編集) をクリックします。表示されるクエリ デザイナーで、Where 句と Sort by 句を追加できます。また、パラメーターもクエリに追加できます。

画面クエリは、特定の画面固有です。画面のクエリは迅速かつ簡単に変更できますが、再利用可能なクエリを作成することをお勧めします。たとえば、顧客の検索画面で、顧客を企業名順に並べ替えるとします。ただし、新しい予定を作成できる画面のモーダル ウィンドウによる選択ツールや、顧客とそのプロジェクトを表示する画面のオートコンプリート機能を備えたテキスト ボックスにも顧客が表示される可能性があります。同じ Sort by 句を 3 つの画面で 3 つのクエリに追加するのではなく、1 つのクエリを作成して 3 つの画面で使用できます。

クエリを作成するには、ソリューション エクスプローラーでエンティティを右クリックし、[Add Query] (クエリの追加) をクリックします。クエリに名前を付け、フィルター処理、並べ替え、およびパラメーターを追加できます。CurrentAppointments クエリ (図 13 参照) は、開始時間が現在以降のすべての予約を、開始時間順に並べ替えて返します。

You Can Filter the Results of a Query and Specify the Sort Order

図 13 クエリ結果をフィルター処理し、並べ替え順序を指定できる機能

作成したクエリは、画面の基盤として、または他のクエリの基盤としても使用できます。たとえば、サンプル アプリケーションでは、CurrentAppointmentsByEmployee クエリは CurrentAppointments クエリを実行してから結果をフィルター処理して、特定の従業員の予約だけを返します。

アクセス制御

アクセス制御を使用すると、ユーザーがアプリケーションで実行できる操作を制御できます。LightSwitch では、標準の ASP.NET メンバーシップ プロバイダーと ASP.NET ロール プロバイダーを使用して、Windows 認証とフォーム認証のどちらも有効にできます。操作を実行するユーザーを承認するには、アクセス制御を作成してユーザーに割り当て、ユーザーが特定のアクセス許可を保持しているかどうかコードで確認します。

既定では、LightSwitch アプリケーションではすべてのユーザーがすべての操作を実行できます。この設定を変更するには、アプリケーション デザイナーを開いて [Access Control] (アクセス制御) タブをクリックします (図 14 参照)。続いて、Windows 認証またはフォーム認証を選択します。既定の SecurityAdministration アクセス許可は、ユーザーが実行時にセキュリティ管理画面を表示できるかどうかを指定します。セキュリティ管理画面は、必要に応じてユーザーにアクセス許可を割り当てたりユーザーを追加したりするために使用します。また、追加のアクセス許可も作成できます。開発中は、[Granted for debug] (デバッグ用に許可) チェック ボックスをオフにして、アクセス許可を無効にできます。このようにすると、さまざまな組み合わせのアクセス許可を使用してアプリケーションをテストできます。

Specify Windows or Forms Authentication and Then Specify Additional Permissions

図 14 Windows 認証またはフォーム認証の指定と、追加のアクセス許可の指定

コードでは、エンティティ レベル、画面レベル、およびクエリ レベルでアクセス許可を確認できます。エンティティには CanDelete メソッド、CanInsert メソッド、CanRead メソッド、および CanUpdate メソッドが用意され、すべてのメソッドがサーバー上で実行されます。これらのメソッドには、データ デザイナーで [Write Code] (コードの記述) ボタンのドロップダウン リストからアクセスできます。適切なアクセス許可の有無を確認し、関連付けられた操作がユーザーに許可されていない場合は false を返すことができます。たとえば、サンプル アプリケーションでは、管理者だけが従業員のデータを変更できます。このアクセス許可は、次のコードで確認します。

Private Sub Employees_CanDelete(ByRef result As Boolean)
  result = Me.Application.User.HasPermission(
    Permissions.SecurityAdministration)
End Sub
Private Sub Employees_CanInsert(ByRef result As Boolean)
  result = Me.Application.User.HasPermission(
    Permissions.SecurityAdministration)
End Sub
Private Sub Employees_CanUpdate(ByRef result As Boolean)
  result = Me.Application.User.HasPermission(
    Permissions.SecurityAdministration)
End Sub

画面には CanRun メソッドが用意され、このメソッドはクライアント上で実行されます。このメソッドを使用すると、ユーザーが画面のデータを表示または変更できない場合は、画面が表示されないようにできます。次のコードは、管理者だけが ManageEmployees 画面を表示できるようにします。

Private Sub ManageEmployees_CanRun(ByRef result As Boolean)
  result = Me.User.HasPermission(Permissions.SecurityAdministration)
End Sub

配置プロセスでは、開発者は管理者のユーザー名とパスワードを指定します。実行時に、管理者がロールを作成してユーザーに割り当ててから、アクセス許可をロールに割り当てます。

配置

LightSwitch には、2 層デスクトップ アプリケーション、3 層デスクトップ アプリケーション、および 3 層 Web アプリケーションという、3 つのアプリケーション配置モデルがあります。

2 層デスクトップ アプリケーションは、Silverlight のブラウザー外実行アプリケーションとして、完全にエンド ユーザーのコンピューター上で実行されます。UI とアプリケーションのすべての中間層コンポーネントがローカルで実行されます。アプリケーションは、通常のクライアント/サーバー方式でデータベースに直接接続します。
このモデルでは、Web サーバーが必要ありません。また、アプリケーションは、COM やローカル ファイルなどのローカル リソースにアクセスできます。COM のサポートにより、Word や Excel などのアプリケーションを制御できます。ただし、デスクトップ アプリケーションには Windows が必要です。

3 層デスクトップ アプリケーションは、IIS または Windows Azure でホストされた、Silverlight のブラウザー外実行アプリケーションとして実行されます。UI はエンド ユーザーのコンピューターで実行され、中間層コンポーネントはホスト サーバーで実行されます。

3 層 Web アプリケーションは、IIS または Windows Azure でホストされた、Silverlight のブラウザー内実行アプリケーションとして実行されます。UI はブラウザー ベースで、中間層コンポーネントはホスト サーバーで実行されます。Web アプリケーションは、COM やローカル リソースにアクセスできませんが、Mac や Windows OS と複数のブラウザーを組み合わせた、最も幅広いプラットフォームに対応しています。

アプリケーションを配置するには、まずそのアプリケーションを発行します。アプリケーションを発行するには、アプリケーション デザイナーの [Application Type] (アプリケーションの種類) タブで、[Publish] (発行) ボタンをクリックします (図 15 参照)。

Specify Whether the Application Is a Two-Tier Desktop Application, Three-Tier Desktop  Application or Three-Tier Web Application

図 15 アプリケーションが 2 層デスクトップ アプリケーション、3 層デスクトップ アプリケーション、または 3 層 Web アプリケーションのいずれであるかの指定

ボタンをクリックしたら、LightSwitch Publish Application Wizard (LightSwitch アプリケーションの発行ウィザード) の指示に従って、発行プロセスを実行します。

アプリケーションを 2 層デスクトップ アプリケーションとして発行する場合は、ClickOnce パッケージを作成します。この場合、作成したローカル テーブルとシステム テーブルが含まれた、SQL Server データベースを作成します。また、このデータベースの格納先も指定できます。アプリケーションを 1 人のユーザーが使用するときは、そのユーザーのコンピューターにデータベースを格納し、SQL Server Express を使用できます。アプリケーションを複数のユーザーが使用するときは、おそらく、SQL Server を実行するネットワーク コンピューターにデータベースを格納します。

アプリケーションを IIS でホストされた 3 層デスクトップ アプリケーションまたは Web アプリケーションとして発行する場合、サーバーで Microsoft Web 配置ツール サービスを実行しているときは IIS に直接発行できます。このサービスを実行していないときは、MSDeploy パッケージを作成し、手動で IIS にインポートできます。アプリケーションを Windows Azure に発行する場合、ウィザードでは、アカウントのサブスクリプション ID、使用するサービスとストレージのアカウント、および使用する SSL 証明書の入力が求められます。Windows Azure への配置と発行の詳細については、MSDN の LightSwitch デベロッパー センターで配置に関するセクション (msdn.microsoft.com/ja-jp/lightswitch/gg697766) を参照してください。

最も簡単な方法

まとめると、LightSwitch の主な対象者は、エンド ユーザー開発者です。エンド ユーザー開発者とは、ビジネス機能をサポートするアプリケーションをビルドするユーザーです。エンド ユーザー開発者はプロフェッショナルの開発者ではなく、IT プロフェッショナル、インフォメーション ワーカーなど、業務の一環として開発作業に携わるユーザーです。エンド ユーザー開発者は、部門のコンピューター資産や保有車両などの "品物" を管理するアプリケーションをビルドする必要に迫られることがよくあります。また、3 か月ごとに一般公開するといった、行事を管理するアプリケーションが必要になることもあります。

LightSwitch は、このようなユーザーが開発をスムーズに始める手段を提供します。データの操作、画面の生成、Excel へのデータのエクスポートなど、アプリケーションに共通する処理を実行する厄介な機能の組み立ては自動的にビルドされます。また、簡単で柔軟な配置モデルも用意されています。

LightSwitch は、デスクトップやクラウド向けのデータ アプリケーションをビルドする最も簡単な方法です。世界中の Dalia のようなユーザーは、必要なアプリケーションを自分で作成してから、Antonio のような開発者にそのアプリケーションを渡して、拡張し、配置してもらうことができます。LightSwitch でアプリケーションをビルドする方法の詳細については、MSDN の LightSwitch デベロッパー センター (msdn.com/lightswitch) を参照してください。

Robert Green は、マイクロソフトの開発者およびプラットフォーム エバンジェリズム グループに所属するテクニカル エバンジェリストです。彼がマイクロソフトに勤務するのはこれが 2 回目です。2005 年から 2010 年までは、開発者トレーニングを専門とするシニア コンサルタントとして MCW Technologies に勤務していました。また、AppDev (appdev.com、英語) の Visual Studio と .NET に関する多数のコースの作成者および共同作成者でもあります。以前にマイクロソフトで初めて勤務したときは、開発者ツールのマーケティングを担当し、その後Visual Basic チームのコミュニティ リードを務めました。

この記事のレビューに協力してくれた技術スタッフの Beth Massi に心より感謝いたします。