SharePoint 2013 ワークフローで「現在のリスト」と「現在のアイテム」のURLを取得する

SharePoint 2013 のワークフローコンテキスト(変数)には、ワークフローを実行しているリスト、あるいはアイテムの(完全な)URL が(何故か)ありません。しかし既存の変数の組み合わせと計算で、導き出すことができます。

前回の「SharePoint 2013 ワークフローで取得できる変数の一覧」を見ると、「現在のサイト」と「現在のアイテム」は変数としてきちんと存在します。しかしこの「現在のアイテム」がクセモノで、ID が内部的な形式で表記されており、実際には有効でない(クリックしても開かない)URLなんですよね。

そこで、この「現在のアイテム」を文字操作アクションでどうにかしてやることが、工夫の軸になります。

現在のリストの URL を取得する

まず、アクション「文字列からサブ文字列を検索する」を利用し、ワークフローコンテキストの「現在のアイテムのURL」から現在のアイテムの「ID」に「_.000」をつけた文字を検索します。

20140325image07

これは、「現在のアイテムのURL」の何文字目から実際のアイテムの ID 値が始まっているかを調べています。ただし「_.000」がないと、もし URL に ID と同じ数字が含まれた場合にきちんと動作しません。結果(文字数)は変数に出力されます。

ちなみに左[文字列]は[fx]をクリックして設定します。右[サブ文字列]は[…]をクリックして、文字列ビルダーを呼び出し、[参照の追加または変更]から変数を挿入して _.000は手書きです。

20140325image02

次に「文字列の先頭からサブ文字列を抽出する」アクションで、変数「現在のアイテムのURL」からこの文字数だけ抽出すると、リスト URL の末尾部分を得ることができます。 Lists/List8/1_.000 → Lists/List8/ のような感じです。

20140325image08

最後に、「ワークフローの変数を設定する」アクションで、[…]の文字列ビルダーを起動し、これをワークフローコンテキストの「作業中サイトのURL」と繋げてやれば
https://owlseye22.sharepoint.com/subsite/Lists/List8/
のように、完全なリストの URL を得ることが出来ます。

20140325image09

現在のアイテムの URL を取得する

上のリスト URL が取得できていればこちらは簡単です。アイテムの URL、正確にはアイテムを表示するフォームの URL は必ず「/Lists/List8/DispForm.aspx?ID=1」の形式になっています。

そこで、「ワークフローの変数を設定する」アクションで、[…]の文字列ビルダーを起動し、先程のリストURLと、「/DispForm.aspx?ID=」、それに現在のアイテムの変数「ID」を繋げます。

20140325image10

とりあえず、取得した値をアイテムの本文に書き込んでみたのがこちら。

20140325image11

もちろん、実際の運用では、こんな手間をかけず、最初から URL を手打ちしてしまった方が手っ取り早いです(苦笑)しかし、できるだけ汎用的に作ろうとすると、この辺りを動的に取得する必要があります。こんな方法もあったな、と覚えておいて頂けると良いかもしれません。


Author

中村 和彦(シンプレッソ・コンサルティング株式会社 代表)が「ユーザ視点の SharePoint 情報」を発信します。元大手製造業 SharePoint 運用担当。現SharePoint コンサルタント。お仕事のお問い合わせはこちらまでお願いします。当ブログにおける発信内容は個人に帰属し所属組織の公式発信/見解ではありません。
FB : 中村 和彦
blog: Be・Better!
MS MVP SharePoint 2009/10-2011/9
MS MVP Office 365 2012/10-2014/9