絶対URLからSPListを取得する方法です。
結論から言うと、SPListはhttp://から始まる絶対URLで取得することができません。
SPListはホスト名からの相対URLで取得します。管理パスとかサブサイトとかで階層がどんなに深くなっていても、ホスト名からの相対URLを指定します。
従って、以下のコードのように何らかのやり方でホスト名までの部分を削除し、その値をSPWebのGetListメソッドに渡します。
1 | <span class="lnum"> 1: </span>Uri uri = <span class="kwrd">new</span> Uri(<span class="str">"http://test.co.jp/test/Lists/List1/DispForm.aspx?ID=1"</span>); |
1 | <span class="lnum"> 2: </span>SPSite site = <span class="kwrd">new</span> SPSite(uri.AbsoluteUri); |
1 | <span class="lnum"> 3: </span>SPWeb web = site.OpenWeb(); |
1 | <span class="lnum"> 4: </span><span class="kwrd">string</span> targetUrl = uri.AbsoluteUrl.Replace(<span class="kwrd">string</span>.Format(<span class="str">"{0}{1}"</span>, uri.GetLeftPart(UriPartial.Scheme), uri.Host), <span class="str">""</span>); |
1 | <span class="lnum"> 5: </span>SPList list = web.GetList(targetUrl); |
これで問題なさそうですが、SPWeb.GetListメソッドは一つだけ注意点があります。
SPWeb.GetListメソッドは、引数として渡されたURLのファイル名の部分まで意味を持ちます。
例えば、リスト名までは合っていてもファイル名の部分に間違いがあると、SPListを取得することができません。
以下のコードは、DispForm.aspxがDisp.aspxと間違えているため、SPListは取得できません。
1 | <span class="lnum"> 1: </span>web.GetList(“/test/Lists/List1/Disp.aspx?ID=1”); |
なお、ID=1の部分で存在しないアイテムIDが指定されていても、ファイル名まで合っていれば問題なくSPListを取得できます。
従って、SPWeb.GetListメソッドでSPListを取得する場合は、ファイル名から先のURLは削除しておいたほうが良いです。
指定の絶対URLでSPListが取得できない場合、FileNotFoundExceptionが発生します。