制御構造
制御構造のStatementを使用すると順次や条件分岐などを表現可能です。制御構造用のStatementは,
- SequenceStatement
- InterleaveStatement
- ConditionalStatement
- LoopStatement
SequenceStatementは,
var sequence = Statement.Sequence
(
Statement.CreateResource<MeshObjectResource>(
"createMeshObjectStatement1",
new Uri("https://user-ctp.windows.net/V0.1/Mesh/MeshObjects"),
new MeshObjectResource("My Mesh Object1")),
Statement.CreateResource<MeshObjectResource>(
"createMeshObjectStatement2",
new Uri("https://user-ctp.windows.net/V0.1/Mesh/MeshObjects"),
new MeshObjectResource("My Mesh Object2"))
);
InterleaveStatementは,
データフロー
最後はデータフローです。ここでのデータフローとは,
例えば,
フォルダ内にファイルを作るコードを示します。フォルダ内のファイルと表現しましたが,
// Live Mesh フォルダとなる Mesh Object の作成
var folder = new MeshObjectResource("アルバム");
folder.Type = "LiveMeshFolder";
// Mesh Object に追加する Data Feed の作成
var df = new DataFeedResource();
df.Type = "LiveMeshFiles";
// Live フォルダ作成とそのフォルダ内に Data Feed を作成する Statement
var s1 = Statement.CreateResource<MeshObjectResource>("s1", new Uri("https://user-ctp.windows.net/V0.1/Mesh/MeshObjects"), folder);
var s2 = Statement.CreateResource<DataFeedResource>("s2", null, df, Statement.Bind("CollectionUrl", "s1", "Response.DataFeedsLink"));
// 上記 Statement で作成された Data Feed の中に ファイルを作成する Statement
// (ファイルは指定 URL から画像を取得して作成する)
var s3 = Statement.CreateMediaResource("s3", null, new Uri("http://example.jp/foo.jpg"), null, Statement.Bind("CollectionUrl", "s2", "Response.MediaResourcesLink"));
var s4 = Statement.CreateMediaResource("s4", null, new Uri("http://example.jp/bar.jpg"), null, Statement.Bind("CollectionUrl", "s2", "Response.MediaResourcesLink"));
// フォルダ作成,Data Feed 作成,ファイル作成を順次実行する Statement
// (ファイル作成は順不同 両ファイルが作成完了したら処理終了)
var sequence = Statement.Sequence
(
s1,
s2,
Statement.Interleave
(
s3,
s4
)
);
上記コードは,
コンパイルと実行
コンパイル
Statement DOMはコンパイルによってResource Scriptに変換することができます。文法の説明で使用したC#のコードをコンパイルするには次のようになります。StatementクラスはCompileメソッドを持っています。
// コンパイル この場合 script の型は ResourceScript<SequenceStatement>
var script = sequence.Compile();
コンパイルによってひとつのリソースとすることができました。Resource Scriptは,
コンパイルによってできたResource Scriptは実行可能です。次は実行してみましょう。
サーバーサイド実行
Resource Scriptの実行はサーバーサイドでの実行とクライアントサイドでの実行に分類することができます。
サーバーサイドでの実行を図3に示します。
アプリケーションはLive Operating Environmentに対してResource Scriptを渡します。その内容はサーバー側で解釈され,
より具体的には,
サーバーサイド実行の特徴は,
コードでは次のように記述します。実行には認証情報を渡す必要があります。
script.RunAtServer(new NetworkCredential("user@example.jp", "password", "https://user-ctp.windows.net/V0.1/Script"));
クライアントサイド実行
クライアントサイドでの実行も可能です。その内容を図4に示します。
クライアントサイドで実行した場合,
script.Run (new NetworkCredential("user@example.jp", "password", "https://user-ctp.windows.net/V0.1/Script"));
図4に示すように,
また,
今回は以上です。少し駆け足でしたが,