式の連結
以上のStatementBindingはStatementのプロパティ同士を結び付ける例でした。これ以外にもプロパティへ値を代入する使用方法もあります。
リソース読み取りの例をみてみましょう。リソースの読み取りは,
var s3 = Statement.ReadResource<MeshObjectResource>("s3", Statement.Bind("EntryUrl", "s1", "Response.SelfLink"));
Statement s1の結果を読み取るStatementです。ReadResourceStatementクラスはEntryUrlプロパティに読み取るリソースのURLを指定する必要があります。StatementBindingを使用して,
次に,
var s4 = Statement.UpdateResource<MeshObjectResource>("s4",
Statement.Bind("Request", "s3", "Response"),
Statement.Bind("Request.Title", System.Linq.Expressions.Expression.Constant("アルバムその2")));
このコードではふたつのStatementBindingオブジェクトを指定しています
ひとつ目のStatementBindingは,
これまでに作成したStatement s1からs4を順次実行すると,
var sequence = Statement.Sequence(s1, s2, s3, s4);
var script = sequence.Compile();
script.RunAtServer(creds);
実行後,
最後に基本操作となるリソース削除についてもふれておきます。Statement.
var s5 = Statement.DeleteResource("s5", Statement.Bind("EntryUrl", "s1", "Response.SelfLink"));
DeleteResourceStatementクラスのEntryUrlに削除するリソースのURLを指定します。上の例では,
シリアライズ
前回,
このシリアライズ化した内容は簡単に確認することができます。ResourceScriptオブジェクトのSaveAsJSonまたはSaveAsPlainOldXmlメソッドを使用して各形式の内容を取得します。先ほどのまでのコードの例を用いると次のようになります。
var sequence = Statement.Sequence(s1, s2);
var script = sequence.Compile();
script.SaveAsJSon("script.txt"); // JSON 形式
script.SaveAsPlainOldXml("script.xml"); // XML 形式
実行するとふたつのファイルが保存されます。作成されたファイルのうちのひとつJSON形式は以下のような内容です。コードは見やすいよう整形しています。
{
__type: ResourceScriptOfSequence:http://user.windows.net (string)
,Source: {
__type: Sequence:http://user.windows.net (string)
,Children: [
{
__type: CreateResourceOfMeshObject:http://user.windows.net (string)
,Bindings: []
,Name: s1 (string)
,Request: {
__type: MeshObject:http://user.windows.net (string)
,Title: アルバム (string)
,Triggers: {}
,Type: LiveMeshFolder (string)
}
,ThrowOnError: true (boolean)
,CollectionUrl: https://user-ctp.windows.net/V0.1/Mesh/MeshObjects (string)
}
,{
__type: CreateResourceOfDataFeed:http://user.windows.net (string)
,Bindings: [
{
__type: PropertyBinding:http://user.windows.net (string)
,Target: s2 (string)
,TargetProperty: CollectionUrl (string)
,Source: s1 (string)
,SourceProperty: Response.DataFeedsLink (string)
}
]
,Name: s2 (string)
,Request: {
__type: DataFeed:http://user.windows.net (string)
,Title: DataFeedResource (string)
,Triggers: {}
,Type: LiveMeshFiles (string)
}
,ThrowOnError: true (boolean)
}
]
,Parameters: []
}
}
今回のコードには出てきていないパラメータも記述されていることがわかります。
このテキストをLive Operating EnvironmentにHTTP POSTメソッドで渡すとRunAtServerメソッドと同様のことが可能です。実際にC#以外の言語を使用して試してみましょう。
PHPによるHTTP POSTメソッドによりファイル内容を送信するコードを示します。コードと同じディレクトリにC#で出力したJSON形式のテキストファイルscript.
<?php
$auth = 'Resource Browser から Request Headers 内の Authorization の値をコピー';
$opts = array(
'http' => array(
'method' => 'POST',
'content' => @file_get_contents('script.txt'),
'header' =>
"acceptt: application/json\r\n" .
"content-type: application/json\r\n" .
"Authorization: " . $auth . "\r\n"));
@file_get_contents('https://user-ctp.windows.net/V0.1/Script',
false, @stream_context_create($opts));
?>
実行にあたりひとつ問題があります。クラウド上のLive Operating Environmentにアクセスする場合は,
Live Framework SDKのToolsフォルダ以下
図中のリンクをクリックするとWindows Live IDアカウントの入力が求められ,
ここで実際にLive Operating Environmentへ送信しているリクエストヘッダーを見ることができます。ここにある
以上でPHPのコードを実行すると,
PHP等の言語でLive Framework SDKのライブラリを使用せずLiveサービスへのアクセスも可能ですが,
今回は以上です。いかがでしたでしょうか。次回はResource Scriptの特長のひとつでもあるトリガーによる処理についてです。