トリガーとしてのResource Script
Live FrameworkのMesh Objectなどのリソースは,
トリガーに使用できるリソースの操作は,
- PreCreateTrigger
- PostCreateTrigger
- PreUpdateTrigger
- PostUpdateTrigger
- PreDeleteTrigger
- PostDeleteTrigger
PreCreateTriggerとPostCreateTriggerはリソースの生成の前後,
Create・Update
Createトリガー
さっそくトリガーを実際に使ってみましょう。以下にPostCreateTriggerを使用したコードを示します。
// LOE へ接続
var serviceUrl = "https://user-ctp.windows.net";
var token = new NetworkCredential(User.UserId, User.Password, serviceUrl).GetWindowsLiveAuthenticationToken();
var loe = new LiveOperatingEnvironment();
loe.Connect(token, AuthenticationTokenType.UserToken, new Uri(serverUrl), new LiveItemAccessOptions(true));
// Mesh Object の生成
var mo = new MeshObject("Mesh Object 1");
// トリガーの設定
mo.Resource.Triggers.PostCreateTrigger =
Statement.Sequence(
Statement.CreateResource<MeshObjectResource>(
"s1",
new Uri("https://user-ctp.windows.net/V0.1/Mesh/MeshObjects"),
new MeshObjectResource("Mesh Object 2"))).Compile();
// Mesh Object の追加
loe.Mesh.MeshObjects.Add(ref mo);
コードの処理内容は特に意味のないものですが,
実行した結果は,
Updateトリガー
続いて,
// Mesh Object 1 の取得
var mos = from m in loe.Mesh.MeshObjects.Entries
orderby m.Resource.Title
where m.Resource.Title == "Mesh Object 1"
select m;
foreach (var m in mos)
{
// News アイテムの生成
var news = new NewsItemResource("LiveMesh.AppMessagePost");
news.Contexts.Add(new NewsItemContext("Scope", "LiveFX/MeshObject", null, null, "LiveFX/MeshObject"));
news.Contexts.Add(new NewsItemContext("Target", "text/plain", null, null, null));
// トリガーの設定
var param = Statement.ResourceParameter(typeof(MeshObjectResource));
m.Resource.Triggers.PostUpdateTrigger =
Statement.Sequence(
new Statement[] {
Statement.CreateResource<NewsItemResource>("s1", null, news,
Statement.Bind("CollectionUrl", param, "NewsFeedLink"),
Statement.Bind("Request.Contexts[0].Text", param, "Title"),
Statement.Bind("Request.Contexts[1].Text", param, "Title"))},
param).Compile();
// 名前の変更
m.Resource.Title = "Mesh Object 1 - Renamed";
m.Update();
}
Newsアイテムの生成とResource Scriptの内容が少し複雑になっていますが,
Resource Scriptの記述中にこれまでに登場していないResourceParameterという記述があります。Newsアイテムを生成するとき,
このコードを実行すると,
トリガーの制限
Live Framework CTPの未実装による制限か仕様かは明確になっていませんが,