2008年1月

2008年1月16日 (水)

データベース周りに関する質問も時々受けますので、今日はコンテンツDBについて取り上げてみたいと思います。サイトコレクションはコンテンツDB内に作成されます。既定では Web アプリケーションを作成するごとに、新規に1つ作成されます。

コンテンツ データベースを構成する

コンテンツ DB 内に作成できるサイトの数には上限があります。既定では15,000個作成できるようになっています。こうした作成できるサイトコレクションの最大サイト数や現在作成されているサイトコレクションの数は [SharePoint サーバーの全体管理] から設定および確認ができます。 データベースは日々肥大化していくことになりますから、SharePoint をインストールしたら最初にこの値は調整しておいた方がよいでしょう。

コンテンツ データべース の設定

[SharePoint サーバーの全体管理]-[Webアプリケーション構成の管理] の [SharePoint Web アプリケーション構成の管理]セクションの "コンテンツ データベース"にアクセスする

Contentdb1

コンテンツ データベースを追加する

上記の設定画面から必要に応じてコンテンツDBを追加できます。データベースを分割して管理したい場合などに使用します。さて、新たにコンテンツDBを作成し複数のコンテンツDBが存在する場合、新らしいサイトコレクションはどのデータベースに作られるのでしょうか。実は"最大サイト数"-"現在のサイト数" の差の大きいコンテンツDBが使用されるようになっています。

たとえば、次のように設定したとします。

  • Content_DB_1 : 最大サイト数 10 、作成されているサイト数 5
  • Content_DB_2 : 最大サイト数 10、作成されているサイト数 0

新規にサイトコレクションを作成すると、Content_DB_2 に新たにサイトが作成されます。

特定のコンテンツ データベースに新たなサイトコレクションを作成する

なお、特定のコンテンツDBに新規にサイトコレクションを作るようにしたい場合は、目的のコンテンツ DB 以外をオフラインにしておく必要があります。

[図.オフラインの設定]
Contentdb2

サイトコレクションを別のコンテンツDBに移動する

この機能を利用して、既存のサイトコレクションを新しいコンテンツDBへ移動することも可能です。

別のコンテンツDBへサイトコレクションを移動する

  1. コンテンツ DB を新たに追加する
  2. 次のコマンドを実行する

    stsadm.exe -o backup http://moss2007/sites/top -filename e:\Backup\topsite.bak
    stsadm.exe -o deletesite http://moss2007/sites/top

  3. 移動先のコンテンツDBを以外をすべてオフラインにする
  4. 次のコマンドを実行する

    stsadm.exe -o restore http://moss2007/sites/top -filename e:\Backup\topsite.bak

2008年1月15日 (火)

SharePoint Designer Team Blog からの Tip です。このブログにはSharePoint Designer に関する Tips が数多く掲載されています。研修でもこのブログを参考にした内容を扱っているのですが、今回は研修でも取り上げなかった Tip です。おそらく日本語での解説はなかったように思いますので、参考までにご紹介します。

SharePoint Designer 2007 (SPD) を使用したカスタマイズでは「データビュー」をよく用います。データビューを挿入することで、ノンコーディングで手軽に任意のデータベースや SharePoint リストの情報を表示できるようになります。今回紹介する Tips もデータビューを使用した例です。

2つのカスタム リストの情報を使用します。一方のリストのデータをデータビューで表示させます。このとき同時に ASP.NET のドロップダウンリスト コントロールを配置します。このコントロールにもう一方のリストデータをひもづけて選択肢として表示されるようにしデータビューをフィルタできるように設定します。

[図: ドロップダウンリストによるフィルタ]

Dataviewfilter2

リストの作成

  1. 2つのリストを作成する。一つは"製品カテゴリ"、もうひとつは"製品リスト"という名前にする。製品カテゴリには、製品カテゴリ列を用意しておく。また製品リストには"製品名"列と"製品カテゴリ"列の2つを用意する。
  2. 2つのリストにテスト用に何件かデータを追加しておく。

カスタムページ (コンテンツ ページ)の作成

  1. SharePoint Designer 2007 を起動する。
  2. [ファイル]メニューから[サイトを開く]をクリックする。
  3. "サイト名" ボックスにカスタム ページを作成したいサイトの URL を入力し、[開く]をクリックする。
  4. [ファイル]メニューから[新規作成]-[マスタページから作成]をクリックする。
  5. マスタページの選択ウィンドウで[OK]をクリックする。
  6. [ファイル]メニューから[名前を付けて保存]をクリックし、任意の名前でドキュメントライブラリなどの任意の場所に保存しておく。

コントロールとデータビューの追加

  1. [表示]メニュー-[ページ]-[デザイン]をクリックし、デザインビューにしておく。
  2. PlaceHolderMain タブを選択したら領域の右側に表示される矢印(>) をクリックし、"カスタム コンテンツの作成" をクリックする。

    Dataviewfilter3

  3. [作業ウィンドウ]メニューから[データソースライブラリ]をクリックする。
  4. PlaceHolderMain の部分を選択したまま、[データソース ライブラリ]の"製品カテゴリ" をクリックし、[データソース コントロールの挿入] をクリックする。(SPDataSourceコントロールが追加される)
  5. [作業ウィンドウ]メニューから[ツールボックス]をクリックする。
  6. ツールボックス内からASP.NET コントロールの標準コントロールとして "DropDownList" コントロールを選択し、4.で追加した SPDataSourceコントロールの下にドラッグアンドドロップする。
  7. DropDownListコントロールの右側に表示される矢印(>)をクリックし、"データソースの選択" をクリックする。
  8. データソースの選択で "spdatasource1"を選択し、DropDownList で表示するデータフィールドと値のデータフィールドに"製品カテゴリ名"として使用している列名を指定し[OK]をクリックする。
  9. AutoPostBack を有効にする。

    Dataviewfilter4

  10. 再び、[作業ウィンドウ]メニューから[データソースライブラリ]をクリックする。
  11. "製品リスト"をDropDownListの下にドラッグアンドドロップする。これによりデータビューが追加される。
  12. データビューの右端に表示される矢印(>)をクリックし、[列の編集]をクリックし表示したい列のみを表示するように調整し [OK] をクリックする。
  13. "フィルタ" をクリックする。
  14. フィルタ条件ウィンドウで、フィールド名に"製品カテゴリ" 、条件式として "次の値に等しい" 、値として "新しいパラメータを作成" をクリックする。
  15. データビューのパラメータ ウィンドウで Param1 のパラメータソースを "コントロール" に変更し、コントロールIDに"DropDownList1"と入力する。また、既定値に製品カテゴリとして入力してある項目のいずれかを入力しておく(例: 飲料)。[OK] をクリックする。
  16. 最後にページファイルを上書き保存する。

完成したらF12 キーを押下してプレビューし動作を確認します。


参考: SharePoint Designer Team Blog (英語)

2008年1月11日 (金)

昨日は SPD に関するセミナーを実施していましたので、今日はMOSS UI に関するネタにします。

これまで、トップページなどでサイドリンクバーを非表示にしたいのですがどうしたらよいですかというご質問をいただいたことが何度かありました。いつもは、SharePoint Designer 2007 (SPD) で行う必要があるとお答えしていたのですが、なんとSPD を使わなくても手軽に非表示にする方法があるのを見つけました (この技は以前のバージョンから使えたようですね)。

コンテンツ エディタ Web パーツを使用すると簡単に非表示にできます。コンテンツエディタ Web パーツに既定のスタイル(CSS) を上書きするコードを記述します。

手順

  1. サイドリンクバーを非表示にしたいサイトにコンテンツ エディタ Web パーツを追加する
  2. コンテンツ エディタ Web パーツの ソースエディタ を開き、次のコードを記述します。
  3. 設定を保存して完了です。

コンテンツ エディタ Web パーツの意外な使い道ですね。


参考: Todd Bleeker's 12 Hive

2008年1月 9日 (水)

