前編では「HTTP Web サービスを呼び出す」アクションを利用し、インターネット上の Web サービスを呼び出す部分を作成しました。この後編では、Web サービスから返されたデータから、必要な情報を取り出しリストアイテムに格納する処理を作成します。

前編はこちらです。

SharePoint 2013 ワークフローの「HTTP Web サービスを呼び出す」アクションを試してみる (前編)
http://idea.tostring.jp/?p=1651

辞書型変数から値を取り出す

「HTTP Web サービスを呼び出す」アクションでは、Web サービスからの戻り値を「辞書型」変数に格納しました。この辞書型変数から特定の値を取り出すアクションが「辞書からアイテムを取得する」アクションです。

実際にアクションを追加すると、「辞書」「名前またはパスに基づいて取得したアイテム」「アイテム」の3つが設定可能になっています。

20141224-1

項目 説明
辞書 値が格納されている辞書型変数を指定します。
名前またはパスに基づいて取得したアイテム 辞書型変数から値を取り出すさいの「パス」を指定します。
アイテム 取り出した値を格納しておく変数を指定します。

この中で、よく分からないのは「名前またはパスに基づいて取得したアイテム」かと思いますので、そちらを少し詳しく解説します。

値を取り出すためのパス

今回のデータは、JSON フォーマットになっています。そのため、取り出すさいのパスも JSON がどういった構造になっているかを意識する必要があります。もっとも簡単な例は、下記のようなオブジェクト(連想配列)の形式です。

{
	"name":"value"
}

この場合のパスは、nameです。
次の例は、オブジェクトが入れ子になっている形式です。

{
	"parent":{
		"child1":"value1",
		"child2":{
			"grandchild1":"value2"
		}
	}
}

この場合、child1 の値を取り出すパスはparent/child1となり、grandchild1 の値を取り出すパスはparent/child2/grandchild1となります。
また、よくあるのは配列要素です。

{
	"array":[
		{ "element1":"value1" },
		{ "element1":"value2" }
	]
}

この場合は、array(0)/element1またはarray/(0)/element1のように括弧つきで配列のインデックスを指定して値を取り出すことができます。この例では、インデックスが 0 番の配列から element1 の値を取り出すので、value1 が取り出せます。配列については、配列そのものを取り出し、ワークフロー内でループ処理もできますが今回は割愛します。

ループ処理などは、下記の記事が詳しいです。私は読むのに苦労しましたが、上のルールを理解していれば少しは読みやすいかと思います。

“HTTP Web サービス” アクションを使用して Web サービスを操作する方法
http://blogs.technet.com/b/office2010_jp/archive/2012/09/28/quot-http-web-quot-web.aspx

完成形

というわけで、今回利用している livedoor Weather Hacks の API 仕様を確認しながら作成したものが下図になります。

20141224-2

アイテムの更新処理は、取り出した変数を利用して下図のようにワークフローのトリガーとなったアイテムを更新しました。

20141224-3

動作確認をしましょう

作成したワークフローを発行し、いよいよ動作確認です。下図のようなリストアイテムを作成し保存します。都市コードは API の仕様を見ながら入力しました。本当は選択肢にするなど、工夫したほうがイイですね。

20141224-4

次に、このアイテムに対してワークフローを実行します。

20141224-5

すると、Web サービスから返された値で無事にアイテムが更新されました!!長かったです…

20141224-6

さいごに

SharePoint 2013 ワークフローを利用すると、こうした外部の Web サービスとの連携もノンコーディングで作成ができます。アイデア次第でいろいろな機能を作れそうな気がしますね。

前編・後編と、長らくお付き合い頂きありがとうございました。おつかれさまでした!