ディスカッションッ掲示板のスレッド/コメントに直リンクする

SharePoint に在る程度なれれば気づかれるかと思いますが、SharePoint のディスカッション掲示板は、かなり特殊なリストテンプレートです。
アイテムの親子関係を実現するために、かなり「無理矢理」設計されている観があります。

このため、ディスカッション掲示板のURL規則にはかなり癖があります。例えば、通常、リストはアイテムの ID 値から自在にアクセス出来ますが、しかし、ディスカッション掲示板ではそうはいきません。この問題は、特に日本語のような2バイト文字環境で顕著です。

例えば、あるディスカッション掲示板にワークフローを設定します。
ワークフローは、アイテムが投稿されると、特定ユーザに通知メールを送信します。
この時、メール本文には「そのスレッドを開くリンク」と「返信するリンク」を挿入したいのですが…。
実はこれ、結構大変なのです。

以下は、特定のスレッドを開くための URL サンプルです。
実際には赤字部分があれば、スレッドを開くことができます。
http://winserver2003r2/Lists/discussion/Flat.aspx?RootFolder=%2fLists%2fdiscussion%2f%e7%ae%a1%e7%90%86%e8%80%85%e6%8a%95%e7%a8%bf&FolderCTID=0x012002007F432F5939A9D34FAEC935BDD65D9834&TopicsView=http%3A%2F%2Fwinserver2003r2%2FLists%2Fdiscussion%2520demo%2FAllItems%2Easpx

鍵はパラメータ RootFolder です。
この値は リストのURL + 親アイテムのタイトルですが、UTF-8でエンコードされています。
これをデコードすると
%2f →「/」
%e7%ae%a1%e7%90%86%e8%80%85%e6%8a%95%e7%a8%bf → 「管理者投稿」

つまり、リストのパスと、親アイテムの件名からスレッドを開くことが出来ます。
しかし、実はこの処理は SharePoint Designer によるワークフローでは無理です。
親IDから件名は引けますが、それをエンコード出来ないのです。
英語環境ならこの必要が無いのですが…。残念。

そこで、パラメータから必要な値を取得してエンコードを行い、スレッドを開くURLを組立て、そこにリダイレクトしてくれる HTML を Javascript を使って作成してみました。
[JumpToSled.zip]

まず、SharePoint の適当なライブラリにアップしておます。
次に、このファイルに、以下のパラメータをつけてアクセスします。
すると、スクリプトが正しいURLを組み立てて、リダイレクトをおこなう仕組です。

domain=http://sharepointmaniacs.com
path=/SharePedia/Lists/TeaRoom/
title=テスト
例:http://sharepointmaniacs.com/documents/JumpToSled.htm?domain=http://sharepointmaniacs.com&path=/SharePedia/Lists/TeaRoom/&title=テスト

あとは、ワークフローでリンクをこの形式に組み立て挿入するだけです。
実際の環境では domain と path は固定でしょうし title は単純に件名です。

この仕組の優れた点は、このファイルひとつで、環境内の全てのディスカッション掲示板で利用出来ることです。
ワークフローで取得できる値については前回のエントリもご参考にしてみてください。

ディスカッションリストのアイテムが持つ値は?
ディスカッション掲示板のTIPS
続・ディスカッション掲示板で返答があったら通知が欲しい
ディスカッション掲示板で返答があったら通知が欲しい
ディスカッション掲示板で返答があったら通知が欲しい
情報管理ポリシーはディスカッションを削除できない


Author

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