コンテンツ クエリ Web パーツ利用時に 404 エラー の原因と回避方法

こんにちは、奥田です。今回はちょっと遭遇した SharePoint の Web パーツのエラーの原因と回避方法をご紹介しますね。

コンテンツ クエリ Web パーツを使って、サイト コレクション内のすべてのサイトからお知らせアイテムを取得する設定を行いました。

<コンテンツ クエリ Web パーツで設定した内容>

クエリ

ソース

 このサイト コレクションのすべてのサイトからアイテムを表示する

リストの種類

 お知らせ

コンテンツ タイプ

 リスト コンテンツ タイプ - お知らせ

コンテンツ クエリ Web パーツに表示されたお知らせアイテムをクリックすると、そのアイテムの表示画面 (DispForm.aspx) が開くというのが標準の動作ですが、この間検証した環境では、そのアイテムの表示画面が出ず 404 エラーが出てしまいました。

コンテンツ クエリ Web パーツの中身を調べてみたところ、環境によってこんなことになることがあるみたいです。

どんな環境でこの現象が起こるかというと、http://<サーバー名&gt; のURL に SharePoint サイトを構築していない環境です。

コンテンツ クエリ Web パーツに表示されたアイテムをクリックすると、まずはアイテムのプロパティ情報を渡し、http://<サーバー名>/_layouts/CopyUtil.aspx にページ遷移されるようになっています。そしてアイテムのプロパティ情報を受け取った CopyUtil.aspx がそのアイテムの表示画面 (DispForm.aspx) へのパスを動的に生成し、リダイレクトしてくれる。というのが内部の動作です。

なので、http://<サーバー名> の URL に SharePoint サイトが構築されていないと、本来はユーザーが目にすることなく内部で動作されている http://<サーバー名>/_layouts/CopyUtil.aspx へのページ遷移の部分で 404 エラーになってしまうようです。

私がエラーを出してしまった環境は、http://<サーバー名> の URL は SharePoint サイトを構築していなかったのですね。ルートの場所に SharePoint サイトがない場合、CopyUtil.aspx にページ遷移するためのパスを自動的に変更してくれてもいいのに・・・と思ってしまいましたが、どうやらそんなことはしてくれないようです。

回避策

1. コンテンツ クエリ Web パーツを利用するサイト コレクションのトップ レベル サイトを開きます。

2. サイド リンク バーから [すべてのサイト コンテンツの表示] をクリックします。

3. すべてのサイト コンテンツ画面から [スタイル ライブラリ] をクリックして開きます。

4. スタイル ライブラリから、[XSL Style Sheets] フォルダを開き、「ContentQueryMain」 スタイルシートファイルのメニューを展開して、[送信] – [コピーのダウンロード] をクリックして、ローカル上の任意の場所にコピーを保存します。

5. ローカル上にコピーした 「ContentQueryMain.xsl」をテキスト エディタなどで開きます。

6. 以下のタグを探し、CopyUtil.aspx へのパスを変更し,上書き保存します。
(既定では162 ~ 164 行目)

赤字の部分を追加。
(http://<サーバー名>/sites/top がサイト コレクションのトップ レベル サイトの場合)

<xsl:if test="$UseCopyUtil = ‘True’">
 <xsl:value-of select="concat(‘/sites/top/_layouts/CopyUtil.aspx?Use=id&amp;Action=dispform&amp;ItemId=’,@ID,’&amp;ListId=’,@ListId,’&amp;WebId=’,@WebId,’&amp;SiteId=’,$SiteId)"/>
</xsl:if>

7. トップ レベル サイトのスタイル ライブラリに戻り、[アップロード] をクリックして、編集した「ContentQueryMain.xsl」をアップロードします。

8. アップロードする際に、[名前] と [タイトル] を入力する画面が表示されるので、何も変更せず、[チェックイン] をクリックします。

これで、回避策の設定は完成です。コンテンツクエリ Web パーツでアイテムをクリックしたとき利用する CopyUtil.aspx へのパスをスタイルシート内で変更を行いました。

もし、http://<サーバー名> の URL に SharePoint サイトを構築していない環境で、コンテンツクエリ Web パーツを利用する場合は、この回避策を行ってください。

奥田 理恵

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中