カスタム リスト定義開発時の注意点
こんにちは、SharePoint サポート 森 健吾 (kenmori) です。
今回の投稿では、SharePoint におけるカスタマイズ手法の 1 つであるカスタムリスト定義の開発に着目し、開発および運用を実施するにあたり陥りやすい落とし穴について事前にご紹介します。
本投稿の構成は以下となります。
目次
1. はじめに
2. 注意点 (1) ListTemplate 要素 Type 属性
3. 注意点 (2) アンインストール時の注意点
1. はじめに
カスタム リスト定義は、特にパッケージ製品として独自のリスト設定を SharePoint のアドインとして提供するカスタマイズとなります。Visual Studio 2010 (および VS2008 + VSeWSS 1.3) ではリスト定義のためのプロジェクト テンプレートが用意されているため、これを選択するだけで、すぐにでも開発を始めることが可能です。
ウィザードに合わせて、リスト定義の開発を進めていきます。
この画面が出ました。もうこの時点で、[ビルド] – [ソリューションの配置] を実施するだけでカスタムのリスト定義をインストール可能です。もちろん、何の設定もしていないので、この時点では通常のリストと変わりはありません。
Elements.xml の ListTemplate 要素を編集して、今回はカスタム ドキュメント ライブラリを作るため、BaseType 属性等の以下の項目を編集します。(下の 2 つはどうでも良いですが、BaseType 属性は重要です。)
… BaseType =”1” DisplayName=”SuperDocumentLibrary” Description=”スーパー ドキュメント ライブラリ” … |
リストの基本型として 1 (ドキュメント ライブラリ) を指定します。BaseType 属性については以下の技術資料をご参照ください。
タイトル : ListTemplate 要素 (リスト テンプレート)
アドレス : https://msdn.microsoft.com/ja-jp/library/ms462947(v=office.14).aspx
あとは、Schema.xml や イベント レシーバー などを追加 (プロジェクトを右クリック [追加] – [新しい項目の追加] で “イベントレシーバー” を追加) するなど調整して独自のリスト定義を作っていってください。
タイトル : List 要素 (リスト)
アドレス : https://msdn.microsoft.com/ja-jp/library/ms415091(v=office.14).aspx
タイトル : Collaborative Application Markup Language のコア スキーマ
アドレス : https://msdn.microsoft.com/ja-jp/library/ms462365.aspx
これで、[ビルド] – [ソリューションの配置] を実施して、無事にスーパー ドキュメント ライブラリが作成できる状態になりました。
本番環境に展開する場合は、 ソリューション パッケージ をご使用ください。
2. 注意点 (1) ListTemplate 要素 Type 属性
上述の Elements.xml の記載にもありますが、この Type 属性はリスト定義を識別する番号であり、基本的には重複しないよう固有の値を設定することが極めて重要です。
Type 属性は SharePoint が該当リストやライブラリを識別するのに使用するもっとも重要なキー情報です。(Type が重複した時には、Sequence が小さい順に優先されます。)
SharePoint 2007 に対して提供していた VSeWSS の初期値は、元にしたリストまたはライブラリと同じ番号が指定されていました。
そのため、当時よくお問い合わせとして上がっていた問題としては、Type 属性が組み込みの SharePoint 2007 の番号と競合するため、カスタムのリスト定義が既定のリスト定義より優先されてロードされ、カスタムのリスト定義で動いてしまうという内容でした。
例えば、発行サイトを作った際に自動生成される “ドキュメント” ライブラリ (Type=101 : ドキュメント ライブラリ) が、代わりにカスタムのライブラリ定義で作られてしまうといった影響が発生します。
(画面上から、新しいリストまたはライブラリの作成より手動で作成した場合は、正常に動作する傾向があります。)
また、SharePoint 2010 では、10000 が既定で設定されます。10000 以降は SharePoint として予約されている値ではないため問題発生頻度が下げられているものの、複数のベンダーが同じ番号 10000 を設定した場合は、SharePoint 組み込みのリスト定義とは競合しないものの、異なるソリューション ベンダーのパッケージどうしでこのような競合が発生するリスクがあります。
上記の状況をふまえ、Type 属性の値は 10000 以降にすることはもちろんのこと、さらにその上で一般的な番号 (10000など) を避け他社が使用しないような番号を選んで採番してください。
そして、本番環境において想定と異なる動作をした場合は、最初に Type 属性の重複がないかを FEATURES フォルダなどを grep して疑う必要があります。
3. 注意点 (2) アンインストール時の注意点
本番環境でリスト定義をインストールしたら、アンインストールしないということをお勧めします。
もしも、アンインストールするのであれば、該当のリスト定義で作ったリストを全て消去した上でアンインストールしてください。場合によっては、深刻な問題を引き起こす可能性がありますので、本番環境へのインストールは軽い気持ちでは実施できません。
以下の手順で運用したと仮定します。
1) リスト定義をインストール
2) リスト定義からサイトにリストを作成
3) リスト定義をアンインストール
その結果、物理ファイルとして Elements.xml や Schema.xml 定義が存在しない状態のリストがコンテンツDB 内に残る形になります。このリストは再度リスト定義をインストールしない限り削除できません。
また、このような定義ファイルの存在しないリストが残っていることの影響も報告されています。
例えば、SharePoint Designer などで該当サイトのリスト・ライブラリの一覧を表示するとリストやライブラリが 1 件も表示されない現象や、サイトの設定画面から [コンテンツと構造] の画面に遷移した際にエラーとなってしまう現象などが確認されています。
リスト定義再インストールで復旧できれば良いです。しかし、最悪の状況としてリスト定義自体も手元にないということであれば、サイトを再作成して、リストやライブラリの情報をリスト テンプレートや手動コピー等で全て移行しないと復旧できないことが想定されます。
SharePoint としては、リスト定義がアンインストールされた状態でその定義を参照しているリストが残っている状況は想定外ですので、この点につきましては十分な注意をしてください。
補足
カスタマイズの内容は各ファーム単位でソリューション パッケージを使用してインストールを実施いただく必要がありますので、以下の手順でもアンインストールした状態と同じ状況になります。
1) ファーム Aでリスト定義をインストール
2) リスト定義からサイトにリストを作成
3) ファームA から、サイトコレクション バックアップ、サイトのエクスポート、サイト テンプレート、リスト テンプレート、いずれかの手法でデータを抽出します。
4) ファーム B へ、これらのデータを復元します。
ファーム B では、リスト定義がインストールされていないため同様の現象が発生します。このように移行を実施する際には、移行元環境にインストールされているリスト定義などのソリューションを事前に移行先環境にインストールしてください。
今回の投稿は以上となります。