使ってみよう! Live Framework

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

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

NewsItemContext

次にNewsItemContextオブジェクトを生成します。通常,NewsItemContextは2種類生成します。ひとつは,Newsアイテムを参照しているアイテム(Live Meshフォルダやアプリケーションなど)のメタデータを持つもの。もうひとつが,Newsアイテムに実際に関連するアイテム(追加したファイルやメンバーなど)のメタデータを持つものです。

NewsItemContextクラスは以下のプロパティがあり,値を設定する必要があります。

Kind(String型)

ScopeまたはTargetのどちらかを指定します。追加しようとしているNewsアイテムを参照するMesh ObjectについてのメタデータをNewsItemContextに設定する場合は,Scopeを指定します。操作の対象となったファイルやアプリケーションのメッセージのメタデータをNewsItemsContextに設定する場合は,Targetを指定します。

Type(String型)

メタデータの対象がテキストやバイナリファイルの場合は,text/plainやapplication/octet-streamを指定します。Mesh Objectやアプリケーションの場合,LiveFX/MeshObjectやLiveFX/ApplicationInstanceとなります。

Text(String型)

通常Resource.Titleの値とし,アプリケーションやユーザーのメッセージの場合,メッセージそのものとなります。NewsアイテムをMesh Bar等で表示する際に,このプロパティ値が使用されます。

TargetLink(Uri型)

対象のリンク先です。Live Frameworkでは,すべてのリソースはURL(URI)で表現可能でした。Mesh Objectの場合,そのMesh Objectを示す相対URLを指定します。

Relationship(String型)

対象の関連情報を指定します。ユーザーにTargetLink先のリンクを示す際に表示する情報として,または対象の型についての補足などの利用が想定されているようです。

以上を踏まえたコードが以下になります。

' Kind = Scope の NewsItemContext 生成
Dim scopeContext = New NewsItemContext("Scope", "LiveFX/ApplicationInstance", meshApp.Resource.Title, meshApp.SelfLink, Nothing)
newsItem.Resource.Contexts.Add(scopeContext)

' Kind = Target の NewsItemContext 生成
Dim message = "gihyo.jp"
Dim targetContext = New NewsItemContext("Target", "text/html", message, New Uri("http://gihyo.jp"), Nothing)
newsItem.Resource.Contexts.Add(targetContext)

' News アイテムの追加
meshApp.News.AddAsync(newsItem, Nothing)

KindプロパティがScopeのNewsItemContextオブジェクトには,Typeプロパティに「LiveFX/ApplicationInstance⁠⁠,TextプロパティにアプリケーションのResource.Titleプロパティを指定しています。アプリケーション自身のURLはSelfLinkプロパティから取得でき,それを指定しています。

KindプロパティがTargetのNewsItemContextオブジェクトには,アプリケーションのメッセージとしてgihyo.jpへのリンクを追加しています。単純に文字列だけのメッセージを表示するにはTargetLinkプロパティの値をNothing(null)にします。

それぞれのNewsItemContextをNewsItems.Contextsに追加し,最後にアプリケーションのNewsコレクションにNewsItemsオブジェクトを追加しています。

実際にアプリケーションを実行してみましょう。アプリケーション起動後,しばらくするとMesh BarのNews部分にメッセージが表示されれば成功です図7⁠。図はローカルPCから実行した結果です。

図7 ローカルPC上での実行結果

図7 ローカルPC上での実行結果

もし,Mesh ObjectではなくMeshのNewsにNewsアイテムを追加した場合は,次のように変更するだけです。

' meshApp.News.AddAsync(newsItem, Nothing)
meshApp.LiveOperatingEnvironment.Mesh.News.AddAsync(newsItem, Nothing)

Newsアイテムの参照

最後にNewsアイテムの参照についてです。ここまでできていれば簡単ですね。ほかのリソース同様の操作で参照します。次にアプリケーション自身のNewsとMeshのNews一覧を表示するコードを示します。

' アプリケーション自身の News
For Each n In meshApp.News.Entries
    MyListBox.Items.Add(n.Resource.Title)
Next

' Mesh の News
For Each n In meshApp.LiveOperatingEnvironment.Mesh.News.Entries
    MyListBox.Items.Add(n.Resource.Title)
Next

Mesh Barを見ると,ファイル操作をしたとき そのメンバーの情報も表示されていることがわかります。もしメンバー情報も取得したい場合は,Resource.Authorsプロパティを使用します。

' アプリケーション自身の News
For Each n In meshApp.News.Entries
    MyListBox.Items.Add(n.Resource.Title)

    ' News アイテムに関連付いたメンバーの情報
    For Each a In n.Resource.Authors
        MyListBox.Items.Add(a.Name)
    Next
Next

今回はここまでです。いかがでしたでしょうか。次回もMesh-enabled Webアプリケーション開発の内容を紹介する予定です。

著者プロフィール

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

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

URL:http://katamari.jp