2009/05/08

コンテンツクエリWebパーツで、アイテム詳細画面に遷移した後の戻り先

リスト形式のデータを表示するWebパーツの場合は、Webパーツからアイテムの詳細画面へ遷移して、詳細画面の「閉じる」ボタンをクリックすると、遷移元の画面に戻ります。
コンテンツクエリWebパーツの場合は、 異なる振る舞いとなり、「閉じる」でリストの一覧画面に遷移してしまいます。

内部の仕組みとして、リストを表示するWebパーツは直接アイテムの詳細画面に遷移しています。
一方、コンテンツクエリWebパーツの場合は複数のリストからアイテムを表示しているため、内部的にはリストを判別して、リスト一覧の画面に行ってから、アイテムの詳細画面に行くような仕組みになっているようで、そのため、戻り先がトップ画面などコンテンツクエリWebパーツの配置先ではなくリストの一覧画面となってしまうようです。

コンテンツクエリWebパーツのXSL(ItemStyle.xsl)をカスタマイズすることで、リストを表示するWebパーツと同じような振る舞いに変更できます。

【変更箇所】
変更したいスタイル毎に変更します。

【変更場所】
変更したいスタイルで、Aタグ内の後ろに、onclick="GoToLink(this);return false;" を追加します。
例:<a href="{$SafeLinkUrl}" title="{@LinkToolTip}" style="{$FontStyle}" onclick="GoToLink(this);return false;">

2009/05/07

WSS、MOSS SP2関連情報

2009年4月29日にSharePoint関連のサービスパックがリリースされましたが、今後リリースされるMOSS関連パッチ適用の前提条件としてSP2が前提となる可能性があるため、可能な限り本サービスパックの適用が推奨されるようです。

・WSS 3.0 SP2 詳細

(http://support.microsoft.com/kb/953338)

・Office Servers SP2 詳細

(http://support.microsoft.com/kb/953334)

  • MOSS2007SP2とWSS3.0SP2には、以下のアップデートが含まれています。

    ・Service Pack1

    ・Infrastructure Update

    ・2009年2月までの累積的な更新プログラム

    詳細情報:

    http://technet.microsoft.com/en-us/office/sharepointserver/bb735839.aspx

    SP2ホワイトペーパー:(SP2インストール前の確認、更新情報)

    http://technet.microsoft.com/en-us/library/dd767703.aspx

  • SP2の概要
    • 既知の問題解消
    • パフォーマンス、利便性の改善 新しいタイマージョブは、DBのパフォーマンスを向上させるために自動的にコンテンツDBのインデックスを再作成します。 ⇒SP1では、SQL クエリによる手動メンテナンスが必要
    • 内部仕様の改善 IE8,FireFox2.0/3.0のサポート ⇒W3C標準に準拠したIE8が新たにサポート
    • SharePoint Server 2010への対応 SharePoint Server 2010へアップグレードする際に必須となるコマンド オプションが追加

  • WSS 3.0 SP2 適用により解消される問題

説明

サイトの管理者は、それらのサイトコンテンツタイプに関するポリシーを作成でき、そのコンテンツタイプを使用することでアイテムを期限切れにすることができます。 もしも1つのポリシーが1つのサイト内に設定されている場合は、そのサイトのサブサイト内のコンテンツタイプにそのポリシーを設定できません

権限付きフォルダに下書きアイテムが含まれている場合、データ移行時にエラーが発生する可能性があります

最上位のサイト(/1/)がない場合に下位サイト(/1/2/)をリストアするためのSOAP呼び出しを利用できない

文書プロパティに大文字のサロゲートUnicode文字が含まれている場合、正しく検索できない可能性があります

WebUrlFromPageUrl SOAPメソッド呼び出し時に正しくWebアプリケーションに取り組めない

SharePointがフィールド名に対して既に設定されているフィールド値の変更を許可しない

データベースが読み取り専用に設定された後に予期しないエラーが表示される可能性があります

ブログサイトテンプレートで作成されたサイトでコメントのフィールドが送信できない

サイトコレクションの管理者でないユーザーがコンテンツDBのマージコマンドを実行するとうまく動かない

ファイルの最大パス長を超えた際に、警告が表示されない

64bitサーバを利用している際にページにエラーが表示される可能性があります

容量の大きいファイルをチェックイン/チェックアウトした後、予期しない変更が発生可能性があります

サイトがクォータ制限に達したときサイトにアクセスできなくなる

集計されたフィル―ドもしくは集計されたフィールドの参照でグループ化されているリストの表示が失敗する

特定言語で正しく通知がされない可能性があります

利用状況の概要が正しく表示されない可能性があります

権限の継承を切断するときに時間がかかる可能性があります

複数のフィーチャ―が有効化されているサブサイトのインポートが失敗する

ブログの送信からEメールを送信すると正しく機能しない可能性があります

日本語コンテンツの翻訳が誤っている

ビューが削除された後、検索インデックス対象となっていた列がインデックスされない可能性があります

64bitサーバー上でSharePoint Timer サービスが停止する可能性があります

SharePointが必要以上のメモリを利用する

32bitシステムは、低いメモリ状態で稼働する可能性があります

アイテムレベルの権限付与がされており、ワークフローを利用しているサイトをインポートしようとするとエラーになる

招待メールのメッセージ リンクが壊れている

特定言語で検索がうまく機能しない可能性があります

利用状況ログディレクトリを変更しようとすると追加のログが作成されない可能性があります

利用状況に問題がある場合にそのメッセージ表示が新しい行に正しく表示されない

複数グループで利用されているリストビューWebパーツがほかのWebパーツでフィルタ化されているとページを正しく表示することができない

削除されているサイトをクロールしようとする可能性があります

ドキュメントライブラリのビューの修正フィールドでユーザーが[today]もしくは[me]を選択したとき、以下のエラーが表示される

「フィルターの値は、サポートされているデータフォーマットではありません」

  • MOSS2007 SP2 適用により解消される問題

STSADM –o deletessp –title <SSP名> -force コマンドを実行した際、SSPデータベースの削除が正しく動作しない(-deletedatabases オプションを付与しても改善されない)問題の修正

Office2003かVista以前のOSバージョンで編集モードでファイルを開くと、誤って読み取り専用でファイルが開かれてしまう問題の修正

SSPに関する情報表示(stsadm –o enumssp)が失敗するSTSAMDコマンドの問題修正

SPS2003英語バージョンからMOSS2007英語バージョンに段階的アップグレードするときの問題修正

事前に検索データベースが作成されているファームをアップグレードしている最中にPSConfigが失敗する問題の修正

スペースが含まれているサイトURLのリダイレクトに失敗する問題の修正

コンテンツエディタWebパーツ内で対象ユーザフィールドを再度開くときに失敗する問題の修正

SPS2003がインストールされているWindows2003からWindows2008にアップグレードのサポート

MOSSにアップグレードする際にPSConfigが失敗する問題の修正

ユーザー権限を変更後、リンク切れスキャン機能が利用できない問題の修正

ファームのフルリストア時に新しいサーバーの完全修飾URL名が古いサーバーのホスト名になる問題の修正

個人用リンクにローカルファイルシステム(例: file:// 、c:\Folder)を追加に失敗する問題の修正

複数ファームを超えて個人用サイトのユーザープロファイルがリダイレクトできない問題の修正

VistaユーザーがWindows NT 3.0ユーザーであるときWSS利用状況にレポート反映されない問題の修正

不正なファイル名(例えば、アンパサンドを含むファイル名)で文書を作成するもしくは、WSS3.0で提供されているオブジェクトモデルであるFileDialog.Execute()コマンドを利用したプログラムでファイルを保存しようとしたときにユーザー通知なしに文書の保存が失敗する問題の修正

仕事仲間のインポートエンジンは、Outlookが開いている間15分おきにレジストリキーの読み込み要求が発生していましたが、Outlook起動時に1回だけレジストリキーを読み込みます。これは、Outlookからクライアントシステムへの影響を下げるためです。

  • 既知の問題および動作の変更

この Service Pack のインストール後に、以下の問題が発生することがあります (一部の資料には英語版 (未翻訳) のコンテンツが含まれている場合があります)。

  • 968768 2007 Office スイート Service Pack 2 または 2007 Office Servers Service Pack 2 をインストールした後、一部のファイル形式がブロックされる

  • 960577 Windows SharePoint Services および SharePoint Server Pre-Upgrade Checker 関するサポート技術情報 (Microsoft Knowledge Base) のすべての資料の一覧

  • 968785 Windows SharePoint Services 3.0 Service Pack 2 をインストールすると、Windows SharePoint Services 3.0 データベースを自動的に最適化できる

  • 968786 Windows SharePoint Services 3.0 Service Pack 2 でホスト ヘッダー ベースのサイト コレクションのクロールがサポートされる

  • 968787 Windows SharePoint Services 3.0 で特定のサイト コレクションを削除できないことがある

  • 968788 Windows SharePoint Services 3.0 Service Pack 2 により、フォーム ベース認証モードの Windows SharePoint Services サイトが SharePoint Designer 2007 からの匿名アクセス要求に応答する方法が変更される

  • 968173 2007 Microsoft Office スイート Service Pack 2 および Windows SharePoint Services 3.0 Service Pack 2 のインストール時に発生する可能性のある既知の問題

サイトディレクトリでサイト コレクションを作成する際に「サイト カテゴリ」が表示されない

通常、サイトディレクトリからサイトもしくはサイトディレクトリを作成する場合に、カテゴリの選択が行えますが、サイト ディレクトリからサイト コレクションを作成するように設定したある環境で、このカテゴリ セクションが表示されないという現象が発生しました。

その際に調査&収集した情報をまとめておきます。

■NTLM またはkerberos 認証である必要がある

「サイト カテゴリ」セクションを表示させるには、NTLM またはkerberos 認証である必要があります。

原因は、サイトの作成ページに表示される [サイト カテゴリ] セクションはDefaultCredentials プロパティが利用されているためとのことです。 そのため、MOSSの認証方式で「基本認証」を使用している場合には「サイト カテゴリ」が表示されず、表示させる方法もありません。

【参考:DefaultCredentials プロパティ】

http://msdn.microsoft.com/ja-jp/library/system.net.credentialcache.defaultcredentials(VS.71).aspx
DefaultCredentials プロパティは、NTLM 認証、ネゴシエート認証、および Kerberos ベースの認証だけに適用されます。DefaultCredentialsは、アプリケーションが実行されている現在のセキュリティコンテキストのシステム資格情報を表します。クライアント側アプリケーションでは、通常、アプリケーションを実行しているユーザーのWindows 資格情報(ユーザー名、パスワード、およびドメイン)です。ASP.NET アプリケーションでは、既定の資格情報は、ログインしているユーザーまたは偽装されているユーザーのユーザー資格情報です。

■クライアントにルート証明書が正しくインストールされていない場合

https(SSL)通信の場合になりますが、クライアントにルート証明書が正しくインストールされていないと、MOSSの認証方式でNTLMおよびKerberos認証を使用していても、「サイト カテゴリ」が表示されません。

サイドリンクバーをフライアウト表示すると縦位置がずれてしまう

サイドリンクバーをフライアウト表示させるようなカスタマイズ方法として、下記サイトなどでAspMenu コントロールでの方法が紹介されています。

[方法] サイド リンク バーの表示をカスタマイズする

http://msdn.microsoft.com/ja-jp/library/ms466994.aspx

ただ、この手順だけですと、以下のような問題が発生します。
・ASPMenu をフライアウト表示するときに、カーソル位置のメニューとサブメニューの縦位置が大きくずれることがある。

この問題の修正方法をまとめておきます。

■問題の再現方法
・画面縦サイズより ASPMenu の縦幅が大きい状態でブラウザを表示する
・表示しきれていない ASPMenu を表示するために画面を下にスクロールする。
・そこでサブメニューを表示しようとすると、サブメニューの表示位置がカーソル位置から大きくずれてしまう。

■回避策
スクリプトを修正し、既定のスクリプト関数をコピーして現象発生の要因となる処理を修正した関数を定義し、既存の関数を置き換える処理を実装する。
置き換える関数の定義は規模が大きいですが、既存処理との変更点としては、以下の4 行をコメント アウトしているだけのため、この現象を回避する以外には基本的には影響はないはず。

-- コメント アウト箇所 開始 --

/*
else if (document.documentElement && (typeof(document.documentElement.scrollTop) != "undefined")) {
scrollTop = document.documentElement.scrollTop;
scrollLeft = document.documentElement.scrollLeft;
}
*/

-- コメント アウト箇所 終了 --

■サンプル スクリプト
なお、以下はサンプル スクリプトです。
実装にあたっては適宜十分な検証を実施してください。

【手順】
1. フライ アウト メニューを実装している default.master を開きます。
2. 以下のスクリプトを、コード終端の </BODY> タグの前に貼り付けて、保存します。

-- サンプル 開始 –

<script type="text/javascript">
function PopOut_Position(panel, hideScrollers) {
if (window.opera) {
panel.parentNode.removeChild(panel);
document.forms[0].appendChild(panel);
}
var rel = WebForm_GetElementById(panel.rel);
var relTable = WebForm_GetElementByTagName(rel, "TABLE");
var relCoordinates = WebForm_GetElementPosition(relTable ? relTable : rel);
var panelCoordinates = WebForm_GetElementPosition(panel);
var panelHeight = ((typeof(panel.physicalHeight) != "undefined") && (panel.physicalHeight != null)) ?
panel.physicalHeight :
panelCoordinates.height;
panel.physicalHeight = panelHeight;
var panelParentCoordinates;
if (panel.offsetParent) {
panelParentCoordinates = WebForm_GetElementPosition(panel.offsetParent);
}
else {
panelParentCoordinates = new Object();
panelParentCoordinates.x = 0;
panelParentCoordinates.y = 0;
}
var overflowElement = WebForm_GetElementById("__overFlowElement");
if (!overflowElement) {
overflowElement = document.createElement("img");
overflowElement.id="__overFlowElement";
WebForm_SetElementWidth(overflowElement, 1);
document.body.appendChild(overflowElement);
}
WebForm_SetElementHeight(overflowElement, panelHeight + relCoordinates.y + parseInt(panel.y ? panel.y : 0));
overflowElement.style.visibility = "visible";
overflowElement.style.display = "inline";
var clientHeight = 0;
var clientWidth = 0;
if (window.innerHeight) {
clientHeight = window.innerHeight;
clientWidth = window.innerWidth;
}
else if (document.documentElement && document.documentElement.clientHeight) {
clientHeight = document.documentElement.clientHeight;
clientWidth = document.documentElement.clientWidth;
}
else if (document.body && document.body.clientHeight) {
clientHeight = document.body.clientHeight;
clientWidth = document.body.clientWidth;
}
var scrollTop = 0;
var scrollLeft = 0;
if (typeof(window.pageYOffset) != "undefined") {
scrollTop = window.pageYOffset;
scrollLeft = window.pageXOffset;
}
/*
else if (document.documentElement && (typeof(document.documentElement.scrollTop) != "undefined")) {
scrollTop = document.documentElement.scrollTop;
scrollLeft = document.documentElement.scrollLeft;
}
*/
else if (document.body && (typeof(document.body.scrollTop) != "undefined")) {
scrollTop = document.body.scrollTop;
scrollLeft = document.body.scrollLeft;
}
overflowElement.style.visibility = "hidden";
overflowElement.style.display = "none";
var bottomWindowBorder = clientHeight + scrollTop;
var rightWindowBorder = clientWidth + scrollLeft;
var position = panel.pos;
if ((typeof(position) == "undefined") || (position == null) || (position == "")) {
position = (WebForm_GetElementDir(rel) == "rtl" ? "middleleft" : "middleright");
}
position = position.toLowerCase();
var y = relCoordinates.y + parseInt(panel.y ? panel.y : 0) - panelParentCoordinates.y;
var borderParent = (rel && rel.parentNode && rel.parentNode.parentNode && rel.parentNode.parentNode.parentNode
&& rel.parentNode.parentNode.parentNode.tagName.toLowerCase() == "div") ?
rel.parentNode.parentNode.parentNode : null;
WebForm_SetElementY(panel, y);
PopOut_SetPanelHeight(panel, panelHeight, true);
var clip = false;
var overflow;
if (position.indexOf("top") != -1) {
y -= panelHeight;
WebForm_SetElementY(panel, y);
if (y < -panelParentCoordinates.y) {
y = -panelParentCoordinates.y;
WebForm_SetElementY(panel, y);
if (panelHeight > clientHeight - 2) {
clip = true;
PopOut_SetPanelHeight(panel, clientHeight - 2);
}
}
}
else {
if (position.indexOf("bottom") != -1) {
y += relCoordinates.height;
WebForm_SetElementY(panel, y);
}
overflow = y + panelParentCoordinates.y + panelHeight - bottomWindowBorder;
if (overflow > 0) {
y -= overflow;
WebForm_SetElementY(panel, y);
if (y < -panelParentCoordinates.y) {
y = 2 - panelParentCoordinates.y + scrollTop;
WebForm_SetElementY(panel, y);
clip = true;
PopOut_SetPanelHeight(panel, clientHeight - 2);
}
}
}
if (!clip) {
PopOut_SetPanelHeight(panel, panel.clippedHeight, true);
}
var panelParentOffsetY = 0;
if (panel.offsetParent) {
panelParentOffsetY = WebForm_GetElementPosition(panel.offsetParent).y;
}
var panelY = ((typeof(panel.originY) != "undefined") && (panel.originY != null)) ?
panel.originY :
y - panelParentOffsetY;
panel.originY = panelY;
if (!hideScrollers) {
PopOut_ShowScrollers(panel);
}
else {
PopOut_HideScrollers(panel);
}
var x = relCoordinates.x + parseInt(panel.x ? panel.x : 0) - panelParentCoordinates.x;
if (borderParent && borderParent.clientLeft) {
x += 2 * borderParent.clientLeft;
}
WebForm_SetElementX(panel, x);
if (position.indexOf("left") != -1) {
x -= panelCoordinates.width;
WebForm_SetElementX(panel, x);
if (x < -panelParentCoordinates.x) {
WebForm_SetElementX(panel, -panelParentCoordinates.x);
}
}
else {
if (position.indexOf("right") != -1) {
x += relCoordinates.width;
WebForm_SetElementX(panel, x);
}
overflow = x + panelParentCoordinates.x + panelCoordinates.width - rightWindowBorder;
if (overflow > 0) {
if (position.indexOf("bottom") == -1 && relCoordinates.x > panelCoordinates.width) {
x -= relCoordinates.width + panelCoordinates.width;
}
else {
x -= overflow;
}
WebForm_SetElementX(panel, x);
if (x < -panelParentCoordinates.x) {
WebForm_SetElementX(panel, -panelParentCoordinates.x);
}
}
}
}

if (typeof(overridePopOut_Position) == 'function' && typeof(PopOut_Position) == 'function') { PopOut_Position = overridePopOut_Position; }
</script>

-- サンプル 終了 --