使ってみよう! Live Framework

第8回 Mesh-Enabled Web アプリケーション ―― Newsリソース

この記事を読むのに必要な時間:およそ 6 分

Data FeedとData Entryの追加と参照

作成されたSilverlightのプロジェクトのPage.xaml.vbファイルを確認してください。MeshApplicationServiceのオブジェクトを使用するコードが既に記述されています。

Private meshApp As MeshApplicationService
Public Sub New()
    InitializeComponent()

    meshApp = Application.Current.GetMeshApplicationService()
    AddHandler meshApp.LoadCompleted, AddressOf meshAppLoaded
    meshApp.LoadAsync(Nothing)
End Sub

Pageクラスのコンストラクタ内でMes ApplicationServiceオブジェクトの参照を取得し(GetMeshApplicationServiceメソッド部分⁠⁠,イベントの設定,そしてLoadAsyncメソッドを呼び出しています。LoadAsyncメソッドの処理が完了することでMeshApplicationServiceオブジェクトからMeshサービスへのアクセスが可能になります。このLoadAsyncメソッドのようにネットワークへの接続が発生する可能性のあるメソッドは非同期処理のメソッドとなっています。

ロードが完了すると,Pageクラス内に定義されているmeshAppLoadedメソッドが呼ばれます。ここに処理を追加していきましょう。

サンプルとしてアプリケーション自身のData FeedにData Entryを追加と,Data Entryの参照を行います。非同期であることを除けば,これまで本連載で扱った操作方法と大きく違いはありません。Data FeedやData Entryについては第4回で扱っています。併せて確認してみてください。

以下にData Feedを作成して,アプリケーションのData Feedコレクションに追加しているコードを示します。

Private Sub meshAppLoaded(ByVal o As Object, ByVal e As EventArgs)
    ' Data Feed の作成
    Dim feed = New DataFeed("Data Feed Sample")

    ' Data Feed の追加
    AddHandler meshApp.DataFeeds.AddCompleted, AddressOf DataFeedsAddCompleted
    meshApp.DataFeeds.AddAsync(feed, Nothing)
End Sub

AddAsyncメソッドの第2引数は,Object型です。追加完了時のイベント引数の値として参照することができ,必要に応じて使用します。今回はNothing(null)を指定しています。Data Feedを追加する前にイベントの関連付けも行っています。

Data Feedの追加完了時のイベント処理を記述します。Data Entryを作成しData Feedへ追加しています。

' Data Feed の追加完了
Private Sub DataFeedsAddCompleted(ByVal sender As Object, ByVal e As Microsoft.LiveFX.Client.LiveItemEventArgs(Of Microsoft.LiveFX.Client.DataFeed))
    ' Data Entry の作成
    Dim entry = New DataEntry("Data Entry Sample")

    ' meshApp 最初の Data Feed に Data Entry 追加
    Dim feed = meshApp.DataFeeds.Entries.FirstOrDefault
    AddHandler feed.DataEntries.AddCompleted, AddressOf DataEntriesAddCompleted
    feed.DataEntries.AddAsync(entry, Nothing)
End Sub

最後に,Data Entry追加完了のイベント処理を記述します。Data Entryの内容を一覧で表示しています。

' Data Entry の追加完了
Private Sub DataEntriesAddCompleted(ByVal sender As Object, ByVal e As Microsoft.LiveFX.Client.LiveItemEventArgs(Of Microsoft.LiveFX.Client.DataEntry))
    ' Data Entry 一覧表示
    For Each feed In meshApp.DataFeeds.Entries
        For Each entry In feed.DataEntries.Entries
            MyListBox.Items.Add(entry.Resource.Title)
        Next
    Next
End Sub

コードではListBoxにData Entryの内容を追加しています。XAMLのコード(Page.xaml)を次のように変更してください。

<UserControl x:Class="MeshApp1Silverlight.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">
        <ListBox x:Name="MyListBox" />
    </Grid>
</UserControl>

以上までのコードを実行すると,Live Desktopでの結果は図3のようになります。ひとつData Entryが追加されて,そのData Entryの内容が表示されています。

図3 Live Desktop上での実行結果

図3 Live Desktop上での実行結果

上記のコードは意味のないものですが,アプリケーションが使用するデータはData FeedとData Entryを組み合わせて保存・取得するとよいでしょう。

Mesh Objectの参照

MeshApplicationServiceクラスによってアプリケーション自身のData Feedなどのリソースアクセスを紹介しました。アプリケーションにMesh上のMesh Objectのアクセスを許可している場合,どのようにアクセスすればよいのでしょうか。

MeshApplicationServiceにはLiveOperatingEnvironmentプロパティが用意されています。これを使用すればLive Operating Environmentのエンドポイントからのすべてのリソースにアクセスできます。Mesh Objectを参照するには次のようになります。

Dim loe = meshApp.LiveOperatingEnvironment
For Each mo In loe.Mesh.MeshObjects.Entries
    MyListBox.Items.Add(mo.Resource.Title)
Next

Mesh Objectだけでなくデバイス等にも同様にアクセス可能です。

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp