• LightSwitchの裏側を探る 4:スクリーンの追加

    さて、とうとうデータ側の準備がととのったので、とうとう画面を追加してみます。
    といっても、Add Screenから Editable Grid Screen を選択してScreen Dataとして会員テーブルSetを設定するだけ。
    スクリーン選択

    まぁ、これだけだとちょっとさびしいので、Screenの操作画面から画面名を「会員一覧」に変更します。
    画面名変更  

    しかし、この画面がUIの設定画面なんですよねぇ。
    部品の単位で操作していくので、慣れれば操作はできますが、、、これでUIイメージしろっていっても。。。

    ま、でもとりあえずこれだけで動きます。
    実行させるとこんな感じ。
    起動時

    操作用の「追加、編集、削除」とかが日本語になってますね。「Excelにエクスポート」とかも。
    このままでデータの追加とかも可能です。
    データ追加

    あとはデータ溜め込んで、検索かけて、と利用していけばいい、ということになります。

    Screenを追加して、ソースのほうはどう変わったか、というとServerGenerated\GeneratedArtifactsフォルダにサーバ上のエンティティのクラスやドメインサービスのソースが生成されます。
    また、ClientGenerated\GeneratedArtifactsフォルダにはクライアント側のデータコンテキスト、そしてClient\GeneratedArtifactsフォルダにはスクリーンの呼び出しコードとしてScreen.csが作成されています。

    いままでの操作全体を含めて、とにかくGeneratedArtifacts、という名前のフォルダにソースがどんどん生成されていきますね。

    ただ、Screen.csみてもXAMLやXAMLに相当する画面を生成するコードが書いてあるわけじゃありません。
    ここではやっぱりLightSwitch用のクラスを使って画面を生成する枠を作っているだけみたいで、どうもその中の設定、つまりUIの設定画面で操作している部分も全部 ApplicationDefinition.lsml に含まれているみたいです。

    この状態だと、直接ソースをいじって画面の表示を修正する、なんてことは簡単にはできなさそうです。
    独自のUIコントロールを追加して利用するための方法はドキュメントやツールキットでも紹介されていますから、その基本通りに用意されている口を通して拡張するしかない、というのが現時点での認識だったりします。

    投稿日時 31-08-2010 01:03 投稿者 ono | コメント数:0
    カテゴリ: ,
  • LightSwitchの裏側を探る 3:ビルドの実行と選択リスト、計算項目の追加

    前の記事でデータベース内にテーブルがどのタイミングで追加されるのかがわからない、と書きましたが、実はビルドすれば追加される、ということがわかりました。
    前の記事の直後にビルドを実行すると、下記のように「会員テーブルSet」という名前のテーブルが追加されます。
    テーブルの追加

    そしてこのとき、Bin\Dataフォルダに存在していたSchemaChange.xmlファイルが消えます。
    どうも、IDE上で行ったスキーマ変更の情報が一旦SchemaChange.xmlに書き込まれ、ビルド時に実際のデータベースを変更するとこのSchemaChange.xmlファイルが消える、という動きになっているようです。
    こんなことがわかったのはあるいみケガの功名かも。

    さて、次に作成したテーブルのなかで、「性別」項目を男性/女性が選べるように設定してみます。
    「性別」の項目を選び、プロパティからChoice Listリンクをクリックします。
    選択リストの作成   

    選択リストを設定するダイアログが表示されるので、ここで以下のように登録します。
    選択リスト設定

    これだけでOKなんですが、この「男性/女性」といった情報はどこに保存されるか、というと、、、
    Dataフォルダの ApplicationDefinition.lsml 内に格納されます。
    「性別」に関する情報部分が以下のようになっていました。

    ----------------------------------------------------------------------------------------------------------

    <EntityProperty Name="性別" PropertyType="Microsoft.LightSwitch:Int32">
        <EntityProperty.Attributes>
            <Required />
            <NotSearchable />
            <SupportedValue DisplayName="男性" Value="1" />
            <SupportedValue DisplayName="女性" Value="2" />
        </EntityProperty.Attributes>
    </EntityProperty>

    ----------------------------------------------------------------------------------------------------------

    テキストエディタでフォルダ内のファイルに対して全検索かけてみましたけど、このフォルダにしか「男性/女性」の文字はありません。
    結構、このApplicationDefinition.lsmlファイル、重要っぽいです。

     

    さて、次に行ったのは、計算によって値を表示するデータ項目の追加。
    誕生日から計算して年齢を表示する項目を追加してみます。
    年齢を計算項目として追加

    テーブルに「年齢」項目を追加し、プロパティで Is Computed にチェックを入れて Edit Method リンクをクリックします。
    IDE内にソースコードを記述する画面が表示されるので、以下のようにプログラムを追記しました。
    計算ロジック

    会員テーブルクラスの Partial なソースとしてプログラムを記述することになります。
    こうなってくると、「会員テーブル」という名前をつけたのが間違いだったかなぁ。
    「会員」としておくとテーブル名も「会員Set」となり、またクラスも「会員クラス」だったわけで。。。
    どうもレコード1つにたいしての名前をつけたほうが良かったようですね。
    まぁ、いまさらしょうがないので、このまま続けます。

    さて、このプログラムを保存すると、Commonフォルダ内に UserCode という名前のフォルダが作成され、そこに上記の「会員テーブル.cs」ファイルが追加されました。
    どうもこの「UserCode」フォルダが開発者が追記したプログラムの置き場所になりそうです。

    さて、データ構造を触るのはここまでにして、次回は画面を追加してみようと思います。
    そのまえにここまでで他に追加されてるプログラムがありました。

    Common\GeneratedArtifacts の下のDataRuntime.csとServer\GeneratedArtifacts の下のDataService.cs の内容が生成されています。
    データを取り出す部分のコードや取得/設定時のパーシャルメソッドの定義が行われているようです。
    LightSwitch用のdll内の定義クラスが使われているため、どうにもソースが読みにくかったりするのですが。。。

    投稿日時 30-08-2010 09:15 投稿者 ono | コメント数:0
    カテゴリ: ,
  • LightSwitchの裏側を探る 2:テーブルスキーマの作成

    LightSwitchでは、まずデータの定義をすることになりますが、その前にアプリケーション全体のプロパティの設定を確認しました。

    Cultureの設定の標準は英語(米国)になっていたので、Japaneseにします。
    Cultureの設定

    また、アプリケーションのタイプのデフォルトが2-tierだったので、3-tierにしました。
    3-tierの設定

    このように設定を変更したうえで、テーブル定義を日本語を使って行ってみました。
    テーブル追加

    定義した内容はとりあえずこの画面で見えてるとおり。
    まだプロパティを使って何か設定とかはしていない状態です。

    このような設定をしたところ、アプリケーションのルートフォルダ直下のBin\Dataフォルダに「SchemaChange.xml」ファイルが作成されました。
    このファイルの内容は以下のようになっていました。

    ----------------------------------------------------------------------------------------------------------

    <?xml version="1.0" encoding="utf-8"?>
    <ApplicationSchemaChange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <EntityChanges>
        <EntitySchemaChange IsNew="true" OriginalName="会員テーブルSet">
          <PropertyChanges />
        </EntitySchemaChange>
      </EntityChanges>
    </ApplicationSchemaChange>

    ----------------------------------------------------------------------------------------------------------

    また、アプリケーションのルートフォルダ直下のDataフォルダ内のApplicationDefinition.lsmlの内容が次のように書き換えられました。

    ----------------------------------------------------------------------------------------------------------

    <?xml version="1.0" encoding="utf-8" ?>
    <ModelFragment xmlns="http://schemas.microsoft.com/LightSwitch/2010/xaml/model"
                   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <Application Name="Application1"
                             Version="1.0.0.0"
                             DefaultNavigationItem="Application1:/NavigationItems[Tasks]"
                             Shell="Microsoft.LightSwitch:Standard"
                             Theme="Microsoft.LightSwitch:Blue">
        <Application.NavigationItems>
          <ApplicationNavigationGroup Name="Tasks">
            <ApplicationNavigationGroup.Attributes>
              <DisplayName Value="Tasks" />
            </ApplicationNavigationGroup.Attributes>
          </ApplicationNavigationGroup>
          <ApplicationNavigationGroup Name="Administration">
            <ApplicationNavigationGroup.Attributes>
              <DisplayName Value="Administration" />
            </ApplicationNavigationGroup.Attributes>
            <ApplicationNavigationLink Command="Microsoft.LightSwitch.Security:/Commands[ScreenCommandShowUsersScreen]"
                                       Name="UsersScreen" />
            <ApplicationNavigationLink Command="Microsoft.LightSwitch.Security:/Commands[ScreenCommandShowRolesScreen]"
                                       Name="RolesScreen" />
          </ApplicationNavigationGroup>
        </Application.NavigationItems>
        <Application.References>
          <ModuleReference Module="Microsoft.LightSwitch.Security" />
                <ModuleReference Module="Microsoft.LightSwitch.Extensions" />
            </Application.References>
      </Application>

      <EntityContainerGroup Name="DataWorkspace">
        <EntityContainerGroupProperty EntityContainer="Microsoft.LightSwitch.Security:SecurityDataService"
                                 Name="SecurityDataService">
          <EntityContainerGroupProperty.Attributes>
            <Generated />
            <DisplayName Value="Security Data Service" />
            <Description Value="Service that provides access to security-related data." />
          </EntityContainerGroupProperty.Attributes>
        </EntityContainerGroupProperty>
            <EntityContainerGroupProperty EntityContainer="Application1:ApplicationData"
                                          Name="ApplicationData" />
        </EntityContainerGroup>
        <EntityContainer IsIntrinsic="True"
                         Name="ApplicationData">
            <SubmitOperation Name="SaveChanges" />
            <EntitySet CanDelete="True"
                       CanInsert="True"
                       CanUpdate="True"
                       EntityType="Application1:会員テーブル"
                       Name="会員テーブルSet" />
            <QueryOperation Name="会員テーブルSet_Single"
                            ReturnType="Application1:会員テーブル">
                <QueryOperation.Attributes>
                    <Generated />
                    <Description Value="Returns the entity whose identity is specified by the parameter(s)." />
                </QueryOperation.Attributes>
                <QueryOperation.FilterExpression>
                    <QueryFilterExpressionTree>
                        <BinaryExpression NodeType="Equal">
                            <BinaryExpression.Left>
                                <ChainExpression NodeType="Chain">
                                    <MemberExpression Member="Application1:会員テーブル/Properties[Id]"
                                                      NodeType="MemberAccess" />
                                </ChainExpression>
                            </BinaryExpression.Left>
                            <BinaryExpression.Right>
                                <ParameterExpression NodeType="Parameter"
                                                     Parameter="Application1:ApplicationData/Members[会員テーブルSet_Single]/Parameters[Id]" />
                            </BinaryExpression.Right>
                        </BinaryExpression>
                    </QueryFilterExpressionTree>
                </QueryOperation.FilterExpression>
                <QueryOperation.Source>
                    <QuerySourceExpressionTree>
                        <MemberExpression Member="Application1:ApplicationData/Members[会員テーブルSet]"
                                          NodeType="MemberAccess" />
                    </QuerySourceExpressionTree>
                </QueryOperation.Source>
                <QueryOperationParameter Name="Id"
                                         ParameterType="Microsoft.LightSwitch:Int32?">
                    <QueryOperationParameter.Attributes>
                        <Description Value="The value of the 'Id' key property of the entity to retrieve." />
                    </QueryOperationParameter.Attributes>
                </QueryOperationParameter>
            </QueryOperation>
            <QueryOperation Name="会員テーブルSet_SingleOrDefault"
                            ReturnType="Application1:会員テーブル">
                <QueryOperation.Attributes>
                    <Generated />
                    <Description Value="Returns the entity whose identity is specified by the parameter(s) or null if no such entity exists." />
                </QueryOperation.Attributes>
                <QueryOperation.FilterExpression>
                    <QueryFilterExpressionTree>
                        <BinaryExpression NodeType="Equal">
                            <BinaryExpression.Left>
                                <ChainExpression NodeType="Chain">
                                    <MemberExpression Member="Application1:会員テーブル/Properties[Id]"
                                                      NodeType="MemberAccess" />
                                </ChainExpression>
                            </BinaryExpression.Left>
                            <BinaryExpression.Right>
                                <ParameterExpression NodeType="Parameter"
                                                     Parameter="Application1:ApplicationData/Members[会員テーブルSet_SingleOrDefault]/Parameters[Id]" />
                            </BinaryExpression.Right>
                        </BinaryExpression>
                    </QueryFilterExpressionTree>
                </QueryOperation.FilterExpression>
                <QueryOperation.Source>
                    <QuerySourceExpressionTree>
                        <MemberExpression Member="Application1:ApplicationData/Members[会員テーブルSet]"
                                          NodeType="MemberAccess" />
                    </QuerySourceExpressionTree>
                </QueryOperation.Source>
                <QueryOperationParameter Name="Id"
                                         ParameterType="Microsoft.LightSwitch:Int32?">
                    <QueryOperationParameter.Attributes>
                        <Description Value="The value of the 'Id' key property of the entity to retrieve." />
                    </QueryOperationParameter.Attributes>
                </QueryOperationParameter>
            </QueryOperation>
            <QueryOperation Name="会員テーブルSet_All"
                            ReturnType="Application1:会員テーブル*">
                <QueryOperation.Attributes>
                    <Generated />
                    <Description Value="Returns all entities contained in the entity set." />
                </QueryOperation.Attributes>
                <QueryOperation.Source>
                    <QuerySourceExpressionTree>
                        <MemberExpression Member="Application1:ApplicationData/Members[会員テーブルSet]"
                                          NodeType="MemberAccess" />
                    </QuerySourceExpressionTree>
                </QueryOperation.Source>
            </QueryOperation>
        </EntityContainer>
        <DataService DataProvider="EntityFrameworkDataProvider"
                     EntityContainer="Application1:ApplicationData"
                     Name="ApplicationDataMapping" />
        <EntityType Name="会員テーブル">
            <EntityType.Methods>
                <EntityMethod Name="Delete">
                    <EntityMethod.Attributes>
                        <Generated />
                    </EntityMethod.Attributes>
                </EntityMethod>
            </EntityType.Methods>
            <EntityType.Properties>
                <KeyProperty Name="Id"
                             PropertyType="Microsoft.LightSwitch:Int32">
                    <KeyProperty.Attributes>
                        <Required />
                        <NotSearchable />
                    </KeyProperty.Attributes>
                </KeyProperty>
                <EntityProperty Name="会員名"
                                PropertyType="Microsoft.LightSwitch:String?">
                    <EntityProperty.Attributes>
                        <MaxLength Value="255" />
                    </EntityProperty.Attributes>
                </EntityProperty>
                <EntityProperty Name="メールアドレス"
                                PropertyType="Microsoft.LightSwitch.Extensions:EmailAddress">
                    <EntityProperty.Attributes>
                        <Required />
                        <MaxLength Value="255" />
                        <EmailAddressValidation DomainRequired="True" />
                    </EntityProperty.Attributes>
                </EntityProperty>
                <EntityProperty Name="性別"
                                PropertyType="Microsoft.LightSwitch:Int32">
                    <EntityProperty.Attributes>
                        <Required />
                        <NotSearchable />
                    </EntityProperty.Attributes>
                </EntityProperty>
                <EntityProperty Name="誕生日"
                                PropertyType="Microsoft.LightSwitch:Date">
                    <EntityProperty.Attributes>
                        <Required />
                        <NotSearchable />
                        <Range Maximum="12/31/9999"
                               Minimum="01/01/1753" />
                    </EntityProperty.Attributes>
                </EntityProperty>
            </EntityType.Properties>
        </EntityType>
    </ModelFragment>

    ----------------------------------------------------------------------------------------------------------

    どうやら画面上から定義した内容は、このApplicationDefinition.lsmlファイルに展開されるようですね。

    ちなみに、この状態でBin\Data\Tempに存在しているApplicationDatabase.mdf(データベースファイル)の中をみると、ASP.NETで使っているようなメンバーシップのためのテーブルやビュー、ストアドプロシージャーは存在していますが、定義した会員テーブルは存在していません。
    データベース内テーブル

    テーブルがどのタイミングで追加されるのか、気になりますが、とりあえずはここまで。

    投稿日時 28-08-2010 05:05 投稿者 ono | コメント数:0
    カテゴリ: ,
  • LightSwitchの裏側を探る 1:ソリューション作成時の状態を調べる

      TechEd 2010 JapanのキーノートでもLightSwitchは割と大きく取り上げられました。

    で、普通だとLightSwitchをどのように操作して使っていくのか、という紹介をはじめるところなんでしょうけど、このBlogではちょっと違った方向からいろいろ探っていってみたいと思います。

    まず、LightSwitchのプロジェクトを作ってみます。
    プロジェクト作成時の画面

    ソリューションエクスプローラには3つの項目だけが表示されています。
    ソリューションエクスプローラのデフォルト表示

    実は、メニューからロジカルビューとファイルビューの選択ができるので、ファイルビューを選択してみます。
    ファイルビューの選択

    そうすると、Client/Server/Commonというプロジェクトが作成されていることがわかります。
    ファイルビューの初期表示

    ここで、すべてのファイルの表示をクリックすると、ClientGenerated/ServerGeneratedというプロジェクトも作成されていることがわかります。
    すべてのファイルの表示

    実際に生成されているファイルの数は619にもおよびます。
    コマンドラインからTree /Fを使ってファイル名を取得すると以下のようになります。
    すでに日本を含む各国用のリソースが作成されていることもわかりますね。
    LightSwitchのソリューションの読込みやコンパイル/起動には結構時間がかかりますが、これだけファイルがあったら時間がかかって当たり前のような気もします。

    システムルートフォルダー
    │  Application1.sln
    │ 
    └─Application1
        │  app.config
        │  Application1.lsproj
        │  Application1.lsproj.user
        │  default.htm
        │  Silverlight.js
        │ 
        ├─Bin
        │  ├─Data
        │  │  └─Temp
        │  │          ApplicationDatabase.mdf
        │  │          ApplicationDatabase_log.LDF
        │  │         
        │  └─Debug
        │      │  ClientAccessPolicy.xml
        │      │  default.htm
        │      │  Microsoft.LightSwitch.Design.svc
        │      │  Silverlight.js
        │      │  VslsHost.exe
        │      │  web.config
        │      │ 
        │      ├─bin
        │      │      Microsoft.LightSwitch.Design.Server.Internal.dll
        │      │     
        │      ├─Data
        │      └─Web
        │          └─Manifests
        │                  Microsoft.LightSwitch.Design.Server.Manifest.dll
        │                  Microsoft.LightSwitch.Server.Manifest.dll
        │                 
        ├─Client
        │  │  ApplicationDefinitionLoader.cs
        │  │  Client.csproj
        │  │  Client.csproj.user
        │  │  Config.xml
        │  │ 
        │  ├─Bin
        │  │  └─Debug
        │  ├─DataLogic
        │  ├─DataSources
        │  ├─GeneratedArtifacts
        │  │      Application.cs
        │  │      Screen.cs
        │  │     
        │  ├─obj
        │  │  └─Debug
        │  │      │  DesignTimeResolveAssemblyReferencesInput.cache
        │  │      │ 
        │  │      └─TempPE
        │  ├─Properties
        │  │      AppManifest.xml
        │  │      AssemblyInfo.cs
        │  │     
        │  └─Screens
        ├─ClientGenerated
        │  │  ApplicationDefinitionLoader.cs
        │  │  ClientGenerated.csproj
        │  │  ClientGenerated.csproj.user
        │  │  Config.xml
        │  │ 
        │  ├─Bin
        │  │  └─Debug
        │  │      │  Application1.Client.xap
        │  │      │  Microsoft.LightSwitch.Base.Client.dll
        │  │      │  Microsoft.LightSwitch.Client.dll
        │  │      │  Microsoft.LightSwitch.Client.Internal.dll
        │  │      │  Microsoft.LightSwitch.CodeMarker.dll
        │  │      │  Microsoft.LightSwitch.DebugOptions.Client.Internal.dll
        │  │      │  Microsoft.LightSwitch.dll
        │  │      │  Microsoft.LightSwitch.ExportProvider.dll
        │  │      │  Microsoft.LightSwitch.ManifestService.Client.dll
        │  │      │  Microsoft.LightSwitch.Model.Xaml.Client.dll
        │  │      │  System.ComponentModel.Composition.dll
        │  │      │  System.ComponentModel.DataAnnotations.dll
        │  │      │  System.ServiceModel.DomainServices.Client.dll
        │  │      │  System.ServiceModel.DomainServices.Client.Web.dll
        │  │      │  System.ServiceModel.Extensions.dll
        │  │      │  System.ServiceModel.PollingDuplex.dll
        │  │      │  System.ServiceModel.Web.Extensions.dll
        │  │      │  System.Windows.Controls.Data.dll
        │  │      │  System.Windows.Controls.Data.Input.dll
        │  │      │  System.Windows.Controls.dll
        │  │      │  System.Windows.Controls.DomainServices.dll
        │  │      │  System.Windows.Controls.Input.dll
        │  │      │  System.Windows.Controls.Navigation.dll
        │  │      │  System.Windows.Data.dll
        │  │      │  System.Xml.Linq.dll
        │  │      │  XapCache.tmp
        │  │      │ 
        │  │      ├─ar
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─bg
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─ca
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─cs
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─da
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─de
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.ServiceModel.Extensions.resources.dll
        │  │      │      System.ServiceModel.PollingDuplex.resources.dll
        │  │      │      System.ServiceModel.Web.Extensions.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.Navigation.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │      System.Windows.Data.resources.dll
        │  │      │      System.Xml.Linq.resources.dll
        │  │      │     
        │  │      ├─el
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─es
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.ServiceModel.Extensions.resources.dll
        │  │      │      System.ServiceModel.PollingDuplex.resources.dll
        │  │      │      System.ServiceModel.Web.Extensions.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.Navigation.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │      System.Windows.Data.resources.dll
        │  │      │      System.Xml.Linq.resources.dll
        │  │      │     
        │  │      ├─et
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─eu
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─fi
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─fr
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.ServiceModel.Extensions.resources.dll
        │  │      │      System.ServiceModel.PollingDuplex.resources.dll
        │  │      │      System.ServiceModel.Web.Extensions.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.Navigation.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │      System.Windows.Data.resources.dll
        │  │      │      System.Xml.Linq.resources.dll
        │  │      │     
        │  │      ├─he
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─hr
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─hu
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─id
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─it
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.ServiceModel.Extensions.resources.dll
        │  │      │      System.ServiceModel.PollingDuplex.resources.dll
        │  │      │      System.ServiceModel.Web.Extensions.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.Navigation.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │      System.Windows.Data.resources.dll
        │  │      │      System.Xml.Linq.resources.dll
        │  │      │     
        │  │      ├─ja
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.ServiceModel.Extensions.resources.dll
        │  │      │      System.ServiceModel.PollingDuplex.resources.dll
        │  │      │      System.ServiceModel.Web.Extensions.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.Navigation.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │      System.Windows.Data.resources.dll
        │  │      │      System.Xml.Linq.resources.dll
        │  │      │     
        │  │      ├─ko
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.ServiceModel.Extensions.resources.dll
        │  │      │      System.ServiceModel.PollingDuplex.resources.dll
        │  │      │      System.ServiceModel.Web.Extensions.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.Navigation.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │      System.Windows.Data.resources.dll
        │  │      │      System.Xml.Linq.resources.dll
        │  │      │     
        │  │      ├─lt
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─lv
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─ms
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─nl
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─no
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─pl
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─pt
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─pt-BR
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─ro
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─ru
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.ServiceModel.Extensions.resources.dll
        │  │      │      System.ServiceModel.PollingDuplex.resources.dll
        │  │      │      System.ServiceModel.Web.Extensions.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.Navigation.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │      System.Windows.Data.resources.dll
        │  │      │      System.Xml.Linq.resources.dll
        │  │      │     
        │  │      ├─sk
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─sl
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─sr-Cyrl-CS
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─sr-Latn-CS
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─sv
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─th
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─tr
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─uk
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─vi
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │     
        │  │      ├─zh-Hans
        │  │      │      Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │      │      Microsoft.LightSwitch.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │      │      Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │      │      Microsoft.LightSwitch.resources.dll
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │      System.ComponentModel.DataAnnotations.resources.dll
        │  │      │      System.ServiceModel.Extensions.resources.dll
        │  │      │      System.ServiceModel.PollingDuplex.resources.dll
        │  │      │      System.ServiceModel.Web.Extensions.resources.dll
        │  │      │      System.Windows.Controls.Data.Input.resources.dll
        │  │      │      System.Windows.Controls.Data.resources.dll
        │  │      │      System.Windows.Controls.Input.resources.dll
        │  │      │      System.Windows.Controls.Navigation.resources.dll
        │  │      │      System.Windows.Controls.resources.dll
        │  │      │      System.Windows.Data.resources.dll
        │  │      │      System.Xml.Linq.resources.dll
        │  │      │     
        │  │      └─zh-Hant
        │  │              Microsoft.LightSwitch.Client.Internal.resources.dll
        │  │              Microsoft.LightSwitch.Client.resources.dll
        │  │              Microsoft.LightSwitch.ExportProvider.resources.dll
        │  │              Microsoft.LightSwitch.ManifestService.Client.resources.dll
        │  │              Microsoft.LightSwitch.Model.Xaml.Client.resources.dll
        │  │              Microsoft.LightSwitch.resources.dll
        │  │              System.ComponentModel.Composition.resources.dll
        │  │              System.ComponentModel.DataAnnotations.resources.dll
        │  │              System.ServiceModel.Extensions.resources.dll
        │  │              System.ServiceModel.PollingDuplex.resources.dll
        │  │              System.ServiceModel.Web.Extensions.resources.dll
        │  │              System.Windows.Controls.Data.Input.resources.dll
        │  │              System.Windows.Controls.Data.resources.dll
        │  │              System.Windows.Controls.Input.resources.dll
        │  │              System.Windows.Controls.Navigation.resources.dll
        │  │              System.Windows.Controls.resources.dll
        │  │              System.Windows.Data.resources.dll
        │  │              System.Xml.Linq.resources.dll
        │  │             
        │  ├─DataLogic
        │  ├─DataSources
        │  ├─GeneratedArtifacts
        │  │      Application.cs
        │  │     
        │  ├─obj
        │  │  └─Debug
        │  │      │  DesignTimeResolveAssemblyReferencesInput.cache
        │  │      │  ResolveAssemblyReference.cache
        │  │      │ 
        │  │      └─TempPE
        │  ├─Properties
        │  │      AppManifest.xml
        │  │      AssemblyInfo.cs
        │  │      OutOfBrowserSettings.xml
        │  │     
        │  └─Screens
        ├─Common
        │  │  Common.csproj
        │  │  Common.csproj.user
        │  │ 
        │  ├─Bin
        │  │  └─Debug
        │  │      │  Application1.Common.dll
        │  │      │  Application1.Common.pdb
        │  │      │  System.ComponentModel.Composition.dll
        │  │      │  System.ComponentModel.Composition.xml
        │  │      │ 
        │  │      ├─de
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │     
        │  │      ├─es
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │     
        │  │      ├─fr
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │     
        │  │      ├─it
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │     
        │  │      ├─ja
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │     
        │  │      ├─ko
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │     
        │  │      ├─ru
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │     
        │  │      ├─zh-Hans
        │  │      │      System.ComponentModel.Composition.resources.dll
        │  │      │     
        │  │      └─zh-Hant
        │  │              System.ComponentModel.Composition.resources.dll
        │  │             
        │  ├─GeneratedArtifacts
        │  │      Application.cs
        │  │      DataRuntime.cs
        │  │      Permissions.cs
        │  │     
        │  ├─obj
        │  │  └─Debug
        │  │      │  Application1.Common.dll
        │  │      │  Application1.Common.pdb
        │  │      │  Common.csproj.FileListAbsolute.txt
        │  │      │  DesignTimeResolveAssemblyReferencesInput.cache
        │  │      │  ResolveAssemblyReference.cache
        │  │      │ 
        │  │      └─TempPE
        │  └─Properties
        │          AssemblyInfo.cs
        │         
        ├─Data
        │      ApplicationDefinition.lsml
        │     
        ├─Server
        │  │  Server.csproj
        │  │ 
        │  ├─bin
        │  │  └─Debug
        │  ├─DataLogic
        │  ├─DataSources
        │  ├─GeneratedArtifacts
        │  │      Application.cs
        │  │      DataService.cs
        │  │     
        │  ├─obj
        │  │  └─Debug
        │  │      │  DesignTimeResolveAssemblyReferencesInput.cache
        │  │      │ 
        │  │      └─TempPE
        │  └─Properties
        │          AssemblyInfo.cs
        │         
        ├─ServerGenerated
        │  │  ApplicationDefinitionLoader.cs
        │  │  Default.aspx
        │  │  Default.aspx.cs
        │  │  Default.aspx.designer.cs
        │  │  ServerGenerated.csproj
        │  │  ServerGenerated.csproj.user
        │  │  Web.config
        │  │  Web.Debug.config
        │  │  Web.Release.config
        │  │ 
        │  ├─bin
        │  │  └─Debug
        │  ├─DataLogic
        │  ├─DataSources
        │  ├─GeneratedArtifacts
        │  │      Application.cs
        │  │     
        │  ├─obj
        │  │  └─Debug
        │  │      │  DesignTimeResolveAssemblyReferencesInput.cache
        │  │      │  ResolveAssemblyReference.cache
        │  │      │ 
        │  │      └─TempPE
        │  └─Properties
        │          AssemblyInfo.cs
        │         
        └─_Pvt_Extensions
            └─Microsoft.LightSwitch.Extensions
                │  LsPkgLastWriteTime.txt
                │ 
                ├─Client
                │  ├─DebugOnlyRef
                │  │      Microsoft.LightSwitch.Extensions.Design.Client.dll
                │  │     
                │  └─Reference
                │          Microsoft.LightSwitch.Extensions.dll
                │         
                ├─ClientGen
                │  ├─Reference
                │  │      Microsoft.LightSwitch.Extensions.Client.dll
                │  │     
                │  └─StorageRef
                │          Microsoft.LightSwitch.Extensions.Client.dll
                │         
                ├─IDE
                │  ├─Reference
                │  │      Microsoft.LightSwitch.Extensions.Design.dll
                │  │     
                │  └─StorageRef
                │          Microsoft.LightSwitch.Extensions.Design.dll
                │         
                ├─Server
                │  └─Reference
                │          Microsoft.LightSwitch.Extensions.dll
                │         
                └─ServerGen
                    ├─Reference
                    │      Microsoft.LightSwitch.Extensions.Server.dll
                    │     
                    └─StorageRef
                            Microsoft.LightSwitch.Extensions.Server.dll

    投稿日時 28-08-2010 03:22 投稿者 ono | コメント数:1
    カテゴリ: , ,
  • ライトスイッチ、つけっぱなしです

    ということで続報。

    LightSwitch Developer Center

    ベータ1が公開されました。
    上記URLからベータ1のダウンロード、How Do I ビデオの閲覧、チュートリアルの閲覧、トレーニングキットのダウンロードなどができます。

    Blogでもいろいろと。

    LightSwitch Beta1 Now Available, Building Your First App
    概要とちょっとしたアプリ作成のステップ バイ ステップ

    Authentication Features in Visual Studio LightSwitch
    認証に関する情報

    Data Storage in Visual Studio LightSwitch
    データベース接続に関する情報

    Logical View vs File View in Solution Explorer
    小ネタ - Solution Explorerでファイルベースでの表示ができる

    そして、LightSwitchのtwitterアカウントなんてのもありました
    http://twitter.com/VSLightSwitch

    さてさて、みるものいっぱいだぞ、っと。

    投稿日時 24-08-2010 01:34 投稿者 ono | コメント数:0
    カテゴリ: , ,
  • ライトスイッチ、ついてますか?

    VisualStudio LightSwitch

    23日にベータ公開予定なんで、日本時間だと明日かな?
    このLightSwitchがすでにMSDNからダウンロードできるようになっています。
    まだ触りはじめたところですが、面白そうな技術なのでとりあえず現時点での情報へのリンクをまとめておきます。

    日本語での紹介だとナオキ君の記事がLightSwitchとはどういうものか、というイメージを伝えてくれると思います。

    Visual Studio LightSwitch Beta が MSDN Subscription で公開!

    あとは英語になりますが。

    VisualStudio LightSwitch
    -本家サイト、になるのかな?ベータ版の公開ダウンロードはここから。キーノートでまず概要を学びましょう。

    ビデオで概要を把握するには、Channnel9から2つ。
    Visual Studio LightSwitch - Beyond the Basics
    Introducing Visual Studio LightSwitch

    すでにMSDN上でドキュメントも公開されています。
    Visual Studio LightSwitch Beta 1

    Codeギャラリーでサンプルコードも
    Visual Studio LightSwitch Samples

    Blogでもいろいろとりあげられはじめてますね。

    Infragistics + Microsoft LightSwitch = Awesome
    LightSwitch Technical Breakdown
    Making it shine: How we designed the LightSwitch Touch-Friendly Shell

    上記3つの記事はキーノートで登場するタッチフレンドリーシェルを作成したInfragisticsの人の記事です。
    その他はまず動かしてみた、といった感じの記事が多いかな?

    First look to the Microsoft Visual Studio LightSwitch beta
    The First Hour With Lightswitch –BETA-
    Creating A LightSwitch Custom Silverlight Control
    Printing With LightSwitch

    そそ、忘れちゃいけないのが本家本元、LightSwitch Team Blog

    Visual Studio LightSwitch Team Blog

    今はMSDNのドキュメントを最初から読み始めてるところです。
    ガイドツアーからはじまるところはいいですね。
    さて、どこまで読み進められるか。。。つか、いつまでかかるか。。。(w

    投稿日時 23-08-2010 01:19 投稿者 ono | コメント数:1
    カテゴリ: , ,
  • WebMatrix Betaのチュートリアル

    WebMatrix Beta Tutorials

    発表依頼、注目を集めている(一部だけ?)WebMatrixのチュートリアルがきちんとまとまっていることに今日気づきました。
    まだScottGuのBlogの日本語訳がでてないので、国内での注目度は低いかな?(w

    WebMatrix(というかRazor)で利用できるヘルパーをまとめてくれているページもあったので、こっちもメモ。

    WebMatrix Helpers
    WebMatrix Helpers (Part 2)

    個人的には、なぜこの技術がでてくるのか、というあたりを気にしていたりします。
    ヘルパーについて考えてみることがその一助になるかな、と思っていたり。。。

     

    [追記]

    てなこと書いてたら、今日付けでScottGuのBlogの日本語訳あがってますね。
    そろそろかなぁ、とは思ってたんですが。
    いつもいつも翻訳がんばってくれるChicaちゃんに感謝!

    投稿日時 20-07-2010 01:08 投稿者 ono | コメント数:0
    カテゴリ:
  • WCF Data Services で OData利用時の認証について

    OData and Authentication - Part 1
    OData and Authentication - Part 2 - Windows Authentication
    OData and Authentication - Part 3 - ClientSide Hooks
    OData and Authentication - Part 4 - Server Side Hooks
    OData and Authentication - Part 5 - Custom HttpModules

    他の技術との対比で、WCF Data Servicesではどのように認証を実装すべきか、とかちょっと考えてたら、たまたま一連の投稿がまとまったようなのでメモ。
    内容はまだ確認出来ていないので、これから。。。
    とあるタイミングまでには読んで、このあたりについての自分なりの考え方をまとめておく予定。

    #自分向けに宣言しておかないとね(w

    【追記】

    てっきり収束だとおもってたら次がでてきた(w

    OData and Authentication - Part 6 - Custom Basic Authentication
    OData and Authentication - Part 7 - Forms Authentication

    投稿日時 20-07-2010 12:59 投稿者 ono | コメント数:0
    カテゴリ:
  • モデルファースト開発の初心者向けチュートリアル

    Absolue Beginners Guide to Entity Framework

    前の投稿では次世代のEntity Frameworkでコードファーストで開発ができるようになる、という話でしたが、これは現行版のEFの話。
    モデルファーストでの開発について初心者向けのチュートリアルがまとめられています。
    一通り動くところまで簡潔にまとまっているという意味でよい記事ではないかと思うのでご紹介。

    投稿日時 20-07-2010 12:52 投稿者 ono | コメント数:0
    カテゴリ:
  • 次世代のEntity Framework

    EF CTP4 Released!

    次に登場してくるEntity FrameworkのCTP版の提供が開始されました。
    最初はデータベースがないとモデルが作れなかったEFですが、現在はモデルからDBを作成することができるようになっています。
    そして次は、、、コードを書くだけでDBアクセスができるようになる、と。

    最近発表され、提供がはじまったSQL CE4 ベータと組み合わせるとこんなことができる、という例もでてます。

    Simple Code First with Entity Framework 4 - Magic Unicorn Feature CTP 4

    なんか楽しそうだなぁ。
    どんどんコードを書き始めるまでのハードルが低くなってくる感じですね。
    Developerとしてはうれしい限り。

    #運用環境についての知識がない開発者が増えなきゃいいけど(w

    投稿日時 15-07-2010 03:02 投稿者 ono | コメント数:1
    カテゴリ:
  • WCF RIA Services:データ追加の補足

    前回のエントリの最後にこんなことを書いてます。

    「データを追加したあと、最終ページを表示するようにプログラムを記述しているつもりですが、どうも本来ページが増えるはずの動作のときに最終ページの1つ前のページしか表示されない、という状態になっています。 」

    非同期処理に慣れている人ならすぐ原因に気づいたんでしょうねぇ。
    データの読み直し(personDomainDataSource.Load();)が非同期で行われるため、正しい最終ページの値を持ってこれていないことが問題でした。
    ここを修正します。

    まずは修正前のプログラム

    ------------------------------------------------------------------------------------------------

    private void button4_Click(object sender, RoutedEventArgs e)
    {
        // 子ウィンドウのインスタンスを生成
        ChildWindow1 w = new ChildWindow1();
        // 子ウィンドウを閉じたときにデータを読み直し、最終ページを表示するよう設定
        w.Closed += (s, ev) =>
        {
            if (w.DialogResult == true)
            {
                personDomainDataSource.Load();
                dataPager1.PageIndex = dataPager1.PageCount;
            }
        };
        // 子ウィンドウの表示
        w.Show();
    }

    ------------------------------------------------------------------------------------------------

    これを次のように変えます。

    ------------------------------------------------------------------------------------------------

    private void button4_Click(object sender, RoutedEventArgs e)
    {
        // 子ウィンドウのインスタンスを生成
        ChildWindow1 w = new ChildWindow1();
        // 子ウィンドウを閉じたときの処理を記述
        w.Closed += (s, ev) =>
        {
            if (w.DialogResult == true)
            {
                // データを読み直したときのイベントを追加
                personDomainDataSource.LoadedData += new EventHandler<LoadedDataEventArgs>(dataAdded);
                personDomainDataSource.Load();
            }
        };
        // 子ウィンドウの表示
        w.Show();
    }

    private void dataAdded(object sender, LoadedDataEventArgs e)
    {
        // 最終ページに移動
        dataPager1.PageIndex = dataPager1.PageCount;
        // 子ウィンドウを閉じたとき以外に実行されないようデータを読み直したときのイベントを削除
        personDomainDataSource.LoadedData -= dataAdded;
    }

    ------------------------------------------------------------------------------------------------

    このようにデータの読み直しが終了した時点に動作するイベントを追加し、その中で最終ページに移動することで正しく動作するようになります。

    さて、本編はここまで。

    このプログラムを書いてて思ったんですが、非同期処理がベースとなることで、イベントに関する理解は必須になってしまいますね。
    また、上記のプログラム中では説明もせずにさらっと流してますが、匿名デリゲートをラムダ式に置き換えて簡単な記述にしている、なんてことをしてます。

    自分でプログラムを書く分には、IntelliSenseが手伝ってくれることもあって難しいところはそうないんですが、このあたりを他人に説明しようとすると、、、大変だよなぁ。。。

    投稿日時 07-07-2010 07:21 投稿者 ono | コメント数:1
    カテゴリ: ,
  • WCF RIA Services:データ追加

    WCF RIA Services  「らしい」データの追加方法のサンプルが見つけられず、情報をまとめるのに時間がかかってしまいました。
    とりあえず自分なりに納得いく方法として下記にまとめてみます。
    何点かまだ気に入らないところがあるんですけどね。。。

    Silverlight側にSilverlight子ウィンドウを追加します。

    子ウィンドウの追加

    データソースウィンドウでPersonを詳細表示の状態にします。
    idは自動的に追加される項目なので、下記のように[なし]の状態にします。

    データソースの状態

    この状態で子ウィンドウにPersonデータソースをドラッグ アンド ドロップします。
    必要な入力項目が追加されます。

    入力項目の追加 

    personDomainDataSourceのAutoLoadプロパティをfalseにします。

    子ウィンドウのコードを以下のように修正します。
    修正箇所はコメントを入れているあたりです。

    ------------------------------------------------------------------------------------------------

    using System.Windows;
    using System.Windows.Controls;
    using SilverlightApplication10.Web;

    namespace SilverlightApplication10
    {
        public partial class ChildWindow1 : ChildWindow
        {
            // データ保持のための変数
            Person p = null;

            public ChildWindow1()
            {
                InitializeComponent();
                // 新規Personインスタンスの作成/追加と入力欄への関連づけ
                p = new Person();
                ((DomainService1)personDomainDataSource.DomainContext).Persons.Add(p);
                grid1.DataContext = p;
            }

            private void OKButton_Click(object sender, RoutedEventArgs e)
            {
                // データの検証および追加
                personDomainDataSource.SubmitChanges();
                if (!p.HasValidationErrors)
                    this.DialogResult = true;
            }

            private void CancelButton_Click(object sender, RoutedEventArgs e)
            {
                this.DialogResult = false;
            }

            private void personDomainDataSource_LoadedData(object sender, LoadedDataEventArgs e)
            {

                if (e.HasError)
                {
                    System.Windows.MessageBox.Show(e.Error.ToString(), "Load Error", System.Windows.MessageBoxButton.OK);
                    e.MarkErrorAsHandled();
                }
            }
        }
    }

    ------------------------------------------------------------------------------------------------

    MainPage.xamlに「追加」ボタンを追加します。

    追加ボタン

    このボタンは「再取得」ボタンと同じように、データを更新しているときは使えないようにしたいと思います。
    そのため、IsEnabledプロパティにソースとして「ElementName」-「PersonDomainDataSource」、パスとして「CanLoad」を設定します。
    「追加」ボタンをダブルクリックし、以下のプログラムを記述します。

    ------------------------------------------------------------------------------------------------

    private void button4_Click(object sender, RoutedEventArgs e)
    {
        // 子ウィンドウのインスタンスを生成
        ChildWindow1 w = new ChildWindow1();
        // 子ウィンドウを閉じたときにデータを読み直し、最終ページを表示するよう設定
        w.Closed += (s, ev) =>
        {
            if (w.DialogResult == true)
            {
                personDomainDataSource.Load();
                dataPager1.PageIndex = dataPager1.PageCount;
            }
        };
        // 子ウィンドウの表示
        w.Show();
    }

    ------------------------------------------------------------------------------------------------

    なお、PersonCheck.shared.csの内容を以下のように変更しておきます。
    mailの値が空文字でもnullでもエラーになるようにしています。
    また、エラー時のエラー設定項目としてageとmailの項目を指定しています。

    ------------------------------------------------------------------------------------------------

    using System.ComponentModel.DataAnnotations;

    namespace SilverlightApplication10.Web
    {
        public class PersonCheck
        {
            public static ValidationResult CheckAge_Mail(Person p)
            {
                if (p.age >= 20 && (p.mail == string.Empty || p.mail == null))
                    return new ValidationResult("成人はメールアドレス必須です", new string[] {"age", "mail"});
                return ValidationResult.Success;
            }

        }
    }

    ------------------------------------------------------------------------------------------------

    これで動作のチェックができるようになりますが、気をつけないといけないのは、通常のデバッグ開始を実行してしまうと、検証のチェックにひっかかったときにエラーが発生したことを検知して動作が止まってしまうことです。
    必ず「デバッグなしで開始」を実行します。

    下図のように追加データの検証が行われます。

    名前の必須チェック

    年齢チェック

    年齢とメールアドレスの関連チェック

    なお、上記の動作確認を行っていると、どうもクライアント側だけで検証できずにサーバ上での検証が走っているように思われます。
    逆に考えると、サーバ上で検証のプログラムを記述すると、特になにもしなくてもクライアント側にサーバ上で発生した検証エラーを伝えられることがわかります。

    検証エラーがでなければ、データを正常に追加することができます。

    データの追加

    データを追加したあと、最終ページを表示するようにプログラムを記述しているつもりですが、どうも本来ページが増えるはずの動作のときに最終ページの1つ前のページしか表示されない、という状態になっています。
    その点解消する方法がないか、調査は続けたいと思います。

    投稿日時 23-06-2010 02:26 投稿者 ono | コメント数:1
    カテゴリ: ,
  • WCF RIA Services:データ検証

    WCF RIA Servicesでは、必須項目/範囲チェック/正規表現チェックといったデータの検証はメタデータクラスに属性を設定するだけで可能になります。
    DomainServiceクラスを追加した際、同時に作成されるメタデータクラスに下記のように属性を設定してみます。

    -----------------------------------------------------------------------------------------------
    [MetadataTypeAttribute(typeof(Person.PersonMetadata))]
    public partial class Person
    {

        internal sealed class PersonMetadata
        {

            private PersonMetadata()
            {
            }

            [Display(Name = "年齢", Order = 2)]
            [Range(0, 120, ErrorMessage = "年齢に誤りがあります")]
            public int age { get; set; }

            [Display(Name="ユーザID", Order=0)]
            public int id { get; set; }

            [Display(Name = "メールアドレス", Order = 3)]
            [RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "正しいメールアドレスを入力してください")]
            public string mail { get; set; }

            [Display(Name = "備考", Order = 4)]
            public string memo { get; set; }

            [Display(Name = "名前", Order = 1)]
            [Required(ErrorMessage = "名前は必須項目です")]
            public string name { get; set; }
        }
    }
    -----------------------------------------------------------------------------------------------

    この変更を行って実行すると、下記のようにデータの検証が行われます。

    データ検証例

    このとき「更新」ボタンが有効になっています。
    で、このまま押してみると、、、画面が真っ白になってエラーとなってしまいます。
    ただ、これはデバッグ実行をしているときのエラー制御が通常実行時と異なるために発生する現象のようです。
    Ctrl+F5 を押して、デバッグなしで実行すると、「更新」ボタンを押しても何も起きないことを確認することができます。

    さて、カスタムのデータ検証も追加してみましょう。そのためには、まずカスタム検証のメソッドを追加するクラスを作成します。
    PersonCheck.shared.csというようにクラス名にsharedという名前を追加したファイルを作成します。
    このようにファイル名にsharedをつけることで、クライアント側に自動的にこのファイルが追加されるようになります。
    ファイルの中は下記のように記述します。

    -----------------------------------------------------------------------------------------------
    using System.ComponentModel.DataAnnotations;

    namespace SilverlightApplication10.Web
    {
        public class PersonCheck
        {
            public static ValidationResult CheckAge_Mail(Person p)
            {
                if (p.age >= 20 && p.mail == string.Empty)
                    return new ValidationResult("成人はメールアドレス必須です");
                return ValidationResult.Success;
            }

        }
    }
    -----------------------------------------------------------------------------------------------

    メタデータクラスのPersonMetadataクラスにこのカスタム検証を使用するよう、以下の属性を追加します。

    [MetadataTypeAttribute(typeof(Person.PersonMetadata))]

    これで、年齢が20歳以上の場合でメールアドレスの入力がない場合にエラーが表示されるようになります。

    カスタム検証例

    サンプルコードはこちらからダウンロードしてください。

    投稿日時 16-06-2010 01:49 投稿者 ono | コメント数:1
    カテゴリ: ,
  • WCF RIA Services:データ更新/キャンセル/再取得

    WCF RIA Servicesで作成したサンプルはデフォルトでDataGird上でのデータの修正が可能です。
    ただ、DataPagerを利用してページングを行っている場合、データを修正すると下図のようにページ番号がグレーアウトし、ページの移動ができなくなります。

    データ修正時

    この状態を解消し、ページの移動を可能にするには、データの修正をキャンセルするか、データベースにたいして修正内容を更新する必要があります。

    キャンセルボタンと更新ボタンを追加します。

    ボタン追加

    キャンセルボタンのCommandプロパティの下図のボタンをクリックし、「データバインドの適用」を選択します。

    image 

    表示されるダイアログ上でソースとして「ElementName」-「PersonDomainDataSource」を選択します。

    ソースの設定

    パスとして「RejectChangesCommand」を選択します。

    パスの設定

    更新ボタンは同様にCommandプロパティにソースとして「ElementName」-「PersonDomainDataSource」、パスとして「SubmitChangesCommand」を設定します。

    この状態でデバッグを実行すると、アプリケーションを開始した時点ではキャンセルボタン、更新ボタンともに実行できない状態になっています。

    処理開始時

    データを修正すると、キャンセルボタン、更新ボタンが有効になります。

    データ修正時

    キャンセルボタンを押すと、修正内容が破棄され、ページの移動が可能になります。
    更新ボタンを押すと、修正内容がデータベースに反映され、ページの移動が可能になります。

    これで普通にデータ更新が可能になるのですが、いろいろと試していると他からデータが更新された場合、その内容が反映されないことがわかりました。

    アプリケーションを実行し、Silverlight上からuser1のデータを修正します。

    Silverlight上でデータ修正

    更新ボタンを押す前にデータベース上のuser2のデータを修正します。

    データベースから修正

    この状態で更新ボタンを押すと、user1のデータは正しく書き換えられますが、user2の変更はSilverlight側には適用されません。

    データベースデータ更新後

    Silverlightデータ更新後 

    データベース上の最新状態をSilverlight側に反映させるには、データを再取得するしか方法がなさそうです。
    再取得ボタンを追加し、Commandプロパティにソースとして「ElementName」-「PersonDomainDataSource」、パスとして「LoadCommand」を設定します。

    再取得ボタン追加

    これで大丈夫、、、と思ったのですが、実行してもSilverlight側にはデータベースで直接修正した内容がやっぱり反映されません。
    いろいろ調べてみると、どうやらLoadBehaviorを変更する必要がありそうです。
    この変更のタイミングとして、PersonDomainDataSourceのLoad時(LodingDataイベント)が使えるようです。

    まずドキュメントアウトラインからDomainDataSourceを選択します。

    PersonDomainDataSourceの選択

    PersonDomainDataSourceのイベントからLoadingDataをダブルクリックし、イベント発生時のメソッドを追加します。

    イベントの追加

    personDomainDataSource_LoadingDataメソッド内で、LoadBehaviorの設定を変更します。

    LoadBehaviorの設定 

    この設定の変更をすることで、はじめてSilverlight側でデータを再取得した際にデータベース上の修正内容が反映されるようになります。

    投稿日時 15-06-2010 11:18 投稿者 ono | コメント数:0
    カテゴリ: ,
  • 米国TechEdのセッションが公開されてます

    http://www.msteched.com/

    アメリカで行われているTechEdのセッションの情報が公開されています。
    去年までだとMIXはともかくTechEdは非公開だったよーな。。。

    とりあえずビデオが公開されてますね。
    ダウンロードもできます。
    スライドも落とせるようなリンクがあるのでもしかするとそちらも後から公開されるのかな?

    しかしほんと、MSさんって太っ腹。

    投稿日時 11-06-2010 04:14 投稿者 ono | コメント数:1
    カテゴリ:
もっと見る 次のページ »
SkinName:iroha_Blog2
Powered by Community Server, by Telligent Systems