SharePoint 2013 ワークフローで「現在のリスト」と「現在のアイテム」のURLを取得する
SharePoint 2013 のワークフローコンテキスト(変数)には、ワークフローを実行しているリスト、あるいはアイテムの(完全な)URL が(何故か)ありません。しかし既存の変数の組み合わせと計算で、導き出すことができます。
前回の「SharePoint 2013 ワークフローで取得できる変数の一覧」を見ると、「現在のサイト」と「現在のアイテム」は変数としてきちんと存在します。しかしこの「現在のアイテム」がクセモノで、ID が内部的な形式で表記されており、実際には有効でない(クリックしても開かない)URLなんですよね。
そこで、この「現在のアイテム」を文字操作アクションでどうにかしてやることが、工夫の軸になります。
現在のリストの URL を取得する
まず、アクション「文字列からサブ文字列を検索する」を利用し、ワークフローコンテキストの「現在のアイテムのURL」から現在のアイテムの「ID」に「_.000」をつけた文字を検索します。
これは、「現在のアイテムのURL」の何文字目から実際のアイテムの ID 値が始まっているかを調べています。ただし「_.000」がないと、もし URL に ID と同じ数字が含まれた場合にきちんと動作しません。結果(文字数)は変数に出力されます。
ちなみに左[文字列]は[fx]をクリックして設定します。右[サブ文字列]は[…]をクリックして、文字列ビルダーを呼び出し、[参照の追加または変更]から変数を挿入して _.000は手書きです。
次に「文字列の先頭からサブ文字列を抽出する」アクションで、変数「現在のアイテムのURL」からこの文字数だけ抽出すると、リスト URL の末尾部分を得ることができます。 Lists/List8/1_.000 → Lists/List8/ のような感じです。
最後に、「ワークフローの変数を設定する」アクションで、[…]の文字列ビルダーを起動し、これをワークフローコンテキストの「作業中サイトのURL」と繋げてやれば
https://owlseye22.sharepoint.com/subsite/Lists/List8/
のように、完全なリストの URL を得ることが出来ます。
現在のアイテムの URL を取得する
上のリスト URL が取得できていればこちらは簡単です。アイテムの URL、正確にはアイテムを表示するフォームの URL は必ず「/Lists/List8/DispForm.aspx?ID=1」の形式になっています。
そこで、「ワークフローの変数を設定する」アクションで、[…]の文字列ビルダーを起動し、先程のリストURLと、「/DispForm.aspx?ID=」、それに現在のアイテムの変数「ID」を繋げます。
とりあえず、取得した値をアイテムの本文に書き込んでみたのがこちら。
もちろん、実際の運用では、こんな手間をかけず、最初から URL を手打ちしてしまった方が手っ取り早いです(苦笑)しかし、できるだけ汎用的に作ろうとすると、この辺りを動的に取得する必要があります。こんな方法もあったな、と覚えておいて頂けると良いかもしれません。