MOSS サイトを管理していて混乱しがちなのがユーザー管理です。特に、MOSS の場合は WSS とは異なり "ユーザープロファイル" を持っていることが混乱を招く最大の要因だと思います。今回は、ユーザー管理に関する私なりの調査内容を記しておきます。※今回は SharePoint が利用する SQL Server データベースの内容についても記述しますが、SharePoint が利用している DB は基本的には参照のみを行い、編集などはしないように注意してください。DBの直接編集はサポートされておらず、SharePoint API を通じて操作することが推奨されています。

1.よくある間違い : ユーザー認証とユーザー プロファイル

セミナーを実施していてよく勘違いされていると感じるのが MOSS のユーザー認証の仕組みです。MOSS はユーザープロファイルを保持できるが故に、ユーザー プロファイルを作成することでユーザー認証ができるようになると考えがちです。しかし、それは間違いです。MOSS そのものがユーザー認証の機能を持っているわけではありません。あくまで、Active Directory (AD) なら ドメインコントローラが認証しますし、スタンドアロンであればローカルのWindows Server 自体がユーザー認証をします。その後、各コンテンツデータベースに格納されているユーザー情報等を使用して、承認(だれにどのようなアクセスが許可されているか) をMOSSがコントロールします。ユーザープロファイルは、"人" にかかわる情報を蓄積している単なるデータベースであり、検索等の目的で利用するもので認証には利用されません。

  • MOSS 上でユーザーを作成することはできない
  • サイトには、あくまで、ADもしくはローカルサーバー上で作成したユーザーを "追加" しているに過ぎない
  • 認証 (Authentication) はADもしくはローカルサーバーが行い、その後 MOSS は承認 (Authorization) を行う

まずはこの点を整理しておくことが肝心です。

2. ユーザー情報の格納場所

ユーザープロファイルが構成されている場合は、ユーザー情報は次の2箇所に格納されます。

  • コンテンツ DB : ユーザー情報を格納
  • 共有サービス プロバイダのDB : ユーザープロファイルを格納

コンテンツDB は、通常は "WSS_Content" もしくは" WSS_Content_<GUID>"  という名前です。また、コンテンツDBは既定では Web アプリケーションごとに1つ作成されますので、3つWebアプリケーションを作成していれば、3つのコンテンツDBが作られているはずです。また共有サービスプロバイダ DB は既定では "SharedServices1_DB" という名前です。

  • コンテンツDBとWebアプリケーションの対応付けの確認方法:
    [SharePoint 3.0 サーバーの全体管理] - [Webアプリケーション構成の管理]-[コンテンツデータベース]

3. コンテンツDB内のユーザー情報

コンテンツDB 内で最初に確認するべきテーブルが 'dbo.UserInfo' です。主な列は次の通りです。

列名説明
tp_SiteID サイトコレクションを識別するID
tp_ID ユーザーを識別するID
tp_GUID AD または ローカルアカウントの SID (コピーされる)
tp_Deleted サイトコレクションから削除されかどうかを示すフラグ
tp_Login ログイン アカウント
tp_Title アカウントの表示名
tp_Email 電子メール アドレス

サイトにユーザーを追加すると、AD 環境では AD のディレクトリデータベースからユーザー情報の一部が UserInfo テーブルに一方向にコピーされます。テーブルを見ると、ユーザー情報はサイトコレクション単位で管理されていることがわかります。たとえば、"SiteCollectionA" と "SiteCollectionB" の2つのサイトコレクションがある場合に、それぞれのサイトコレクション内の任意のサイトに最初にユーザーを追加したときに、UserInfo には tp_SiteIDが "xxxxxxxx" で tp_ID が "2" のエントリおよびtp_SiteIDが "yyyyyyyyy" で tp_ID が "2"  のエントリが追加されます。

4.サイトからのユーザーの削除

すべてのサイトからユーザーを削除しても UserInfo テーブルからエントリは削除されません(ユーザーにひもづくアイテムなどのリンクがどこにも所属しないものとなってしまわないようにするための処置であるようです)。意外とご存じないかも知れませんが、ユーザーの削除には "サイトからの削除" と "サイトコレクションからの削除" の2つがあります。

  • サイトからユーザーを削除するには:
    各サイトの[サイトの管理]-[権限の設定(詳細)]にアクセスし、直接アカウントにアクセス権限を割り当てている場合はそのまま目的のアカウントを選択する。SharePoint グループに所属しているユーザーの場合はサイドリンクバーに表示されるSharePointグループにアクセスし目的のアカウントを選択する。続いて [操作] -[ユーザー権限の削除] をクリック
  • サイトコレクションからユーザーを削除するには:
    各サイトの[サイトの管理]-[ユーザーとグループ]にアクセスし、サイドリンクバーに表示される[すべてのユーザー]をクリックする(サイトコレクション内のユーザーを一覧できる)。削除したいユーザーを選択し、[操作] - [サイトコレクションからのユーザーの削除]をクリック

サイトコレクションから削除されたかどうかは tp_Deleted 列が使用されるようです。この値の既定値は 0 です。サイトコレクションから削除されると既定ではこの値に tp_IDの値が代入され(つまり 0 ではなくなる) エントリ自体は残り続けます。サイトコレクション内のどこかのサイトに同じユーザーが再び追加されるとtp_Deleted 列の値が0に戻ります。

5.実験と結果

以上のことを踏まえて以下のような実験をしました。

  1. AD上に "DeleteUser" という名前のアカウントを作成
  2. テスト用のチームサイトを新規に作成し、DeleteUser を追加
  3. AD上から "DeleteUser" を削除し、新規に同じ名前のアカウントを作成
  4. DeleteUser でチームサイトにアクセス

上記のことを行うと、DeleteUser はWindowsシステムにはログオンできますが、SharePoint サイトには一切アクセスできないようになります。これはSIDの相違が原因です。2.でユーザーを追加したときに、UserInfo テーブルの tp_SystemID 列にアカウントのSID がコピーされます。しかし、このコピーはあくまで一方向のもので、かつ一回限りのものです。3. で新規にアカウントを作成しましたので、当然 SID は変わります。つまりログオン時のSID と UserInfo に登録されている SID が同一ではなくなるため、結果としてアクセス拒否されるようになるようです。このことから、ドメイン移行に伴うアカウント移行を行う場合は注意が必要です。SIDを更新したり、SIDhistory を引き継ぐように構成するには、stsadm.exe が利用できるようです。

stsadm.exe -o migrateuser -oldlogin <ドメイン名\ユーザー名> -newlogin <ドメイン名\ユーザー名> (-ignoresidhistory)

ドメインの移行をしたわけでなく、今回の実験のように単純に削除した同一名のアカウントを再び利用したい場合にも、"-ignoresidhistory" オプションを指定すれば利用できるようになるです。がコマンド実行後、"ユーザープロファイル移行中にエラーが発生しました" というエラーメッセージが表示されます。ただ結果的には、実験環境ではエラーメッセージにも関わらず、同一名アカウントでのアクセスができるようになりましたので tp_SystemIDは更新されているようです。

6. UserInfo と ユーザープロファイル

サイトにユーザーを追加すると UserInfo テーブルにユーザー情報のエントリが作成されることはすでに説明しました。さて、肝心のユーザープロファイルとの兼ね合いについてです。ユーザープロファイルは共有サービス管理で管理され、ADやLDAP, BDC などのデータソースからユーザー情報をSharePoint 側へ一方向に取得できます。ユーザープロファイルは管理画面からスケジューリングすることで、一定のタイミングでデータソースから最新の情報を更新できるようになっています。ユーザープロファイルには、上司や自己紹介、技能などのさまざまなプロパティ情報が格納されます。AD 側のユーザーアカウントのプロパティとマッピングしてやることで、そのままAD上のプロパティ情報を取り込むこともできますし、SharePoint 側で独自のプロパティを用意して利用することもできます。

さて、ここからが本題です。実は、ユーザープロファイルがあると、プロファイルの情報の一部がコンテンツDB側に同期されるようになっています。SharePoint は内部プロセスとしてタイマジョブという処理を行います。このジョブの中に、"プロファイルの同期" というものがあり、既定では1時間置きに実行されています。

  • タイマジョブの確認方法:
    [SharePoint 3.0 サーバーの全体管理]-[サーバー構成の管理]-[タイマジョブの状態]

ユーザーアカウントの情報以外にも、自己紹介、写真などの情報も同期されるようです。が、これらのユーザー情報は、コンテンツDB内の"dbo.AllUserData" テーブルの方で保持しているようです。

7.よくある混乱 : "ようこそ○○さん"

少し話は変わって、サイトの上部にはサインインしたユーザー名が表示されているかと思います("ようこそ ○○さん" の部分)。たとえば、あるユーザーが結婚したため苗字が変わったのでAD上でアカウントの表示名を変えます。すると当然SharePoint サイトに表示されるユーザー名にもすぐに反映してほしいところですが、そうはいきません。実は、この情報は UserInfo テーブル内の情報(tp_Title列)を参照しています。よって、プロファイルの方の更新を待ってからでしか最新情報が反映されません(プロファイル更新後、最大で1時間は待つ必要がある)。

しかも、この"ようこそ ○○さん" のドロップダウンメニューにある "個人用設定" をクリックした時に、個人用サイトを作成していると個人用サイトにジャンプします(個人用サイトが作成されていない場合は、UserInfoテーブルを参照)。個人用サイトで編集するユーザーのプロファイルは、あくまで 共有サービスプロバイダDBが管理しているユーザープロファイルデータです(SharedServices1_DB内のdbo.UserProfile_Fullテーブル)。この辺は、ユーザー情報がどう管理されているか分かりにくくしているところだと思います。※ユーザーの表示名、アカウント名など一部のプロパティは既定では編集不可となっています。よってインポートによる定期的な更新が不可欠ですね。

***************************************************
大変長くなってしまいましたが、以上がユーザー管理に関する調査結果でした。参考になれば幸いです。

2008年1月 8日 (火)

皆様、あけましておめでとうございます。本年もよろしくお願いいたします。

本日の内容はリストについてのTips 等をご紹介します。たとえば、チームサイトには「お知らせ」や「リンク」といった既定のリストが用意されていますし、リストテンプレートから新規にリストを作成することも可能です。こうしたリストはリレーショナルデータベースのテーブルと同じように列と行からなる「リスト構造」となっています。従って、広義ではドキュメントライブラリをはじめとする一連の "ライブラリ" も "リスト" と呼ばれることがあります。ただし、今回はライブラリを除くリストについて説明します。

リストでは、既定で次の4つファイルが使用されます。

  • AllItems.aspx : 既定の「すべてのアイテム ビュー」の表示
  • DispForm.aspx : プロパティの表示
  • NewForm.aspx : 新しいアイテム作成時に表示
  • EditForm.aspx : プロパティの編集時に表示

DispForm.aspx, NewForm.aspx, EditForm.aspx は1アイテムに対してプロパティの新規作成、表示、編集操作を行うもので "フォームページ" とも呼ばれます。

さて、このフォームページの中でも NewForm.aspx のカスタマイズについて面白いTipsを見つけたのでご紹介します。

次のようにURLを指定することで NewForm.aspx のページに任意の Web パーツを追加できるようになります。

  • リストのURL/NewForm.aspx?ToolPaneView=2

通常、NewForm.aspx ページを直接編集しようと思うとSharePoint Designer 2007 を使用する必要がありますが、この方法でアクセスすることで NewForm.aspx が編集モードで表示されるようになります。たとえば " コンテンツ エディタ Web パーツ" を追加してやると 任意の HTMLやJavaScriptを記述できるため、新規アイテムを作成する際のちょっとした説明を付け加えることなどが可能です。覚えておくと便利そうですね。

[図:NewForm.aspx の編集モード]

Newform_edit


<参考>Microsoft SharePoint Blog (英語)